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