"); //-->
关于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 的话那就一切都错了!
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
高功率密度、国产保障:20-60W DC/DC电源模块
请问uclinux下面怎么编译perl
南芯科技发布音频功率放大器,定义“声临其境”的声学体验
发光二极管随周围亮度调节电流的电路
由交流电网供电的闪光灯电路
大嘴业话:直面国内测试仪器的差距(二)
弥合传感器融合鸿沟:FPGA如何助力边缘端实时机器人应用
哪位大虾有闻亭公司的tms-320系列isa仿真器驱动啊,我的丢失了,帮忙发个给我啊
Nucleus MNT评估版,内含MNT实时内核,可用Visual C++编译
ARM - The Architecture for The Digital World
Microsoft Visual C++ .NET技术内幕(第6版)
英飞凌发布《2026年GaN技术展望》:技术创新引领功率半导体领域氮化镓高速增长
最新教育示波分析技术及应用
英飞凌推出首款带光耦仿真器输入的隔离栅极驱动器IC
Metrowerks Platform Creation Suite for Linux OS
经!典!爱!情! (转贴)
Gartner:2026年全球主权云IaaS支出预计将达到800亿美元
国家奖项授牌!金升阳“小巨人”持续释放“大能量”
Motorola 68K软件仿真器,由Lauterbach公司发布
走近 MIPS
请问uClinux里面有linux里面的ioctls.h之类的头文件吗?
采用无稳态触发器的闪烁电路
嵌入式硬件调试问题???
TDK面向严苛的汽车和工业应用需求推出工作温度高达+125 °C的直流支撑电容器
SmartDV与Mirabilis Design宣布就SmartDV IP系统级模型达成战略合作
MC68HC11交叉汇编程序v1.84
Cloudera宣布强劲财年业绩,进一步巩固其“Data and AI Anywhere”平台领导者地位
ADIsim RF-快捷 、易用的收发信机信号链路计算工具
交流电网供电的发光二极管电路
由电池供电的闪光灯电路