基于x86体系结构分析linux-2626的启动过程.doc

基于x86体系结构分析linux-2626的启动过程.doc

ID:58863392

大小:432.50 KB

页数:11页

时间:2020-09-22

基于x86体系结构分析linux-2626的启动过程.doc_第1页
基于x86体系结构分析linux-2626的启动过程.doc_第2页
基于x86体系结构分析linux-2626的启动过程.doc_第3页
基于x86体系结构分析linux-2626的启动过程.doc_第4页
基于x86体系结构分析linux-2626的启动过程.doc_第5页
资源描述:

《基于x86体系结构分析linux-2626的启动过程.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、实验报告:基于x86体系结构分析linux-2.6.26的启动过程仅考虑32位体系结构不考虑多核多处理器要求1:分析流程按照开机-->BIOS-->grub-->Linux的顺序进行,到start_kernel结束要求2:结合几个关键的Makefile文件和缺省编译linux的输出信息,给出Linux映像的make过程分析,说明编译链接的结果有哪些?要求3:结合GRUB和几个链接描述文件,说明GRUB是如何加载bzImage的,GRUB将跳转到内存的哪个地址上开始运行Linux,该地址的代码对应于哪个Linux源文件中的哪处?要求4:给出Linux中的启动相关的几个关键源文件的执行顺序,

2、分析setup和内核解压缩前后这三个阶段的主要流程(直到start_kernel)。一.编译内核过程分析首先分析linux-2.6.26的顶层Makefile文件,我们发现这里没有bzImage,不过有如下语句其中的include $(srctree)arch/$(ARCH)/Makefile, 对于x86架构而言,ARCH将会展开成x86,由于bzImage目标在当前的Makefile中并未找到,因此会到该Makefile中包含的子Makefile中寻找。进入/linux-2.6.26/arch/x86/Makefile中分析代码从图中我们可以看到bzImage是依赖于目标vmlinu

3、x的,于是下文我们将分两部分分析1.vmlinux的生成A.依赖分析首先在/linux-2.6.26/Makefile中,我们找到vmlinux的定义我们可以看出vmlinux 依赖于vmlinux-lds ,vmlinux-init ,vmlinux-main 和kallsysm.o 变量。然后我们继续查找这些变量可看到:从这里可以看出vmlinux-init依赖于(head-y) $(init-y),vmlinux-main依赖于$(core-y)$(libs-y)$(drivers-y)$(net-y)接下来我们需要分析这些是什么.我们可以找到相关的定义,如下图由图中可以看出,首先

4、这些*-y变量代表着不用的文件夹地址(kernel/init/net/等等等)经过patsubst是实现匹配替换的,在这里将文件夹的尾部替换为'/built-in.o' 。例如,init-y初始值为init/经过patsubst替换为“init/built-in.o” 在内核根目录有以下子目录:init内核初始化代码。提供main.c,包含startkernel函数。kernel内核管理代码。mm内存管理代码。ipc进程间通讯代码。net网络部分代码。lib与体系结构无关的内核库代码。drivers设备驱动代码。每类设备有相应的子目录,如char、block、netfs文件系统代码。每个

5、支持文件系统有相应的子目录,如ext2、proc等。通过上述分析,我们发现,vmlinux的生成是依赖于这些文件夹内部的built-in.o的,然后最终这些.o文件经过vmlinux-lds的链接描述规则,连接成为vmlinux.至此,vmlinux生成依赖分析完毕。B.生成规则重新找到vmlinux的生成规则其中$(callifchangedrule,vmlinux)即调用rule_vmlnux__找到rule_vmlinux__的相关定义,如下根据定义,可以看出它的作用是调用cmd_vmlinux__最终生成并检验System.map找到cmd_vmlinux__可以分析出,它定义了

6、根据vmlinux-lds的规定了链接vmlinux-init以及vmlinux-main生成vmlinux的规则。2.bzImage的生成首先找到/arch/x86/Makefile中bzImage的规则,如下可以观察得知它只是一个链接,链接到文件夹下找到/arch/x86/boot/Makefile的中bzImage根据规则可以看出来bzImage依赖于setup.bin以及vimlinux.bin.而vmlinux.bin有指的是/compressed/vmlinux,我们需要找到compressed目录下的Makefile,如下:根据规则可以看出来这里的vmlinux依赖于以下文

7、件vmlinux_32.lds(本来就有),head_32.o,misc.o以及piggy.o。其中,head_32.o以及misc.o是用于解压缩和重定位的代码,piggy.o我们可以追溯编译时的console输出情况,最终发现,piggy.o是由vmliux经过一系列过程产生的。具体过程如下A>objcopy 主Makefile生成的位于SOURCE_HOME下的那个vmlinux生成arch/x86/compressed/vm

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。