【问题标题】:how to boot kernel image in u-boot without 'bootm' command如何在没有“bootm”命令的情况下在 u-boot 中启动内核映像
【发布时间】:2014-04-17 22:59:37
【问题描述】:

我正在使用 qemu 和 uboot 为 arm 开发一个简单的操作系统。我可以很好地加载 uboot,并且可以使用“bootm”命令后跟相应的地址来加载映像。我希望内核映像自动加载而无需调用 bootm。我将“#define CONFIG_BOOTCOMMAND”bootm 0x28124“”添加到通用.h 文件中,它会自动加载,但问题是该地址可以更改。我正在使用多功能 pb,我认为 uboot 缺少文档中说它应该具有的许多命令,这很奇怪。

【问题讨论】:

  • “uboot 缺少很多文档说它应该有的命令。” -- 给定 U-Boot 副本中的可用命令取决于如何U-Boot 是在构建时配置的。对于“自动”内核/程序执行,“自动启动”有一个倒数计时器。请参阅this answer 了解执行内核/程序的不同方式。请注意,命令可以采用变量和常量,因此您的 bootm 0x28124 也可以是 setenv loadaddr 0x28124; bootm ${loadaddr}
  • 我有倒数计时器,它通过定义“#define CONFIG_BOOTCOMMAND”bootm 0x28124“自动启动,但问题是内存地址的变化取决于内核的大小,所以我需要这个数字是动态的。bash 脚本会以某种方式解决这个问题吗?

标签: qemu u-boot


【解决方案1】:

u-boot 将压缩的内核映像复制到内存中,然后跳转到该内核映像的入口点。然后内核解压缩并将内核放在内存中的适当位置。 由于内核入口到内核映像的偏移量是固定的,压缩内核的位置由u-boot决定,通常是固定的。 当内核大小改变时,你不需要改变你的 bootm 地址

【讨论】:

  • 谢谢,我真的想通了,做了一些与此非常相似的事情。我将内核映像连接到特定位置的闪存二进制文件,并在该位置设置了 bootm。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-09
  • 2018-09-27
  • 1970-01-01
  • 2019-03-27
  • 2020-04-22
  • 2021-09-27
  • 2013-10-13
相关资源
最近更新 更多