vmlinux.o Makefile 对应内核版本:2.6.35.13
vmlinux.o 是生成 vmlinux 的依赖之一,在链接出 vmlinux 之前会先链接出 vmlinux.o 。
vmlinux.o 定义在顶层 Makefile 中:
vmlinux.o: $(modpost-init) $(vmlinux-main) FORCE
$(call if_changed_rule,vmlinux-modpost)
上面 $(modpost-init) 定义在顶层 Makefile 中:
modpost-init := $(filter-out init/built-in.o, $(vmlinux-init))
它只是从
$(vmlinux-init)中去掉 init/built-in.o 文件。比如在默认的配置下,$(vmlinux-init) 指代的生成文件为:
arch/x86/kernel/head_32.o arch/x86/kernel/head32.o arch/x86/kernel/head.o arch/x86/kernel/init_task.o init/built-in.o
则 $(modpost-init) 就是:
arch/x86/kernel/head_32.o arch/x86/kernel/head32.o arch/x86/kernel/head.o arch/x86/kernel/init_task.o
在 vmlinux.o 底下的 if_changed_rule 函数和
if_changed 函数类似,它会使构建系统调用 rule_vmlinux-modpost --- 该变量也定义在顶层 Makefile 中:
define rule_vmlinux-modpost<