加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ARM U-BOOT _armboot_start与_start (转载)

发布时间:2020-12-15 18:29:43 所属栏目:百科 来源:网络整理
导读:关于u-boot中 _start,_armboot_start,.word等概念的理解 例程: ??.globl?_armboot_start? _armboot_start: ?.word?_start ?ldr r2,_armboot_start? 链接后查看: a1700044 _armboot_start:? a1700044: a1700000 .word 0xa1700000? a1700074: e51f2038 ldr r2

关于u-boot中 _start,_armboot_start,.word等概念的理解

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
例程:
??.globl?_armboot_start?
_armboot_start:
?.word?_start

?ldr r2,_armboot_start?
链接后查看:
a1700044 <_armboot_start>:?
a1700044: a1700000 .word 0xa1700000?
a1700074: e51f2038 ldr r2,[pc,#-56] ; a1700044 <_armboot_start>?
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

1. 汇编语言中所有定义的标号指的都是绝对地址,对标号的引用也就是绝对地址的引用.
?? _armboot_start: 相当于直接的 #define 定义,对_armboot_start的引用就是直接的替换操作.

2. 汇编中没有变量的概念,但是使用LDR指令可以实现类似C中变量的功能.
?? 比如上程序中,?
?ldr r2,_armboot_start???[1]
?? 与
?ldr r2,=_armboot_start???[2]
?? 是不同的,[1]可以理解为将变量_armboot_start的值即_start送入r2.
???????????? [2]则是将_armboot_start所在的地址送入日r2. 相当于C中的&_armboot_start(取地址操作).

3. 汇编中的.word其实是变相的实现了C的变量功能,只是在使用上值得大家注意.

4. u-boot中start.S做了如下的多处定义:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_TEXT_BASE:
?.word?TEXT_BASE

??.globl?_armboot_start
_armboot_start:
?.word?_start

??.globl?_bss_start
_bss_start:
?.word?__bss_start

??.globl?_bss_end _bss_end: ?.word?_end >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ?? 其实就是一个变量的定义,这样在汇编中通过ldr实现了变量的操作. 而当在C语言中作为变量引用时又很方便. ?? 比如lib_arm/board.c中start_armboot()函数中对u-boot镜像大小的计算: ?monitor_flash_len = _bss_start - _armboot_start; ?? 这在C语言中就是简单的变量操作,但是如果直接使用 __bss_start-_start 的话那就一切都错了!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读