本文共 3755 字,大约阅读时间需要 12 分钟。
慢慢欣赏linux 生成内核镜像all: bzImage #arch/x86/Makefile || \/ bzImage: vmlinux $(Q)$(MAKE) $(build)=$(boot) $(KBUILD_IMAGE) || \/ //vmlinux展开,进入根目录的Makefile # vmlinux image - including updated kernel symbols vmlinux: $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) vmlinux.o $(kallsyms.o) FORCE $(call if_changed_rule,vmlinux__) || \/ define rule_vmlinux__ : $(call cmd,vmlinux__) endef || \/ //关键是vmlinux-lds链接脚本,决定内核镜像的布局 quiet_cmd_vmlinux__ ?= LD $@ cmd_vmlinux__ ?= $(LD) $(LDFLAGS) $(LDFLAGS_vmlinux) -o $@ \ -T $(vmlinux-lds) $(vmlinux-init) \ --start-group $(vmlinux-main) --end-group \ $(filter-out $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) vmlinux.o FORCE ,$^) || //KBUILD_IMAGE在arch\x86\Makefile里面定义,的定义如下:KBUILD_IMAGE := $(boot)/bzImage; || //boot也在arch\x86\Makefile定义,定义如下:boot := arch/x86/boot || //build在scripts/Makefile.build里面定义,定义如下:build := -f scripts/Makefile.build obj \/ //展开 make build := -f scripts/Makefile.build obj=arch/x86/boot arch/x86/boot/bzImage || \/ //继续展开,进入arch/x86/boot/Makefile $(obj)/bzImage: $(obj)/setup.bin $(obj)/vmlinux.bin $(obj)/tools/build FORCE $(call if_changed,image) || \/ //$(obj)/vmlinux.bin目标定义 $(obj)/vmlinux.bin: $(obj)/compressed/vmlinux FORCE $(call if_changed,objcopy) || \/ //$(obj)/compressed/vmlinux目标定义 $(obj)/compressed/vmlinux: FORCE $(MAKE) $(build)=$(obj)/compressed $@ || \/ $(obj)/vmlinux: $(obj)/vmlinux.lds $(obj)/head_$(BITS).o $(obj)/misc.o $(obj)/piggy.o FORCE $(call if_changed,ld) @: || \/ $(obj)/piggy.S: $(obj)/vmlinux.bin.$(suffix-y) $(obj)/mkpiggy FORCE $(call if_changed,mkpiggy) || \/ //suffix-y代表压缩模式,由CONFIG_KERNEL_XXX决定 $(obj)/vmlinux.bin.gz: $(vmlinux.bin.all-y) FORCE $(call if_changed,gzip) suffix-$(CONFIG_KERNEL_GZIP) := gz $(obj)/vmlinux.bin.bz2: $(vmlinux.bin.all-y) FORCE $(call if_changed,bzip2) $(obj)/vmlinux.bin.lzma: $(vmlinux.bin.all-y) FORCE $(call if_changed,lzma) $(obj)/vmlinux.bin.lzo: $(vmlinux.bin.all-y) FORCE $(call if_changed,lzo) suffix-$(CONFIG_KERNEL_GZIP) := gz suffix-$(CONFIG_KERNEL_BZIP2) := bz2 suffix-$(CONFIG_KERNEL_LZMA) := lzma suffix-$(CONFIG_KERNEL_LZO) := lzo || \/ cmd_mkpiggy = $(obj)/mkpiggy $< > $@ || ( rm -f $@ ; false ) || \/
linux内核vmlinux的编译过程(七)
https://blog.csdn.net/m0_47799526/article/details/106202622linux内核学习(10)启动全过程概述之一
https://blog.csdn.net/cug_fish_2009/article/details/6516403linux源码Makefile的详细分析
https://www.cnblogs.com/amanlikethis/p/3675486.htmllinux2.6 makefile分析
https://www.xuebuyuan.com/3121989.html