一、背景
Linux内核是整个Linux操作系统的核心部分,它是一个负责与硬件直接交互的软件层,并且提供多种服务和接口,让用户程序能够方便地使用硬件资源。
当我们编译自定义内核时,可以将其生成为以下内核映像之一:vmlinux,zimage、bzimage、image和bzImage。 了解其中的差异,可以帮忙我们更好地选择。
二、Linux内核映像
内核映像是包含内核代码和其他组件的二进制表示形式的文件。让我们看看我们拥有的各种 Linux 内核映像。
2.1 vmlinx
原始的、未压缩的 Linux 内核映像称为vmlinux。vmlinux 是未压缩且不可引导形式的内核。这是生产vmlinuz的中间步骤。它包含调试符号以及完整且未修改的内核代码。
Linux 前面的“vm”代表虚拟内存。在Linux中,我们可以使用一部分硬盘空间作为虚拟内存,因此得名“vm”。
2.2 zImage
zImage 是指一种独特的压缩内核映像文件格式。zImage是vmlinux经过gzip压缩后的文件。它解决了无法处理大型压缩内核映像的旧引导加载程序的限制。
使用称为LZ77的压缩算法压缩zimage。LZ77压缩算法优化了速度,完美平衡了压缩比和解压缩性能。LZ77 压缩创建的图像文件比 bzimage小。
2.3 bzImage
bzImage 是指 Linux 引导加载程序用于在系统引导过程中加载和初始化内核的压缩内核映像文件。引导加载程序从引导设备读取 bzImage 文件并将其解压缩到内存中。然后,它将控制权转移到解压缩的内核映像,该映像继续引导过程。
bzImage 文件是编译 Linux 内核源代码的