嵌入式-文件链接与分布()

执行文件在存储设备的分布

文件内容

文件在存储介质中的地址,有存储地址与运行地址之分。顾名思义:运行地址是代码被执行过程中,代码的地址。存储地址是代码在存储介质中的地址。

而一个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段终止位置

}

————————

执行文件在存储设备的分布

文件内容

文件在存储介质中的地址,有存储地址与运行地址之分。顾名思义:运行地址是代码被执行过程中,代码的地址。存储地址是代码在存储介质中的地址。

而一个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段终止位置

}