linux zImage生成过程详解.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
可以看到,在顶层makefile的第278行,包含了scripts/Kbuild.include文件,在这里定义了大量的函数和变量,供顶层makefile和其他makefile文件使用。 在顶层makefile文件的第412行,包含了arch/arm/Makefile。这个是体系结构相关makefile文件。它定义了体系结构相关的一些变量及规则。 当执行”make”时,arch/arm/Makefile中的185行的规则将是make遇到的第一个规则: all: $(KBUILD_IMAGE) KBUILD_IMAGE这个变量是arch/arm/Makefile的第182行定义。 KBUILD_IMAGE := zImage 然后看zImage的构建规则,在arch/arm/Makefile的第212行开始定义 zImage Image xipImage bootpImage uImage: vmlinux $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@ build变量在scripts/Kbuild.include文件中第114行定义: build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj boot变量在arch/arm/Makefile的187行定义: boot := arch/arm/boot MACHINE变量的值在arch/arm/Makefile的147行开始定义 ifneq ($(machine-y),) MACHINE := arch/arm/mach-$(machine-y)/ else MACHINE := endif 这里machine-y := s3c2410,所以变量MACHINE的值为 MACHINE := arch/arm/mach-s3c2410 所以上面的规则可写为如下形势 zImage: vmlinux $(Q)$(MAKE) -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj= \ arch/arm/boot MACHINE= arch/arm/mach-s3c2410 arch/arm/boot/ zImage 这个规则的依赖是vmlinux,下面先看看这个依赖目标的创建规则。 vmlinux目标的规则在顶层Makefile的第738行定义。 vmlinux: $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) $(kallsyms.o) FORCE ifdef CONFIG_HEADERS_CHECK $(Q)$(MAKE) -f $(srctree)/Makefile headers_check endif $(call if_changed_rule,vmlinux__) $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost $@ $(Q)rm -f .old_version 这里涉及到几个变量,先看看这几个变量的定义,前三个变量分别在605、602、603行定义。 vmlinux-init := $(head-y) $(init-y) vmlinux-main := $(core-y) $(libs-y) $(drivers-y) $(net-y) vmlinux-lds := arch/$(ARCH)/kernel/vmlinux.lds 其中head-y在arch/arm/Makefile中第89行定义, head-y := arch/arm/kernel/head$(MMUEXT).o arch/arm/kernel/init_task.o init-y在顶层makefile的433行定义 init-y := init/ 后又在第567行进行处理 init-y := $(patsubst %/, %/built-in.o, $(init-y)) 所以变量init-y应为 init-y :=

文档评论(0)

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

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

1亿VIP精品文档

相关文档