u-boot: _start, _armboot_start, .word等概念的理解
2013-09-10 16:41
302 查看
例程:
.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 的话那就一切都错了!
转自:http://tan.bai.blog.163.com/blog/static/386039522010101811332589/
.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 的话那就一切都错了!
转自:http://tan.bai.blog.163.com/blog/static/386039522010101811332589/
相关文章推荐
- u-boot中 _start, _armboot_start, .word等概念的理解
- u-boot中 _start, _armboot_start, .word等概念的理解
- u-boot启动代码之start_armboot分析(原创)
- uboot 中的 start_armboot (void)
- 第1阶段——uboot分析之硬件初始化start_armboot函数(5)
- uboot第2阶段分析 start_armboot
- u-boot分析。 关于start_armboot()函数的具体实现
- u-boot中代码的疑问(_armboot_start与_start?)
- u-boot执行顺序start_armboot
- DECLARE_GLOBAL_DATA_PTR、gd_t、bd_t及uboot中 start_armboot 代码分析
- uboot中C语言代码入口函数(start_armboot)的注释
- 记录1--_start, _armboot_start, .word的作用
- uboot中C语言代码入口函数(start_armboot)的注释
- OK6410 uboot1.1.16/lib.arm的board.c相关函数分析(C语言执行的第一个函数start_armboot)
- u-boot中代码的疑问(_armboot_start与_start?) .
- UBOOT start.S 关于S3C2440时钟设置的理解
- S5PV210-uboot解析(三)-start_armboot解析
- u-boot中代码的疑问(_armboot_start与_start?) (转)
- 学习uboot之三start_armboot分析
- ARM U-BOOT _armboot_start与_start