当我们开始编程引导加载程序时,正确计算TEXT_BASE的值很重要,但我没有找到一个很好的解释如何根据平台数据表或其他材料找到这个值的教程。例如,对于arm920t和sumsang s3c24x0,u-boot定义了TEXT_BASE = 0x33F80000,原因如下:
SMDK2410有一组64 MB DRAM 3000'0000至3400'0000
Linux-Kernel预计为3000'8000,入口3000'8000,可选配30m'0000的ramdisk 我们自己加载到33F8'0000
下载区域是3300'0000
任何人都可以解释逻辑吗?谢谢!
ps:我也希望知道加载到ram后的u-boot的内存布局,每个数据/指令部分的地址,bss,rodata,zi等的大小。我预计会有人向我提供一些关于anaylyse的教程,谢谢!
答案 0 :(得分:0)
TEXT_BASE
是U-boot映像的基地址,即它从哪里开始执行。因此,如果U-boot直接从闪存运行,那么它就是闪存的地址。或者,如果ROM /固件负责加载U-boot,那么它就是RAM U-boot加载到的任何地址。因此,如果您将TEXT_BASE
设置为其他地址,则链接错误,并且可能会在重定位步骤中中断。
至于图像布局,请问什么?要么读取链接器脚本,要么只运行构建,然后反汇编u-boot
创建u-boot.bin
的ELF图像。