Linux kernel 图像vs zImage vs uImage

Linux kernel 图像vs zImage vs uImage,linux-kernel,embedded-linux,u-boot,Linux Kernel,Embedded Linux,U Boot,他们之间有什么区别 我知道u-boot需要一个uImage格式的内核 我使用的系统首先从阶段1加载程序启动,然后调用u-boot。我想放弃u-boot,直接从Stage1加载程序启动。我必须使用哪种类型的内核映像 他们之间有什么区别 映像:通用Linux内核二进制映像文件 zImage:自解压Linux内核映像的压缩版本 uImage:具有U-Boot包装(由mkimage实用程序安装)的映像文件,其中包括操作系统类型和加载程序信息。 一种非常常见的做法(例如典型的Linux内核Makefile

他们之间有什么区别

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

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

他们之间有什么区别

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

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

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


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

实际上,在uImage中使用zImage是相当愚蠢的。它是 使用普通(未压缩)内核映像要好得多,压缩它 只使用gzip,并将其用作mkimage的poayload。这边 U-Boot进行解压,而不是包括另一个 每个内核映像的解压器

(引自)


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

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

附录

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

这对于只有bootm命令的所有U-Boot版本都是准确的。

但是U-Boot的最新版本也可能有bootz命令,可以引导zImage。

在这方面你能帮我吗?看起来你的问题是关于创建Boot.BIN文件时的操作方式。我也使用ZedBoard,但没有遇到这样的问题。是的,我使用了错误版本的u-boot.elf来创建引导。b终极超集问题:我的Understanding是zImage=compressed Image uImage=Image+uBoot wrapper,如果我错了,请纠正我,uBoot包装包含uBoot头和额外信息,如引导设备加载地址、入口点,但我找不到显示uImage整个格式的参考。请分享相关链接。谢谢你的反馈,我已经找到了。我不明白的是:1-我在哪里可以找到uImage中的加载地址(引导设备加载地址)和入口点(它们在标题中不存在)2-zImage是否包含这些信息(加载地址和入口点),这就是为什么我问zImage和uImage的格式“我不明白…”--不要试图在评论中开始讨论。发布新问题。确定: