【问题标题】:Not able to mount rootfs on zedboard无法在 zedboard 上挂载 rootfs
【发布时间】:2013-08-07 10:37:07
【问题描述】:

我在加载我的根 fs 时遇到问题,在检查内核日志后它说类似

“INITRD: 0x1f8ca000+0x0028ac63 不是内存区域 - 禁用 initrd”

这是什么意思?

背景

我在 ARM Cortex A9 的一个内核上运行 linux,并尝试在另一个内核上运行另一个裸机应用程序。我已经更改了设备树以反映这一点,我为 Linux 保留了 SDRAM 的一部分,为裸机应用程序保留了一部分。我正在使用Uboot。这与uboot有关吗?

干杯, S

【问题讨论】:

  • 你能发布你的Uboot配置和Linux内核版本吗?该消息来自 arch/arm/mm/init.c。 memblock_is_region_memory() 失败。
  • 嗨,感谢您将我指向该文件。这确实是因为我的内核试图将 Ramdisk 加载到我在设备树中为我的 linux 分配的地址范围之外(由 uboot 完成)通过设置变量 initrd_high 来修复它

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


【解决方案1】:

由于您没有将整个 RAM 专用于主内核上的 Linux 内核,因此您需要确保 bootargs 中指定的 intrd 加载地址可从主内核访问。

接下来,这个信息通常在从 u-boot 传递的 bootargs 中传递给 Linux 内核

initrd=<initrd-start-addr>,<initrd-size>

根据您的自定义内存映射修改它

最后在 u-boot 中,将 initrd 加载到您刚刚指定的新正确地址并启动 Linux 内核。

【讨论】:

  • 嗨,我没有这样做就修好了。但是你说的理由是对的。问题是我的 Ramdisk 被加载到 linux 可以看到的 RAM 内存之外。所以我只是设置了环境变量initrd_high来指定linux可以使用的最大地址。
  • 限制整个 RAM 被使用的内存映射,定义在 u-boot(或 DTS,在你的情况下)的 bootargs 中,适用于 Linux 内核。当您使用 u-boot 将initrd 映像加载到 RAM 中时,您还需要通知 u-boot 有关 RAM 限制的信息。正如您所提到的,您在 u-bbot 中使用 initrd_high 实现了这一点,u-boot 确实使用它来决定在哪里加载图像。 :-)
  • 哦,是的,我输入了一个更大的评论,提出了一个问题,但后来意识到你刚才提到的:D。谢谢。
猜你喜欢
  • 2023-03-26
  • 2018-11-01
  • 2014-04-30
  • 1970-01-01
  • 2010-12-29
  • 1970-01-01
  • 2020-02-15
  • 1970-01-01
  • 2019-07-16
相关资源
最近更新 更多