我如何知道 uboot 正在使用哪个内存 RAM 地址范围?

我如何知道 uboot 正在使用哪个内存 RAM 地址范围?

我在 uboot 中,想知道如何知道 uboot 正在使用哪个 RAM 地址范围。

uboot 需要内存才能运行,因此它可能会使用一些 RAM。我想避免修改这些 RAM 地址。

我如何知道uboot加载了内存的哪个区域?

答案1

DULG 调试UBootpage 有这样的说法(它所说的“重定位”是将自身从闪存复制到 RAM)。

为了在重定位后调试 U-Boot,我们需要知道 U-Boot 将自身重定位到的地址。当不使用 PRAM 等特殊功能时,该地址通常是 - CONFIG_SYS_MONITOR_LEN。在我们的示例中,具有 16MB RAM 且 CONFIG_SYS_MONITOR_LEN = 192KB,这会产生地址 0x1000000 - 0x30000 = 0xFD0000。

进一步阅读文本似乎表明它取决于处理器或主板,您可能需要检查 U-Boot 源代码才能确定。

关于古鲁普拉格:

在 RAM 方面,u-Boot 保留了前 8 MB。其余的都是免费的。一些开发人员会在 0×800000 处加载内核和文件系统以对闪存进行编程。另一个常见点是 100 MB 边界(或偏移 0×640000)。

根据您的 U-Boot 命令版本,可能可以将字符串放入空闲 RAM 中的某个位置,然后在 RAM 的其余部分中查找该字符串,从而显示 U-Boot 在内存中的大致位置。

答案2

当我启动我正在使用的 uboot 版本时,它会自动显示“虚拟内核内存布局”。

Memory: 859068k/859068k available, 25668k reserved, 0K highmem
Virtual kernel memory layout:
    vector  : 0xffff0000 - 0xffff1000   (   4 kB)
    fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)
    DMA     : 0xf9e00000 - 0xffe00000   (  96 MB)
    vmalloc : 0xe0800000 - 0xf4000000   ( 312 MB)
    lowmem  : 0x80000000 - 0xe0000000   (1536 MB)
    pkmap   : 0x7fe00000 - 0x80000000   (   2 MB)
    modules : 0x7f000000 - 0x7fe00000   (  14 MB)
      .init : 0x80008000 - 0x8004d000   ( 276 kB)
      .text : 0x8004d000 - 0x808ad000   (8576 kB)
      .data : 0x808ce000 - 0x80937a40   ( 423 kB)

我发现将 lowmem 区域用于我想要运行的各种实用程序进程(例如将大文件加载到内存中)是安全的。理想情况下,我认为你想使用高内存来完成这类事情,但我没有这个选择(正如你在我的输出中看到的那样)。

相关内容