图像vs zImage vs uImage


83

它们之间有什么区别?

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

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



看来您的问题与创建BOOT.BIN文件时遵循的方式有关。我也使用ZedBoard,但是没有遇到这样的问题。
yildizabdullah 2014年

是的,我使用了错误版本的u-boot.elf来创建BOOT.bin
2014年

Answers:


116

它们之间有什么区别?

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

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

uImage:具有U引导程序包装(由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也可能具有可以启动zImage的bootz命令。


1
我最不了解的是zImage =压缩的映像uImage =映像+ uBoot包装器,如果我错了,请纠正我,uBoot包装器包含uBoot标头和其他信息,例如引导设备加载地址,入口点,但是我找不到显示全部内容的引用uImage的格式,请您分享相关信息
Mouin

感谢您的反馈,我找到了有关uImage标头格式的资源。我不明白的是:1-我在哪里可以找到加载地址(引导设备加载地址)和uImage中的入口点(它们不存在于标头中)2- zImage是否包含这些信息(加载地址)和入口点),这就是为什么我要问zImage和uImage的格式的原因
-Mouin

“我不了解的内容...” -不要尝试在评论中开始讨论。发表新问题。
木屑

OK:链接
Mouin
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.