
vmlinux,zImage,Image的区别终稿.pdf
4页vmlinux, zImage, Image的区别从下面的内核 编译过程,可以看出 vmlinux, arch/arm/boot/compressed/vmlinux, arch/arm/boot/Image, arch/arm/boot/zImage 之间的区别. LD vmlinux SYSMAP System.map SYSMAP .tmp_System.map OBJCOPY arch/arm/boot/Image Kernel: arch/arm/boot/Image is ready AS arch/arm/boot/compressed/head.o GZIP arch/arm/boot/compressed/piggy.gz AS arch/arm/boot/compressed/piggy.o LD arch/arm/boot/compressed/vmlinux OBJCOPY arch/arm/boot/zImage Kernel: arch/arm/boot/zImage is ready vmlinux 是一个 elf 格式的文件Image 是经过 objcopy 处理了的只包含内核代 码,数据的一个文件,已经不是 elf 格式的了。
此 时还没有经过压缩arch/arm/boot/compressed/vmlinux 是经过压缩 的 Image 和加入了解 压头的 elf格式的文件arch/arm/boot/zImage 是经过 objcopy 处理了的可以直接下到 对应的地址 执行的内核 镜像objcopy: GNU 实用工具程序 objcopy 的作用是拷 贝一个目 标文件的内容到另一个目 标文件中Objcopy 使用 GNU BFD 库去读或写目 标文件 Objcopy 可以使用不同于源目 标文件的格式来写目的目 标文件(也即是 说可以将一 种格式的目 标文件转换成另一 种格式的目 标文 件)通过以上命令行 选项可以控制 Objcopy 的具体操作Objcopy 在进 行目标文件的 转换时 ,将生成一个 临时文件, 转换完成后就将 这个临时文件删掉Objcopy 使用 BFD做转换工作如果没有明确地格式要求,则 Objcopy 将访问所有在BFD库中已经描述了的并且它可以 识别的格式, 请参见GNUpro Decelopment Tools 中“using ld”一章中 “BFD库”部分和 “BFD库中规范的目 标文件格式 ”部分。
通过使用 srec 作为输出目标(使用命令行 选项-o srec ),Objcopy 可以产生 S记录格式文件通 过使用 binary 作为输出目标(使用命令行 选项-o binary),Objcopy 可以产生原始的二进制文件使用 Objcopy 产生一个原始的二 进制文件, 实质上是进行了一回 输入目标文件内容的内存 转 储所有的符号和重定位信息都将被丢弃内存 转储起始于 输入目标文件中那些将要拷 贝到输出目标文件去的部分的最小虚地址处使用 Objcopy 生成 S记录格式文件或者原始的二 进制文件的 过程中, -S 选项和-R 选项可能会比较有用S 选项是用来 删掉包含 调试信息的部分, -R 选项是用来 删掉包含了二 进制文件不需要的内容的那些部分内核编译(make )之后会生成两个文件,一个Image,一个 zImage,其中 Image 为内核映像文件,而 zImage为内核的一 种映像压缩文件, Image大约为 4M ,而 zImage 不到 2M 那么 uImage又是什 么的?它是 uboot 专用的映像文件,它是在zImage 之前加上一个 长度为 64字节的“头”,说明这个内核的版本、加 载位置、生成 时间、大小等信息;其0 x40之后与 zImage没区别。
如 何生成 uImage文件?首先在 uboot 的/tools目录下寻找 mkimage文件,把其 copy到系统/usr/local/bin目录下,这样就 完成制作工具然后在内核目录下运行make uImage,如果成功,便可以在arch/arm/boot/目录下发现 uImage文件,其大小比zImage 多 64 个字节其实就是一个自 动跟手动的区别, 有了 uImage 头部的描述 ,u-boot就知道 对应 Image 的信息 ,如果没有 头部则需要自己手 动去搞那些参数U-boot 的 U是“通用”的意思zImage 是 ARM Linux 常用的一 种压缩 映像文件, uImage是 U-boot 专用的映像文件,它是在 zImage 之前加上一个 长度为 0 x40 的“头”,说明 这个映像文件的 类型、加 载位置、生成时间、大小等信息 换句话说,如果直接从 uImage的 0 x40 位置开始执行,zImage和uImage没有任何区别另外, Linux2.4 内核不支持 uImage,Linux2.6内核加入了很多 对嵌入式系 统的支持,但是 uImage 的生成也需要 设置。
在博创 2410开发板上的 过程示例xiehappyending linux-2.6.24.4$ make uImage CHK include/linux/version.h make1: “include/asm -arm/mach- types.h ”是最新的 CHK include/linux/utsrelease.h CALL scripts/checksyscalls.sh :1097:2: warning: #warning syscall fadvise64 not implemented :1265:2: warning: #warning syscall migrate_pages not implemented :1321:2: warning: #warning syscall pselect6 not implemented :1325:2: warning: #warning syscall ppoll not implemented :1365:2: warning: #warning syscall epoll_pwait not implemented CHK include/linux/compile.h dnsdomainname: Unknown host Kernel: arch/arm/boot/Image is ready Kernel: arch/arm/boot/zImage is ready UIMAGE arch/arm/boot/uImage mkimage command not found - U-Boot images will not be built Image arch/arm/boot/uImage is ready roothappyending linux-2.6.24.4# cp mkimage /usr/local/bin roothappyending linux-2.6.24.4# which mkimage /usr/local/bin/mkimage xiehappyending linux-2.6.24.4$ make uImage CHK include/linux/version.h make1: “include/asm -arm/mach- types.h ”是最新的。
CHK include/linux/utsrelease.h CALL scripts/checksyscalls.sh :1097:2: warning: #warning syscall fadvise64 not implemented :1265:2: warning: #warning syscall migrate_pages not implemented :1321:2: warning: #warning syscall pselect6 not implemented :1325:2: warning: #warning syscall ppoll not implemented :1365:2: warning: #warning syscall epoll_pwait not implemented CHK include/linux/compile.h dnsdomainname: Unknown host Kernel: arch/arm/boot/Image is ready Kernel: arch/arm/boot/zImage is ready UIMAGE arch/arm/boot/uImage Image Name: Linux-2.6.24.4 Created: Fri Apr 16 16:08:40 2010 Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 1831944 Bytes = 1789.01 kB = 1.75 MB Load Address: 0 x30008000 Entry Point: 0 x30008000 Image arch/arm/boot/uImage is ready xiehappyending linux-2.6.24.4$ ls -l arch/arm/boot/zImage -rwxrwxr-x 1 xie xie 1831944 04-16 12:14 arch/arm/boot/zImage xiehappyending linux-2.6.24.4$ ls -l arch/arm/boot/uImage -rw-rw-r- 1 xie xie 1832008 04-16 16:08 arch/arm/boot/uImage uImage比 zImage 大 64 个字节,。
