kernel不同镜像的区别

在构建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之间的差异:

  1. Image:通用的linux kernel 二进制文件;
  2. vmlinux:包含linux kernel静态链接的可执行文件vmlinux若要用于调试时则必须要在开机前增加symbol table;
  3. vmlinux.bin:与 vmlinux 相同,但采用可引导的原始二进制文件格式,不包括symbols和relocation信息,vmlinux通过objcopy -O binary vmlinux vmlinux.bin可以生成vmlinux.bin;
  4. vmlinuz: vmlinux 经过 gzip和objcopy 制作出来的压缩文件,vmlinuz是一种统称,有两种具体的表现形式zImage 和bzImage。vmlinuz在系统开机启动过程中通过decompress_kernel()函数解压,在启动过程中会有以下打印:
Decompressing Linux... done
Booting the kernel.
  1. zImage:压缩映像文件,用于压缩后小于512KB的旧格式,在启动时,此映像会加载到内存低位;
  2. bzImage:bz表示big zImage,非bzip2压缩,用于解压后超过512KB的压缩镜像。该格式镜像会加载到内存高位。bzImage将kernel切割成不连续的内存区域来应对大小的限制,包含了 bootsect.o + setup.o + misc.o + piggy.o。

bzImage

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

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


参考:

https://ineclabs.com/image-zimage-uimage-vmlinuz-linux-kernel/

https://en.wikipedia.org/wiki/Vmlinux

http://www.isysop.com/unpacking-and-repacking-u-boot-uimage-files/

展开阅读全文

页面更新:2024-05-04

标签:低位   映像   加载   区别   内存   年代   简单   格式   二进制文件   文件   信息

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top