(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段就是自定义段,自定义段很重要。
相关文章
- 02-172.4.9:uboot的链接脚本(u-boot.lds)
- 02-17Linux下的lds链接脚本简介
- 02-17驱动开发学习笔记. 0.07 Uboot链接地址 加载地址 和 链接脚本地址
- 02-17[Python爬虫] :Selenium +phantomjs 利用 pyquery抓取脚本链接对应的内容
- 02-17linux下s3c2440重定位(4)连接脚本的学习_拷贝代码和链接脚本的改进
- 02-17Linux下的lds链接脚本详解
- 02-17[转]Linux下的lds链接脚本详解
- 02-17Linux下的lds链接脚本简介
- 02-17Linux下的lds链接脚本详解【转】
- 02-17迁移到MSYS2 与 Qt 工具链注意的几个事情(g++在链接时,符号依赖项查找遵循从左至右的顺序,但qmake会自动合并造成错误。使用脚本给Mingw32-make创造出一个局部的VC编译环境)