目录
1,原代码注释
SECTIONS{
. = 0X87800000; /*“.”在链接脚本里面叫做定位计数器,要求代码链接到以 0X87800000为起始地址的地方*/
/* “.text”是段名,后面的冒号是语法要求,冒号后面的大括号里面可以填上要链接到“.text”这个段里面的所有文件,
* “*(.text)”中的“*”是通配符,表示所有输入文件的.text段都放到“.text”中。
*/
.text :
{
start.o /*start.o 要被链接到最开始的地方,因为 start.o 里面包含这第一个要执行的命令。*/
main.o /* main.o这个文件,其实可以不用写出来,可以由编译器自行决定链接位置*/
*(.text)
}
.rodata ALIGN(4) : {*(.rodata*)} /*ALIGN(4)表示 4 字节对齐。也就是说段“.data”的起始地址要能被 4 整除*/
.data ALIGN(4) : { *(.data) }
__bss_start = .; /*?“__bss_start”和“__bss_end”是符号,对这两个符号进行赋值,其值为定位符“.”,*/
.bss ALIGN(4) : { *(.bss) *(COMMON) } /*“.bss”数据就是那些定义了但是没有被初始化的变量。*/
__bss_end = .;
}
2,参考资料
2.1正点原子视频
https://www.bilibili.com/video/BV1yE411h7uQ?p=16
2.2 ld链接脚本语法简介
主要包含命令语句和赋值语句。
一、语法
1、分号,作为分隔符号
2、注释 表达式和运算符 和c一样,其中注释只有/**/
3、字符引用 段名文件名等有特殊字符,使用双引号
4、命令语句
a、ENTRY(symble) 指定入口地址,入口地址就是进程执行的第一条用户空间的指令再进程地址空间中的地址,被指定再ELF文件头的ELF32_Ehdr的e_entry成员中。
ld有多种指定程序入口方式:(优先级逐渐降低)
ld -e
entry()
_start符号
.text
0
b、STARTUP(filename) 将文件filename 作为链接过程中的第一个输入文件。
c、SEATCH_DIR 将路径path加入到ld链接器的库查找目录。 ld会根据指定的目录去查找相应的库。
d、INPUT(file,file,...) 将指定文件作为链接过程中的输入文件
e、INCLUDE filename 将指定文件包含进本链接脚本。
f、PROVIDE(symbol) 在链接脚本中定义某个符号。该符号再程序中可以被引用,起始前文提到的特殊符号都是由系统默认的链接脚本通过PROVIDE 命令定义在脚本中的
https://www.cnblogs.com/tureno/articles/3741291.html