TQ2440 学习笔记—— 29、移植U-Boot【U-Boot 的编译、链接过程】
来源:互联网 发布:mysql 5.5 64 msi下载 编辑:程序博客网 时间:2024/05/17 00:08
(韦东山——嵌入式Linux 应用开发完全手册)
U-Boot 的编译、链接过程
配置完后,执行” make all“即可编译,从Makefile 中可以了解 U-Boot 使用了哪些文件、哪个文件首先执行、可执行文件占用的内存情况。
先确定用到哪些文件,下面所示为Makefile 中与ARM 相关的部分。
第117、164 行用于包含其他的config.mk 文件,第117行所要包含文件的就是上面的配置过程中制作出来的 include/config.mk文件, 其中定义了 ARCH、CPU、BOARD、SOC等4个变量的值为arm、arm920t、EmbedSky、s3c24x0。
第164行包含顶层目录的config.mk 文件,它们根据上面4个变量的值确定了编译器、编译选项等。其中对我们理解编译过程有帮助的是BOARDDIR、LDFLAGS 的值,如下图所示:
在board / EmbedSky/ config.mk中,定义了 “TEXT_BASE = 0x33D00000”。所以结果如下:BOARDDIR 为EmbedSky; LADFLAGS 中有 “-T board /EmbedSky/u-boot.lds -Ttext 0x33D00000”。
从第169 行可以得知,OBJS 的第一个值为“cpu/$(CPU)/start.o”,即“cpu/arm920T/start.o”。
第193~210 行指定了LIBS 变量就是平台/开发板相关的各个目录、通用目录下相应的库。
OBJS、LIBS所代表的.o、.a 文件就是u-boot 的构成,它们通过如下命令由相应的源文件(或相应子目录下的文件)编译得到。
第266~268行的规则表示,对于OBJS 中的每个成员,都将进入cpu/$(CPU) 目录(即cpu/arm920t)编译它们。现在OBJS 为cpu/arm/920t/start.o,它将有cpu/arm920t/start.S 编译得到。
第270、271两行的规则表示,对于LIBS中的每个成员,都将进入相应的子目录执行"make"命令。这些子目录中的Makefile,结构相似,它们将Makefile 中指定的文件编译、链接成一个库文件。
当所有的OBJS、LIBS所表示的.o和.a 文件都生成后,就剩最后的链接了,这对应Makefile 中如下几行:
先使用260~264 的规则链接得到ELF 格式的u-boot,最后转换为二进制格式u-boot.bin、S-Record格式u-boot.srec。
LDFLAGS 确定了链接方式,其中的“-T board /EmbedSky/u-boot.lds -Ttext 0x33D00000” 字样指定了程序的布局、地址。
board /EmbedSky/u-boot.lds 文件如下:
从35行可知,cpu/arm920t/start.o 被放在程序的最前面,所以u-boot 的入口点在cpu/arm920t/start.S 中。
U-Boot 的编译流程总结:
(1)首先编译“cpu/$(CPU)/start.S”,对于不同的CPU,还可能编译“cpu/$(CPU)”下其他的文件。
(2)然后,对于平台/开发板相关的每个目录、每个通用目录都使用它们各自的Makefile 生成相应的库。
(3)将1、2步骤生成的.o 、.a 文件按照board / EmbedSky/ config.mk 文件中指定的代码起始地址、board /EmbedSky/u-boot.lds 链接脚本链接。
(4)第3步得到的是ELF格式的u-boot,后面的Makefile 还会将它转换为二进制格式、S-Record 格式。
- TQ2440 学习笔记—— 29、移植U-Boot【U-Boot 的编译、链接过程】
- TQ2440 学习笔记—— 28、移植U-Boot【U-Boot 的配置过程】
- TQ2440 学习笔记—— 32、移植U-Boot【U-Boot 的移植】
- TQ2440 学习笔记—— 30、移植U-Boot【U-Boot 的启动过程第一阶段源码分析】
- TQ2440 学习笔记—— 31、移植U-Boot【U-Boot 的启动过程第二阶段源码分析】
- U-boot 编译学习--- U-boot 的编译链接过程
- U-boot 的编译链接与移植
- TQ2440 学习笔记—— 27、移植U-Boot【Bootloader 作用、工作流程】
- u-boot移植编译过程
- U-Boot移植(二)——U-Boot编译过程分析(1)
- U-Boot移植(二)——U-Boot编译过程分析(2)
- U-Boot移植(二)——U-Boot编译过程分析(3)
- U-Boot移植(二)——U-Boot编译过程分析(4)
- U-boot移植过程
- U-boot移植过程
- u-boot编译学习--uboot编译链接过程
- u-boot-1.1.6移植到TQ2440笔记——准备工作(1)
- u-boot-2015.01在TQ2440上移植过程分享
- 工作周报056
- Redhat 6.6 + Qt5.5 编译QOCI驱动
- Maven,Mybatis-generator配置
- weblogic部署项目:Cannot set web app root system property when WAR file is not expanded
- 我的成长——年终总结
- TQ2440 学习笔记—— 29、移植U-Boot【U-Boot 的编译、链接过程】
- ASIHTTPRequest类库简介和使用说明
- 什么时候创建索引
- iOS个人学习日记
- BZOJ 2788 [Poi2012]Festival 差分约束+tarjan+floyd
- spark1.4.1中sparkR的编译使用全过程
- Android开发资源下载目录
- XStream日期转换,注解转换
- 【软考】J2SE视频——java入门总结