龙空技术网

kernel不同镜像的区别

菜卓001 347

前言:

如今兄弟们对“ubuntulzma”可能比较关心,我们都想要知道一些“ubuntulzma”的相关资讯。那么小编同时在网上汇集了一些有关“ubuntulzma””的相关资讯,希望你们能喜欢,小伙伴们快快来学习一下吧!

在构建kernel时可以选择不同的格式,作为初学者可能会对不同的名称存在疑惑。如ubuntu中的kernel文件是在/boot路径下,格式为vmlinuz:

xxx@xxx-virtual-machine:/boot$ tree -L 1 -n|grep vm├── vmlinuz -> vmlinuz-5.19.0-35-generic├── vmlinuz-5.19.0-32-generic├── vmlinuz-5.19.0-35-generic└── vmlinuz.old -> vmlinuz-5.19.0-32-generic

vmlinuz名字最早起源于unix世界,在60年代kernel被简单的称为"unix",所以在90年代linux首次公布时被称为"linux"。当虚拟内存(virtual memory)被开发用于多任务处理能力时,"vm"被加在了最前面表示kernel支持虚拟内存。有段时间linux kernel被称为"vmlinux",后来kernel变得太大无法容纳可用引导内存,因此kernel image被压缩并且 x 更改为 z 以表明是使用 zlib 进行压缩的,有的使用LZMA 和 BZIP2进行压缩,kernel也可以简单称为zImage。

不同kernel Image之间的差异:

Image:通用的linux kernel 二进制文件;vmlinux:包含linux kernel静态链接的可执行文件vmlinux若要用于调试时则必须要在开机前增加symbol table;vmlinux.bin:与 vmlinux 相同,但采用可引导的原始二进制文件格式,不包括symbols和relocation信息,vmlinux通过objcopy -O binary vmlinux vmlinux.bin可以生成vmlinux.bin;vmlinuz: vmlinux 经过 gzip和objcopy 制作出来的压缩文件,vmlinuz是一种统称,有两种具体的表现形式zImage 和bzImage。vmlinuz在系统开机启动过程中通过decompress_kernel()函数解压,在启动过程中会有以下打印:

Decompressing Linux... doneBooting the kernel.
zImage:压缩映像文件,用于压缩后小于512KB的旧格式,在启动时,此映像会加载到内存低位;bzImage:bz表示big zImage,非bzip2压缩,用于解压后超过512KB的压缩镜像。该格式镜像会加载到内存高位。bzImage将kernel切割成不连续的内存区域来应对大小的限制,包含了 bootsect.o + setup.o + misc.o + piggy.o。

bzImage

uImage:uboot加载器专用的镜像文件,包含了uboot header和OS等信息,Uboot可以通过这些信息进行load、jump等操作。使用mkimage工具将kernel制作为uboot可以识别的格式uImage。

下图对镜像文件进行概括:

参考:

标签: #ubuntulzma