u-boot.lds与-Ttext $(TEXT_BASE)

本文通过在U-BOOT.LDS中添加变量并修改start.S文件,进行实验来理解ARM Boot Start中存放的内容及处理过程。通过makeall和objdump命令观察locationcounter的变化,揭示.text段的位置和大小。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在看本博文之前,先看下华嵌的一篇文章,写的十分简单明了(里面的VMA.LMA可能写混了)
http://www.embedu.org/Column/Column345.htm
看完之后,我们就明白了ldr r2, _armboot_start当中到底存放的是什么值了.
不过到底其中一个大概的处理过程是怎么样的呢??
我们来做一个实验.
先在U-BOOT.LDS当中再增加几个变量来显示(location counter)当时的值。




. = 0x00000000;
. = ALIGN(4);
_testa = .; //added 
.text      :
{
 cpu/arm920t/start.o(.text)
 *(.text)
}
_testb= .; //added
然后再在start.S当中添加
_TEST1:
.word _testa
_TEST2:
.word _testb


然后make all,再objdump
我们会发现
33000040 <_TEST1>:
33000040:       00000000        andeq   r0, r0, r0


33000044 <_TEST2>:
33000044:       33018964        tstcc   r1, #1638400    ; 0x190000


我们会发现location counter 从0x0瞬间变成了0X33000000(我们在CONFIG.MK当中定义的TEXT_BASE)
0x18964这个应该是我们.text段的大小。从_armboot_start跟_bss_start这里的值也能猜测出来.


然后我们试着把.text修改为.context(或者其他什么名字),再objdump,
之后我们会发现
00000040 <_TEST1>:
      40:       00000000        andeq   r0, r0, r0


00000044 <_TEST2>:
      44:       00018964        andeq   r8, r1, r4, ror #18


所以大概可以认为-Ttext $(TEXT_BASE)这个参数会去u-boot.lds中寻找.text这个段,如果找到,就将存放.text段当时的location counter修改为TEXT_BASE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值