嵌入式-文件链接与分布
执行文件在存储设备的分布
文件内容
文件在存储介质中的地址,有存储地址与运行地址之分。顾名思义:运行地址是代码被执行过程中,代码的地址。存储地址是代码在存储介质中的地址。
而一个bin文件一般分为:text,data,bss,rodata四个段。这些内容在执行过程中,需要被链接到哪些地址上。需要有信息加以说明。在嵌入式系统中,
有链接脚本文件,用于说明链接到不同地址的内容。
SECTIONS{
.=0x100030000;//当前位置 地址信息
.text:{*{.text}}//代码段内容
.=0x20000000;
.data ALIGN(4) : {*{.data}}//数据段内容
.bss ALIGN(4) : {*{.bss}}//未被初始化或初始化为0的全局变量存储区域
}
具体事例
以imx6ull平台为例,bin文件执行的地址是0x87800000,在链接文件中需要指定链接地址(运行地址),在链接文件中说明。在文件架构中,start.s文件需要被链接到最开始的地方,
引起存放中断向量表:具体的链接文件如下所示:
SECTIONS{
.=0x87800000;
.text :
{
start.o//start文件放置在起始开头处
main.o
*(.text)
}
.rodata ALIGN(4) : {*(.rodata)}
.data ALIGN(4) : {*(.data)}
__bss_start= . ;//bss段初始位置
.bss ALIGN(4) : {*(.bss) *(COMMON)}
__bss_end = . ;//bss段终止位置
}
困于心 衡于虑 而后作