图像vs zImage vs uImage

他们有什么区别?

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

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

他们有什么区别?

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

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

uImage :具有包含OStypes和加载程序信息的U-Boot包装(由mkimage实用程序安装)的映像文件。
一个非常普遍的做法(例如典型的Linux内核Makefile)是使用zImage文件。 由于zImage文件是自解压的(即不需要外部解压缩器),所以包装器会指示这个内核是“未压缩的”,即使它实际上是。


请注意,U-Boot的作者/维护者认为在uImage中使用zImage(广泛使用)是有问题的:

实际上,在uImage中使用zImage是相当愚蠢的。 使用正常的(未压缩的)内核映像比使用gzip压缩它好得多,并将它用作mkimage的poayload。 这种方式U-Boot做uncompresiong,而不是每个内核映像包含另一个uncompressor。

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


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

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

附录

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

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