我怎样才能知道uboot正在使用哪个内存RAM地址范围?


12

我在uboot中,想知道如何分辨uboot使用的RAM地址范围。

uboot需要内存才能运行,因此它可能正在使用某些RAM。我想避免修改那些RAM地址。

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

Answers:


2

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

为了在重新定位后调试U-Boot,我们需要知道U-Boot自身重新定位到的地址。当不使用任何外来功能(如PRAM)时,此地址通常为-CONFIG_SYS_MONITOR_LEN。在具有16MB RAM和CONFIG_SYS_MONITOR_LEN = 192KB的示例中,这产生了地址0x1000000-0x30000 = 0xFD0000。

进一步阅读本文似乎表明它取决于处理器或主板,并且您可能必须检查U-Boot来源才能确定。

关于Guruplug

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

根据您的U-Boot版本,可以使用命令将字符串放置在可用RAM中的某个位置,然后在RAM的其余部分中寻找该字符串,从而揭示U-Boot在内存中的大概位置。


1

当我启动所使用的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区域用于我想运行的各种实用程序进程是安全的(例如将大文件加载到内存中)。理想情况下,我认为您想在这种情况下使用高内存,但我没有选择(如您在输出中所见)。


您确定那不是Linux的内存映射吗?
claymation'4

我不确定。缺乏高内存和对“虚拟内核”的引用使我产生了其他想法。对于uboot,我是一个菜鸟/黑客。这里的重点是,我能够安全地使用该低内存范围,而无需覆盖uboot似乎需要的任何内容。
BuvinJ

我记得,这是在加载操作系统之前显示的。
BuvinJ
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.