Linux内核镜像格式:
1)原始编译版本,vmlinux
vmlinux是可引导的、未压缩、可压缩的内核镜像,vm代表Virtual Memory。
它是由用户对内核源码编译得到的最原始的内核文件,实质是elf格式的文件。这种格式的镜像文件多存放在PC机上。
2)非压缩版本,Image
Image是经过objcopy处理的只包含二进制数据的内核代码,它已经不是elf格式了,但这种格式的内核镜像还没有经过压缩。
objcopy是一种格式的目标文件转换成另一种格式的目标文件的工具。通过使用binary作为输出目标(-o binary),可产生一个原始的二进制文件,实质上是将所有的符号和重定位信息都将被抛弃,只剩下二进制数据。
3)压缩版本,zImage
zImage是Image经过gzip压缩形成的,所以它的大小比Image小。为了能使用zImage这个压缩版本,必须在它的开头加上解压缩的代码,将zImage解压缩之后才能执行,因此它的执行速度比Image要慢。但考虑到嵌入式系统的存储空容量一般都比较小,内核要常驻内存,采用zImage可以占用较少的存储空间,因此牺牲一点性能上的代价也是值得的,所以一般嵌入式系统均采用压缩的内核映像文件,即zImage。
zImage是ARMLinux常用的一种压缩映像文件。
4)uboot专用版本,uImage
uImage是U-boot专用的映像文件,它是在zImage之前加上一个长度为0x40的“头”,说明这个映像文件的类型、加载位置、生成时间、大小等信息。如果直接从uImage的0x40位置开始执行,zImage和uImage没有任何区别。