图像vs zImage vs uImage

时间:2014-03-11 10:01:22

标签: linux-kernel embedded-linux u-boot

他们之间有什么区别?

我知道u-boot需要uImage格式的内核。

我使用的系统首先从第1阶段加载器启动,然后调用u-boot。我想丢弃u-boot并直接从第1阶段加载器启动。我必须使用哪种类型的内核映像?

1 个答案:

答案 0 :(得分:97)

  

他们之间有什么区别?

图像:通用Linux内核二进制映像文件。

zImage :自我解压缩的Linux内核映像的压缩版本。

uImage :具有U-Boot包装器(由 mkimage 实用程序安装)的图像文件,其中包含操作系统类型和加载程序信息。
一种非常常见的做法(例如典型的Linux内核Makefile)是使用zImage文件。由于zImage文件是自解压缩的(即不需要外部解压缩程序),因此包装器将指示此内核未被压缩"即使它确实是。


请注意,U-Boot的作者/维护者考虑在uImage中使用zImage的(广泛使用)可疑:

  

实际上,在uImage中使用zImage非常愚蠢。它是   更好地使用普通(未压缩)内核映像,压缩它   使用gzip,并将其用作mkimage的poayload。这条路   U-Boot完全不同,而不是包含另一个   每个内核映像的解压缩器。

(引自https://lists.yoctoproject.org/pipermail/yocto/2013-October/016778.html


  

我必须使用哪种类型的内核映像?

您可以选择任何您想要编程的内容 为了便于存储,您应该在未压缩的图像上选择压缩图像 请注意,执行内核(可能是Linux内核)不仅仅涉及将内核映像加载到内存中。根据体系结构(例如ARM)和Linux内核版本(例如有或没有DTB),可能必须为内核准备寄存器和内存缓冲区。在一个实例中,还有U-Boot执行的必须复制的硬件初始化。

<强>附录

  

我知道u-boot需要uImage格式的内核。

对于只有 bootm 命令的所有U-Boot版本都是准确的 但是更新版本的U-Boot也可以使用 bootz 命令来启动zImage。