本周学习了一些ARM指令、伪指令、链接脚本命令等,并对整个编译过程、elf文件有了更加深入的理解。ARM指令在ARM架构参考手册里面有了详细的介绍,这里不再列出,以下是一些GCC链接脚本命令的分析。
以SylixOS启动脚本为例,分析一下链接脚本相关命令。SylixOS链接文件包括config.h、config.lds、SylixOSBSP.ld,它们位于BSP板级支持包根目录内。
config.h文件定义了RAM、ROM的基址和大小,定义了TXET、DATA、DMA、APP段的大小,config.h文件定义如下:
config.lds文件定义如下:
MEMORY命令用来描述目标内存块的位置和大小,config.lds文件定义了两个内存块区域,TEXT(可读可执行)和DATA(可读可写),ORIGIN表示内存区域的起始地址,LENGTH表示内存长度。
SylixOSBSP.ld文件定义如下:
由于.data段的装载地址与运行地址不相同,那么在C代码运行之前,需要汇编去实现将.data段的数据从装载地址拷贝到运行地址处,然后程序才可以正常运行。初始化代码在startup.S中实现。
至于.bss段、.stack段、.heap段,里面的值并不重要,不需要装载进BIN文件,只需记录它们的起始地址和结束地址,再进行相应操作即可。
|
SylixOS启动脚本分析
最新推荐文章于 2022-09-20 14:30:15 发布