0 前言
编译Linux内核生成的镜像主要有Image、zImage、bzImage和uImage四种:
- Image为内核映像文件;
- zImage为内核的一种映像压缩文件;
- uImage是uboot专用的映像文件,它是在zImage之前加上一个长度为64字节的“头”,说明这个内核的版本、加载位置、生成时间、大小等信息;其0x40之后与zImage没区别[11]。
1 vmlinuz
vmlinux是可引导的、压缩的内核,其中vm代表“Virtual Memory”(使用硬盘空间作为虚拟内存),是可执行的Linux内核,其路径通常为“/boot/vmlinuz-$(uname -r)”,通过file命令查看其格式如下:
(1)x86_64
# Ubuntu22.04(x86_64)
/boot/vmlinuz-6.5.0-15-generic: Linux kernel x86 boot executable bzImage, version 6.5.0-15-generic (buildd@bos03-amd64-040) #15~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Fri Jan 12 18:54:30 UTC 2, RO-rootFS, swap_dev 0XD, Normal VGA
可见x86_64的vmlinuz是只执行的bzImage。
(2)arm64
# UOS Pro V20(arm64)
/boot/vmlinuz-4.19.0-arm64-desktop: gzip compressed data, max compression, from Unix, original size 25980016
可见arm64的vmlinuz是gzip压缩数据,可通过参考资料[12][13]的方法将其解压出来:
确定偏移量:
sudo od -t x