我必须找出我的arch linux系统的linux内核的压缩类型,但是我找不到比理论更多的方法:现在是bzip2(bz),以前是gzip(z)。
在我的计算机中,我运行以下命令:
$ file /boot/vmlinuz-linux
/boot/vmlinuz-linux: Linux kernel x86 boot executable bzImage, version 5.3.11-arch1-1 (linux@archlinux) #1 SMP PREEMPT Tue, 12 Nov 2019 22:19:48 +0000, RO-rootFS, swap_dev 0x5, Normal VGA
查看理论,我看到它bzImage
必须被 压缩gzip (z)
,但我无法证明:
bzImage 是使用 gzip 压缩的,直到 Linux 2.6.30 引入了更多算法。虽然有一种流行的误解,认为 bz 前缀意味着使用了 bzip2 压缩(bzip2 包通常与以 bz 为前缀的工具一起分发,例如 bzless、bzcat 等),但事实并非如此。
有什么方法可以在我自己的机器上证明吗?或者在这种情况下,理论本身是“经验的”?
要最终确定用于给定内核映像的压缩方式,而不需要运行它或查找其配置,您可以遵循内核自己的
extract-vmlinux
脚本使用的方法:在图像中查找压缩器的签名:
gunzip
:\037\213\010
xz
:\3757zXZ\000
bzip2
:BZh
lzma
:\135\0\0\0
lzo
:\211\114\132
lz4
:\002!L\030
zstd
:(\265/\375
尝试从图像中提取数据,从您找到的任何签名的偏移量开始;
检查结果(如果有)是否为 ELF 图像。
我在这里修改了脚本,以便它只报告压缩类型。我没有在此处包含它,因为它仅在 GPL 2 下获得许可。
您可以查看您的内核支持哪些压缩方法。只能选择一个,这样就可以证明它是哪一个。
在这里,我使用 gzip:
VMlinuz 已在 gzip 中压缩,您可以在以下链接中看到:
http://www.linfo.org/vmlinuz.html
https://www.ibm.com/developerworks/community/blogs/mhhaque/entry/anatomy_of_the_initrd_and_vmlinuz?lang=en
https://en.wikipedia.org/wiki/Vmlinux
具有讽刺意味的是,网页上说很多人将该扩展名与 bzip2 混淆,如下所示:
我希望您会发现这些信息对您有所帮助。