【问题标题】:Image vs zImage vs uImageImage vs zImage vs uImage
【发布时间】:2018-05-02 04:50:46
【问题描述】:

它们有什么区别?

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

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

【问题讨论】:

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


【解决方案1】:

它们有什么区别?

Image:通用 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 也可以具有可以启动 zImage 的 bootz 命令。

【讨论】:

  • 我的理解是 zImage = 压缩图像 uImage = Image + uBoot 包装器,如果我错了,请纠正我,uBoot 包装器包含 uBoot 标头和额外信息,例如引导设备加载地址、入口点,但我找不到显示 uImage 整个格式的参考资料,请您分享一下链接
  • 感谢您的反馈,我找到了resources about uImage header format。我不明白的是:1-我在哪里可以找到uImage中的加载地址(引导设备加载地址)和入口点(它们不存在于标题中)2-zImage是否包含这些信息(加载地址和入口点),这就是为什么我要询问 zImage 和 uImage 的格式
猜你喜欢
  • 2018-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-16
  • 2019-11-21
  • 1970-01-01
  • 2012-02-08
  • 2020-03-02
相关资源
最近更新 更多