图像vs zImage vs uImage

yil*_*lah 70 linux-kernel embedded-linux u-boot

他们之间有什么区别?

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

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

saw*_*ust 104

他们之间有什么区别?

图像:通用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.