原来安装的是它
在编译kernel的时候,会编译出一个bzImage的文件,据说这个是可以引导的文件?
恩,关于这个问题,昨天我还真好好看了一下,发现还真是。玩了内核这么多年,一直都以为是根目录下的那个vmlinux是安装时拷贝到/boot/目录下的文件,结果原来不是。真是惭愧惭愧。
我是从make install这个规则开始找下去的。
boot := arch/x86/boot
install:
$(Q)$(MAKE) $(build)=$(boot) $@
这个规则在arch/x86/Makefile中,好奇为什么没有在根Makefile里找到。
那实际上真正执行的是在arch/x86/boot/Makefile中这个规则
install:
sh $(srctree)/$(src)/install.sh $(KERNELRELEASE) $(obj)/bzImage \
System.map "$(INSTALL_PATH)"
对应x86架构,在这个install.sh就是arch/x86/boot/install.sh。虽然脚本中有几种安装内核的方式,不过我们只看其中一种也就能确认安装在/boot/目录下的是bzImage而不是vmlinux了。
cat $2 > $4/vmlinuz
所以说不看不知道,一看吓一跳。以后不敢说自己懂内核了。
目标在哪里?
我们在内核编译的小目标一文中也提到过,bzImage是x86平台下默认的目标之一。但是并没有在根目录的Makefile中发现bzImage目标。 而在根目录的Makefile中的前面部分有
include $(srctree)/arch/$(