- vmlinux是一个包含linux kernel的静态链接的可执行文件,文件类型是可执行的ELF格式
- vmlinuz是可引导的,压缩的linux内核,”vm”代表的”virtual memory”。
vmlinuz是vmlinux经过gzip和objcopy(*)制作出来的压缩文件。
vmlinuz不仅是一个压缩文件,而且在文件的开头部分内嵌有gzip解压缩代码。
所以你不能用gunzip 或 gzip –dc解包vmlinuz。
vmlinuz是一个统称,有两种具体的表现形式:zImage和bzImage(big zImage)。
zImage和bzImage的区别在于本身的大小和加载到内存的地址不同。zImage是0~640KB,bzImage是1M以上。
如果内核比较小,那么可以采用zImage 或bzImage之一,两种方式引导的系统运行时是相同的。大的内核采用bzImage,不能采用zImage。
将vmlinuz解压为vmlinux
➜ boot # od -t x1 -A d vmlinuz-3.10.0-957.el7.x86_64 | grep “1f 8b 08 00”
0018352 ac fe ff ff 1f 8b 08 00 00 00 00 00 02 03 ec dd
➜ boot # dd if=vmlinuz-3.10.0-957.el7.x86_64 bs=1 skip=0018356 | zcat > vmlinux
gzip: stdin: decompression OK, trailing garbage ignored
skip=0018356 这个数是怎么算出来的呢?其实很简单,就是 0018352 这个数加上 0018352 到 1f 8b 08 00 的间隔
即: 0018352 + 4 = 0018356
查看vmlinx文件格式为ELF文件
➜ boot # file vmlinux
vmlinux: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, BuildID[sha1]=73d8d1ce9146a6e8db9be6d62c9f3fcb0e126dc4, stripped