2.4.9:uboot的链接脚本(u-boot.lds)

(1)uboot的链接脚本和我们之前裸机中的链接脚本并没有本质区别,只是复杂度高一些,文件多一些,使用到的技巧多一些。
(2)ENTRY(_start)用来指定整个程序的入口地址。所谓入口地址就是整个程序的开头地址,可以认为就是整个程序的第一句指令。
有点像C语言中的main。
(3)之前在裸机中告诉大家,指定程序的链接地址有2种方法:一种是在Makefile中ld的flags(链接属性)用-Ttext 0x20000000来
指定;第二种:是在链接脚本的SECTIONS开头用 . = 0x20000000来指定。两种都可以实现相同效果。其实这两种技巧是可以共同配合
使用的,也就是说既在链接脚本中指定也在ld flage中用-Ttext来指定。两个都指定以后以-Ttext指定为准。(所以我们这个链接
脚本中指定是的 .=0x0000000 ,而实际是用TEXT_BASE =0xc3e00000指定的链接地址)
在主Makefile中(2589行)
x210_sd_config : unconfig
@$(MKCONFIG) $(@:_config=) arm s5pc11x x210 samsung s5pc110
@echo “TEXT_BASE = 0xc3e00000” > $(obj)board/samsung/x210/config.mk
这两行代码指定的链接地址。config.mk的内容就是TEXT_BASE = 0xc3e00000。
(4)uboot的最终链接起始地址是在Makefile中用-Ttext来指定的,具体参见2.4.5节,注意:TEXT_BASE是变量。最终来源是Makefile中
配置对应的命令中,在make xxx config(x210_sd_config)时得到的。
(5).ALIGN(4)是4字节对齐。
(6)在txet代码段必须注意排列顺序。指定必须放在前面部分的那些文件就是那些必须安排在前16KB内的文件,这些文件中的函数在
前16KB会被调用。在后面第二部分(16KB之后部分)中调用的程序,前后顺序就无所谓了。
(7)链接脚本中除了.text(代码段) .data(数据段) .rodata(只读数据段) .bss段等编译工具自带的段之外,编译工具还允许
我们自定义段。譬如说:uboot中的u_boot_cmd段就是自定义段,自定义段很重要。

上一篇:深入研究不平衡回归问题


下一篇:微服务系列之Nacos注册中心源码解读