被忽视的另一个vmlinux

   2016-10-13 0
核心提示:在x86平台,编译完内核后用find命令搜vmlinux,你可以看到有两个同名的文件。./vmlinux./arch/x86/boot/compressed/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.o

vmlinux-objs-$(CONFIG_EARLY_PRINTK) += $(obj)/early_serial_console.o
vmlinux-objs-$(CONFIG_RANDOMIZE_BASE) += $(obj)/aslr.o

$(obj)/eboot.o: KBUILD_CFLAGS += -fshort-wchar -mno-red-zone

vmlinux-objs-$(CONFIG_EFI_STUB) += $(obj)/eboot.o $(obj)/efi_stub_$(BITS).o \
    $(objtree)/drivers/firmware/efi/libstub/lib.a
vmlinux-objs-$(CONFIG_EFI_MIXED) += $(obj)/efi_thunk_$(BITS).o

恩,这个问题解决了,不过别的困惑又来了。

bzImage中包含的是这个vmlinux,那根目录的vmlinux呢?启动的时候是怎么把根目录的vmlinux加载到内存的? 又是怎么跳转到根目录的vmlinux的呢?

本文永久更新链接地址 http://www.linuxidc.com/Linux/2016-10/135906.htm

 
标签: Makefile
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • 《Linux内核Makefile分析》之 auto.conf, auto.
    转自:http://blog.sina.com.cn/s/blog_87c063060101l25y.html转载:http://blog.csdn.net/lcw_202/article/details/6661364  在编译构建性目标时(如 make vmlinux),顶层 Makefile 的 $(dot-config) 变量值为 1 。在顶层 Makefile 的 497-504 行看到:?1234
    02-09
  • Linux下的自动化构建工具之make/makefile的用法详解
    Linux下的自动化构建工具之make/makefile的用法
    目录一、make和makefile的区别二、makefile的原理1、make的原理详解2、临时文件的清理3、文件的三个时间三、makefile的推导规则四、实现一个进度条1、缓冲区问题2、实现倒计时程序3、进度条的实现一、make和makefile的区别make是一个命令,makefile是一个文件
  • 沁恒CH32V003(二): Ubuntu20.04 MRS和Makefile
    沁恒CH32V003(二): Ubuntu20.04 MRS和Makefile开发环境配置Ubuntu20.04 MRS和Makefile开发环境配置. 使用 MounRiver Studio Community IDE 进行开发是比较简单的一种方式, 前往http://mounriver.com/download下载 MounRiver_Studio_Community_Linux_V130, 如
    02-07
  • Linux 下 Make 命令实例讲解
    Linux 下make命令是系统管理员和程序员用的最频繁的命令之一。管理员用它通过命令行来编译和安装很多开源的工具,程序员用它来管理他们大型复杂的项目编译问题。本文我们将用一些实例来讨论 make 命令背后的工作机制。Make 如何工作的对于不知道背后机理的人
    01-06 Makefile
  • Linux 用Makefile编译C代码
    Linux 用Makefile编译C代码
    在Linux里写C语言代码一般用gcc编译,如果是一些小的程序可以使用gcc命令编译,但是当我们写一个大的项目的时候,我们总会把头文件,主函数,子函数等分别放到一个文件里,这样可以让代码看起来没有那么长,在排错的时候会更方便一点。可是问题又来了,那么多
    01-06 Makefile
  • OpenWrt上用C来写一个Helloworld
    陆续用OpenWrt已经有5年多了, 一直以来都没有勇气用OpenWrt写原生的C程序.OpenWrt本身是维护了一些菜谱(recipe), 表现形式是Makefile. 它里面定义了包名/描述/类别/上游等等信息.make menuconfig的时候, 会先把package/目录里的所有包都扫描一遍, 生成总体的M
  • 如何编写 makefile(上)
    在unix环境下编写或者阅读一个C项目,如果不会makefile,将寸步难行。因为,makefile关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需
    12-11 Makefile
  • Linux Makefile编写 详述
    Linux Makefile编写 详述
    我之前总结了gcc的用法,那么在实际工作中,每次用gcc会很麻烦,尤其是一些大型项目,有很多的目录结构,这个时候我们就需要编写Makefile文件,然后在实际工作中,用make来编译大型的项目,相信搞过Android开发的一定对make,make install,make clean不陌生
    12-01 Makefile
  • Linux AutoTools工具 详述
    Linux AutoTools工具 详述
    我们前面分析了Makefile的编写,其实一个大的项目,如果手工去写Makefile的话会比较累,那么我们可以用AutoTools的一系列工具来生成Makefile Linux Makefile编写 详述 http://www.linuxidc.com/Linux/2016-11/137506.htm 大家在Linux中下载的任何源码包都需要
  • u-boot学习笔记(一)————浅析Makefile
    u-boot学习笔记(一)————浅析Makefile
    u-boot移植难度最大的地方莫过于适配,你得看懂芯片英文手册,看得懂电路图还有熟悉各种汇编和寄存器…对硬件读图能力和软件编程能力要求都很高,先抛开u-boot的硬件功能不谈,基本上任何一个C语言项目的编译的入口点 Makefile ,所以磨刀不误砍柴工对 Makefi
点击排行