为什么使用 uImage 而不是 zImage

2023-11-23

我正在尝试了解 zImage 和 uImage 之间的区别。

以我的理解uImage是通过运行得到的mkimage on the Image结果它添加了一个 U-Boot 包装器(我不知道它到底包含什么),其中包含header加上加载地址和入口点,也许还有我不知道的“额外信息”。

另一方面zImage是压缩的Image,它不包含加载地址和入口点(我的想法,如果我错了请纠正我),但U-Boot也可以使用加载它bootz.

  • 在这种情况下为什么要使用uImage代替zImage?

  • 我很想知道 zImage 和 uImage 的格式是什么,您能否建议一些参考资料?


根据我的理解,uImage 是通过在 Image 上运行 mkimage 获得的

您的理解仅部分正确。
A uImage可以包含任何类型的文件,并且不限于LinuxImage文件。事实上它不太可能是(未压缩的)Image文件(因为这不是传统的make选项)。

另一方面,zImage 是压缩图像,它不包含加载地址和入口点(我的想法,如果我[原文如此]错了,请纠正我)

你错了,是zImage确实包含内核的加载地址和入口点。需要加载地址才能将内核映像解压到正确的 RAM 地址。解压后需要内核的入口点来执行它。
为 ARM 构建 Image 和 zImage 时,Makefile 使用

ZRELADDR == virt_to_phys(PAGE_OFFSET + TEXT_OFFSET)

这应该转换为物理内存的开头 + 0x8000。

zImage 本身(即自解压程序)是 PIC,位置无关代码。 zImage可以加载到RAM中的任何位置,并在其首地址执行,即它的入口点是它的加载地址。

在这种情况下,为什么使用 uImage 而不是 zImage?

对于旧版本的 U-Boot,没有选择,因为bootz命令可能不适用于 Linux 内核。
如今,这可能是一种主观选择。

请注意,Linux 内核社区对内核中对 U-Boot 的支持存在一些不满。 IOW,如果有些人按他们的方式行事,我的印象是你将无法建立一个uImage来自主线源。

我[原文如此]很想了解 zImage 和 uImage 的格式是什么,您能否建议一些参考资料?

zImage 的布局本质上是由其链接器规范给出的。
对于 ARM,请参阅arch/arm/boot/compressed/vmlinux.lds.S.
注意_magic_start包含无意义的加载地址。 Vincent Sanders 的第 5 节也提到了这一点引导 ARM Linux

The zImage has a magic number and some useful information near its beginning.

Table 2. Useful fields in zImage head code
Offset into zImage  Value       Description
    0x24        0x016F2818      Magic number used to identify this is an ARM Linux zImage
    0x28        start address   The address the zImage starts at
    0x2C        end address     The address the zImage ends at

The start and end offsets can be used to determine the length of the compressed image (size = end - start).  
 ...  
The start address is usually 0 as the zImage code is position independent.

但请注意,ARM 启动要求已被 Russel King 的启动要求取代文档/手臂/启动

uImage 的布局只是 U-Boot 标头加上图像文件(无论是什么)。

(希望我所写的内容与汤姆·里尼所写的内容没有矛盾。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么使用 uImage 而不是 zImage 的相关文章

随机推荐

  • 输出带有数字分组的数字(1000000 为 1,000,000 等)

    虽然自己写一些东西来做到这一点很容易 但我经常想知道是否有类似的东西iomanip或某处 但是 我从未找到有用的东西 理想情况下 它对区域设置敏感 例如 在德国 您可以将 1 234 567 89 写为 1 234 567 89 因此比手动
  • 如何在QEMU源代码中添加新设备?

    模拟 添加新设备的逐步方法是什么qemu使用 QOM 方法 DeviceState BusState 和其他属性可能会发生哪些变化以及在哪里发生变化 edu树内教育 PCI 设备 https github com qemu qemu blo
  • ASP.NET MVC 注定要取代 Webforms 吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我发现了这些问题 但其中有
  • Numpy:如何检查数组是否包含某些数字?

    例如 我有a np array 123 412 444 and b np array 123 321 我想知道是否a包含all中的元素b 有一个简单的操作吗 在这种情况下 情况并非如此 你总是可以使用一组 gt gt gt a numpy
  • AddOAuth linkedin dotnet core 2.0

    我正在使用 dotnet core 我想在网站上设置 LinkedIn 身份验证 因为 LinkedIn 没有像 facebook google 和 twitter 这样的默认身份验证构建器 我决定使用通用实现 如下所示 services
  • 时间:2019-03-17 标签:c#networklogin

    如何在 C 中以编程方式执行网络登录 例如访问共享驱动程序 可以通过尝试通过资源管理器打开共享或通过 net use shell 命令来实现相同的目的 P Invoke 调用WNetAddConnection2会成功的 看here了解更多信
  • NetBeans - “sun-resources.xml”与“glassfish-resources.xml”

    您知道 Netbeans 如何决定应用程序范围的资源使用哪个文件名 sun resources xml or glassfish resources xml 该名称是可配置的还是硬编码的 据我了解 GlassFish 支持sun resou
  • 在 WebGL 着色器中获取准确的整数模

    我想获得精确的模数x and y在 WebGL 片段着色器中 x and y是整数 Graphing mod x y we get the following 用于生成红黑矩形的实际代码是 gl FragColor vec4 mod flo
  • 将鼠标悬停在对象上时获取对象的“原始”(非悬停)背景颜色

    我可以使用以下函数获取任何元素的背景颜色 example css background 然而 就我而言 鼠标移动到该元素上时 由于 CSS 我收到了修改后的颜色 hover伪类 有什么办法可以得到原色吗 就像是 example cssWit
  • 多行编辑文本,其中部分不可编辑,例如填空

    我需要一个包含 textview 和 edittext 的视图 例子 Yay you made it to We should hang out feel to follow me 上面的 可以是任意长度 并且最后应该感觉像一个段落 上面给
  • 如何加入 TransactionScope?

    简洁版本 我如何加入正在进行的交易范围 长版 如果您使用交易范围 您可以创建一个 周围的 交易 using TransactionScope scope new TransactionScope stuff happens then you
  • 获取屏幕比例

    我们可以获得屏幕的分辨率和内容Screen班级 所以 我们应该使用Screen WorkingArea Width and Screen WorkingArea Height 如果我们想在屏幕中央放置一些东西 但是 在 Windows 8
  • read() 和 fread() 有什么区别?

    我正在阅读linux工具的源代码坏块 他们使用read 在那里发挥作用 和标准C有区别吗fread 功能 我没有将参数视为差异 read 是低级 无缓冲的读取 它在 UNIX 上进行直接系统调用 fread 是 C 库的一部分 并提供缓冲读
  • Paypal 快速结账优惠券代码

    我在我的网站上使用 Paypal Express Checkout 系统 但我想放一个优惠券 折扣 代码区域 如果代码为真 则会减少 如 GoDaddy com 的购物车系统 您知道我应该从哪里开始吗 我没有使用任何电子商务框架 我知道这是
  • 使用自定义分隔符通过 Spring Boot 生成 DDL

    我想使用 spring boot v1 4 3 和 JPA Hibernate 5 0 11 生成创建和删除 ddl 脚本 我发现的大多数答案都使用javax persistence schema generation特性 例如 https
  • 数据框中每行的最小值

    我尝试计算多列的最小值 按行min 在数据框中 但是min函数自动返回每列整体的最小值 而不是单独返回每行的最小值 我确定我在这里错过了一些非常简单的东西 任何想法都非常感激 x lt c 1 2 7 y lt c 1 5 4 minIwa
  • 在 Android 中添加具有正确格式的项目符号

    我想在 Android 文本中显示项目符号 我已经成功添加它们了 我在网上搜索发现可以添加项目符号 但是如果文本超过一行 它就不会像 html 列表那样遵循正确的间距 请参阅下面的屏幕截图 我使用以下代码来添加项目符号 String lon
  • 如何从虚拟键代码转换为 System.Windows.Forms.Keys

    如果我使用 win32 调用拦截按键操作 我现在就有了一个按键代码 有没有办法将其转换为 System Windows Forms Keys 值 Use KeyInterop KeyFromVirtualKey
  • go lang 中 amqp.Dial 线程安全时是否每次都创建连接

    正如 RabbitMQ 文档中提到的 tcp 连接的建立成本很高 因此 引入了通道的概念 现在我遇到了这个example 在里面main 每次发布消息时它都会创建连接 conn err amqp Dial amqp guest guest
  • 为什么使用 uImage 而不是 zImage

    我正在尝试了解 zImage 和 uImage 之间的区别 以我的理解uImage是通过运行得到的mkimage on the Image结果它添加了一个 U Boot 包装器 我不知道它到底包含什么 其中包含header加上加载地址和入口