Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / 被忽视的另一个vmlinux

在x86平台,编译完内核后用find命令搜vmlinux,你可以看到有两个同名的文件。./vmlinux./arch/x86/boot/compressed/vmlinux当我第一次见到的时候,也是有点吃惊的。要不是这么多年在江湖行走,也不会这么淡定。

谁会用到他

其实之前我们就见到过了,不过当时并没有仔细去研究。"arch/x86/boot/Makefile"$(obj)/bzImage: $(obj)/setup.bin $(obj)/vmlinux.bin $(obj)/tools/build FORCE$(call if_changed,image)@echo "Kernel: $@ is ready" " (#"`cat .version`")"OBJCOPYFLAGS_vmlinux.bin := -O binary -R .note -R .comment -S$(obj)/vmlinux.bin: $(obj)/compressed/vmlinux FORCE$(call if_changed,objcopy)恩,这个就是制作bzImage的第二个部分。

他怎么来的

"arch/x86/boot/compressed/Makefile"$(obj)/vmlinux: $(vmlinux-objs-y) FORCE$(call if_changed,ld)@:简单明了,就是一堆obj链接而成。

都包含了谁

"arch/x86/boot/compressed/Makefile"vmlinux-objs-y := $(obj)/vmlinux.lds $(obj)/head_$(BITS).o $(obj)/misc.o $(obj)/string.o $(obj)/cmdline.o $(obj)/piggy.o $(obj)/cpuflags.ovmlinux-objs-$(CONFIG_EARLY_PRINTK) += $(obj)/early_serial_console.ovmlinux-objs-$(CONFIG_RANDOMIZE_BASE) += $(obj)/aslr.o$(obj)/eboot.o: KBUILD_CFLAGS += -fshort-wchar -mno-red-zonevmlinux-objs-$(CONFIG_EFI_STUB) += $(obj)/eboot.o $(obj)/efi_stub_$(BITS).o $(objtree)/drivers/firmware/efi/libstub/lib.avmlinux-objs-$(CONFIG_EFI_MIXED) += $(obj)/efi_thunk_$(BITS).o恩,这个问题解决了,不过别的困惑又来了。bzImage中包含的是这个vmlinux,那根目录的vmlinux呢?启动的时候是怎么把根目录的vmlinux加载到内存的? 又是怎么跳转到根目录的vmlinux的呢?本文永久更新链接地址