龙空技术网

Linux内核映像区别

小田BSP 271

前言:

此刻我们对“ubuntugbd调试”都比较注意,小伙伴们都需要了解一些“ubuntugbd调试”的相关文章。那么小编在网络上网罗了一些对于“ubuntugbd调试””的相关内容,希望同学们能喜欢,我们快快来学习一下吧!

本文介绍几种常用的Linux内核映像的区别。

一、vmlinux

vmlinux:Linux内核编译出来的原始的内核文件,elf格式,未做压缩处理。

该映像可用于定位内核问题,但不能直接引导Linux系统启动。

使用readelf命令查看RockPI 4A单板Linux内核编译的vmlinux,内容如下:

root@ubuntu:/home/run/code/rockchip-bsp/kernel# readelf -h vmlinuxELF Header:  Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00  Class:                             ELF64  Data:                              2's complement, little endian  Version:                           1 (current)  OS/ABI:                            UNIX - System V  ABI Version:                       0  Type:                              EXEC (Executable file)  Machine:                           AArch64                           ## 64位系统  Version:                           0x1  Entry point address:               0xffffff8008080000  Start of program headers:          64 (bytes into file)  Start of section headers:          264512168 (bytes into file)  Flags:                             0x0  Size of this header:               64 (bytes)  Size of program headers:           56 (bytes)  Number of program headers:         4  Size of section headers:           64 (bytes)  Number of section headers:         36  Section header string table index: 35
二、Image

Image:Linux内核编译时,使用objcopy处理vmlinux后生成的二进制内核映像。

该映像未压缩,可直接引导Linux系统启动。

RockPI 4A单板Linux内核编译vmlinuxImage过程如下:

root@ubuntu:/home/run/code/rockchip-bsp# ./build/mk-kernel.sh rockpi4a Building kernel for rockpi4a board!4.4.154                                     ## 4.4.154内核  ...  LINK    vmlinux  LD      vmlinux.o  MODPOST vmlinux.o  GEN     .version  CHK     include/generated/compile.h  UPD     include/generated/compile.h  CC      init/version.o  LD      init/built-in.o  KSYM    .tmp_kallsyms1.o  KSYM    .tmp_kallsyms2.o  LD      vmlinux                              SORTEX  vmlinux  SYSMAP  System.map  OBJCOPY arch/arm64/boot/Image               ## 使用objcopy命令将vmlinux变为Image映像

objcopy命令的用法后续介绍。

三、zImage

zImage:使用gzip压缩Image后,使用objcopy命令生成的Linux内核映像。

该映像一般作为uboot的引导映像文件。uboot引导命令后续介绍。

四、uImage

uImage:在zImage前面增加一个64字节的头,描述映像文件类型,加载位置,大小等信息。

该映像是老版本uboot专用的引导映像。

下图是基于imx6 处理器Linux内核编译出的zImageuImage的差异,区别如下:

zImage和uImage的差异

imx6单板Linux内核编译zImageuImage过程如下:

root@ubuntu:/home/run/code/imx6/linux-3.0.35# ./mk_kernel.sh arch/arm/configs/imx6_defconfig:1629:warning: override: reassigning to symbol SND_SOC_IMX_WM8962  ...  LD      vmlinux                                        ## 1.制作vmlinux  SYSMAP  System.map  SYSMAP  .tmp_System.map  OBJCOPY arch/arm/boot/Image                            ## 2.使用objcopy命令生成Image  Kernel: arch/arm/boot/Image is ready  GZIP    arch/arm/boot/compressed/piggy.gzip            ## 3.压缩  AS      arch/arm/boot/compressed/piggy.gzip.o  SHIPPED arch/arm/boot/compressed/lib1funcs.S  AS      arch/arm/boot/compressed/lib1funcs.o  LD      arch/arm/boot/compressed/vmlinux                 OBJCOPY arch/arm/boot/zImage                           ## 4.使用objcopy命令生成zImage  Kernel: arch/arm/boot/zImage is ready  UIMAGE  arch/arm/boot/uImage                           ## 5.使用mkimage命令生成uImageImage Name:   Linux-3.0.35-2666-gbdde708-g5083Created:      Sun May  2 08:38:41 2021Image Type:   ARM Linux Kernel Image (uncompressed)Data Size:    3250684 Bytes = 3174.50 kB = 3.10 MBLoad Address: 0x10008000Entry Point:  0x10008000  Image arch/arm/boot/uImage is ready

下图展示了不同类型的Linux映像生成过程。

Linux映像生成过程

注:zImage和uImage用于32位内核。

标签: #ubuntugbd调试