- ARM工具链中gcc、ld、objcopy、objdump工具的作用?
gcc(编译器):将(.S .c)高级语言代码转换为汇编代码,再将汇编代码转换为(.o)目标文件;
ld(链接器):从-T后的链接地址开始,将多个(.o)目标文件链接成(.elf)可执行文件;
objcopy(目标文件格式转换器):将(.elf)可执行文件转换为(.bin)纯二进制格式文件,并从目标文件中提取特定的段;
objdump(反汇编器):将(.bin)机器码反汇编为汇编代码。
- .text段、.bss段、common段、.data段、.rodata段区别?
.text段:存放代码和指令
.bss段:存放未初始化的静态变量和初始化为0的全局变量
common段:存放未初始化的全局变量
.data段:存放非0初值的全局变量和静态变量
.rodata段:存放只读常量(const、字符串常量、switch跳转表、浮点数常量)
注:在main函数运行前,要将.bss和common段清0
- 你的imx6ull在启动裸机代码之前都干了什么?
1.先定义异常向量表
2.上电之后,触发复位中断,进入_reset_handler
3.切换irq普通中断工作模式,并设置栈指针地址;再切换到system工作模式,设置对应的栈指针寄存器
4.对.bss段和common段清0处理
5.跳入main主函数