[求助]u-boot for 44b0疑问
lds中这么写的:
[code]
. = 0x00000000;
. = ALIGN(4);
.text :
{
cpu/s3c44b0/start.o (.text)
*(.text)
}
……
[/code]
start.S中有这么一段:
[code]
adr r0, _start /* r0 <- current position of code */
ldr r1, _TEXT_BASE /* test if we run from flash or RAM */
cmp r0, r1 /* don't reloc during debug */
beq stack_setup
[/code]
注释中说根据_start与_TEXT_BASE相等与否来判断是从flash还是ram启动。TEXT_BASE默认设为0x0c100000。看lds中写的难道_start不是0吗?难道还会跟着变动?
我理解是lds中的都是output section,所以描述的是运行时的分布情况。
如果是这样,那岂不是所有代码数据都在flash中?因为从0开始依次放置。如果要在ram中运行,至少有一段要写成类似的:
[code]
.=RAM_BASE
.data:
{
}
……
[/code]
莫非lds描述的是加载时的分布情况?
可能有点乱,我整理下我的问题:
1. 为什么map中的_start是从TEXT_BASE开始的而不是从0开始?
2. u-boot.lds中描述的是运行时还是加载时的分布情况?
3. start.S中有relocate代码,也就是说flash和ram中有两份代码。运行的时候到底跑的是哪个?按照lds的写法,难道在flash中跑不成?
还有一个土问:u-boot.bin怎么弄到裸板里去?elf格式的调试环境怎么搭?
以上问题,恳请大虾不吝赐教。