我们应该了解,内核编译出vmlinux还不算数,最后这个ELF格式的文件会被压缩成bzImage。不过那无关紧要。这次我要说说vmlinux的产 生流程,当然只是简单走走,里面kbuild复杂语法,连Makefile自带的很多规则都是比较复杂的,恐怕要全部搞懂,得费很大劲,毕竟这对于我研究 的方向没有多大帮助。我们知道要产生可执行文件要经过这样几个步骤:xx.c->xx.o、xx.o->xx,即先编译在链接,最终xx就是 我们要的文件,那么内核源代码怎么有序的形成这样的模式呢,靠的就是kbuild这个了不起的框架模型。
当然第一步找到vmlinux目标。
vmlinux: $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) vmlinux.o $(kallsyms.o) FORCE
ifdef CONFIG_HEADERS_CHECK
$(Q)$(MAKE) -f $(srctree)/Makefile headers_check
endif
ifdef CONFIG_SAMPLES
$(Q)$(MAKE) $(build)=samples
endif
ifdef CONFIG_BUILD_DOCSRC
$(Q)$(MAKE) $(build)=Documentation
endif
$(call vmlinux-modpost)
$(call if_changed_rule,vmlinux__)
$(Q)rm -f .old_version
这个目标依赖的还挺多的,不过这里我只关注2个:vmlinux-init、vmlinux-main。可以看
linux内核学习(8)如何生成vmlinux?简单走走
最新推荐文章于 2025-04-10 11:21:16 发布