U-Boot的编译、连接过程.docVIP

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
U-Boot的编译、连接过程

配置完后,执行“make all”即可编译,从Makefile中可以了解U-Boot使用了哪些文件、哪个文件首先执行、可执行文件占用内存的情况。 先确定用到哪些文件,下面只摘取Makefile中与arm相关的部分: 117 include $(OBJTREE)/include/config.mk 118 exportARCH CPU BOARD VENDOR SOC 119 …… 127 ifeq ($(ARCH),arm) 128 CROSS_COMPILE = arm-linux- 129 endif …… 163 # load other configuration 164 include $(TOPDIR)/config.mk 165 第117、164行用于包含其他的config.mk文件,第117行所要包含文件的就是在上面的配置过程中制作出来的 include/config.mk文件,其中定义了ARCH、CPU、BOARD、SOC等4个变量的值为arm、arm920t、smdk2410、 s3c24x0。 第164行包含顶层目录的config.mk文件,它根据上面4个变量的值确定了编译器、编译选项等。其中对我们理解编译过程有帮助的是BOARDDIR、LDFLAGS的值,config.mk中: 88 BOARDDIR = $(BOARD) …… 91 sinclude $(TOPDIR)/board/$(BOARDDIR)/config.mk# include board specific rules …… 143 LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds …… 189 LDFLAGS += -Bstatic -T $(LDSCRIPT) -Ttext $(TEXT_BASE) $(PLATFORM_LDFLAGS) 在board/smdk2410/config.mk中,定义了“TEXT_BASE = 0x33F80000”。所以,最终结果如下:BOARDDIR为smdk2410;LDFLAGS中有“-T board/smdk2410/u-boot.lds -Ttext 0x33F80000”字样。 继续往下看Makefile: 166 ######################################################################### 167 # U-Boot objects....order is important (i.e. start must be first) 168 169 OBJS = cpu/$(CPU)/start.o …… 193 LIBS = lib_generic/libgeneric.a 194 LIBS += board/$(BOARDDIR)/lib$(BOARD).a 195 LIBS += cpu/$(CPU)/lib$(CPU).a …… 199 LIBS += lib_$(ARCH)/lib$(ARCH).a 200 LIBS += fs/cramfs/libcramfs.a fs/fat/libfat.a fs/fdos/libfdos.a fs/jffs2/libjffs2.a \ 201 fs/reiserfs/libreiserfs.a fs/ext2/libext2fs.a 202 LIBS += net/libnet.a …… 212 LIBS += $(BOARDLIBS) 213 …… 从第169行得知,OBJS的第一个值为“cpu/$(CPU)/start.o”,即“cpu/arm920t/start.o”。 第193~213行指定了LIBS变量就是平台/开发板相关的各个目录、通用目录下相应的库,比如:lib_generic /libgeneric.a、board/smdk2410/libsmdk2410.a、cpu/arm920t/libarm920t.a、 lib_arm/libarm.a、fs/cramfs/libcramfs.a fs/fat/libfat.a等。 OBJS、LIBS所代表的.o、.a文件就是U-Boot的构成,它们通过如下命令由相应的源文件(或相应子目录下的文件)编译得到。 268 $(OBJS): 269 $(MAKE) -C cpu/$(CPU) $(if $(REMOTE_BUILD),$@,$(notdir $@)) 270 271 $(LIBS): 272 $(MAKE) -C $(dir $(subst $(obj),,$

您可能关注的文档

文档评论(0)

cgtk187 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档