Linux内核映像vmlinux、Image、zImage、uImage区别
内容提要
本文介绍了Linux内核映像的几种常见类型:vmlinux、Image、zImage和uImage,它们分别是未压缩的原始内核文件、处理后的二进制映像、使用gzip压缩后的映像和增加头信息的引导映像。文章还提到了它们的用途和生成过程。
延伸解读
从vmlinux到可引导映像的转换
vmlinux是编译生成的原始ELF文件,包含调试信息,不能直接引导。通过objcopy去除ELF头等,生成未压缩的Image,可直接引导。若需压缩,则用gzip压缩Image并添加自解压头,生成zImage。uImage则在zImage前添加64字节头,描述类型、加载地址等,供老版uboot使用。
不同映像的适用场景
vmlinux主要用于内核调试和问题排查,因其包含符号信息。Image适用于直接引导,无需解压,但体积较大。zImage是压缩后的映像,节省存储空间,常用于uboot引导。uImage专用于老版本uboot,新版本uboot通常支持zImage。注意zImage和uImage主要用于32位内核。
生成过程与工具链
编译内核时,链接生成vmlinux,然后objcopy生成Image。对于zImage,会压缩Image为piggy.gzip,再与解压代码链接,最终objcopy生成zImage。uImage则通过mkimage工具在zImage前添加头信息。这些步骤在编译日志中可见,如OBJCOPY、GZIP、UIMAGE等命令。
Q&A
vmlinux是什么?
vmlinux是Linux内核编译生成的未压缩原始内核文件,采用elf格式,无法直接用于引导启动Linux系统。
Image和vmlinux有什么区别?
Image是通过objcopy处理vmlinux生成的二进制内核映像,未压缩且可直接引导Linux系统,而vmlinux无法直接引导。
zImage的生成过程是怎样的?
zImage是使用gzip压缩Image后生成的内核映像,通常作为uboot的引导映像文件。
uImage与zImage有什么不同?
uImage是在zImage前增加64字节头信息的引导映像,专用于老版本uboot,而zImage没有这个头信息。
如何生成Image映像?
Image映像是通过objcopy处理vmlinux生成的,具体过程包括编译和链接vmlinux后使用objcopy命令。
zImage和uImage主要用于什么?
zImage和uImage主要用于32位内核的引导映像,zImage通常作为uboot的引导映像文件。