基于x86的linux

基于x86的linux

ID:38623110

大小:236.00 KB

页数:10页

时间:2019-06-16

基于x86的linux_第1页
基于x86的linux_第2页
基于x86的linux_第3页
基于x86的linux_第4页
基于x86的linux_第5页
资源描述:

《基于x86的linux》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、基于x86的linux2.6.26代码分析一.由Makefile分析bzImage的生成过程内核配置完毕之后使用命令makebzImage生成内核镜像文件,这里使用的make规则默认是源代码目录linux-2.6.26(以后定为SOURCE_HOME).打开SOURCE_HOME/Makefile发现其中的target是vmlinux,没有发现命令中指定的目标bzImage.由于makefile文件可以包含其他的make规则最后发现SOURCE_HOME/Makefile多处出现下面的一句话(431行)图<1>其中$SRCARCH是平

2、台的架构这里是X86,这句话显然包含了SOURCE_HOME/arch/x86/Makefile,打开这个文件继续寻找目标bzImage有如下发现:图<2>212行规定生成的bzImage的位置在SOURCE_HOME/arch/x86/boot/下面.215行发现bzImage生成依赖于vmlinux.Vmlinux的生成显然vmlinux是SOURCE_HOME/Makefile中的规则负责生成的.图<3>这个vmlinux的生产依赖于后面的几个目标,这些目标如下图<4>图<5>从上面的规则可以清楚看出vmlinux的生成用到了S

3、OURCE_HOME下面的这些目录:kernel/,mm/,fs/,ipc/,security/,crypto/,kblock/,init/,lib/,net/,/drivers/,Vmlinux到最后直接依赖的是vmlinux.o,kallsyms.o,和上面所说那些目录下的built-in.o.built-in.o是如何生成的图<6>上图主Makefile838行调用了scripts/Makefile.build对保存在vmlinux-dirs目录中的内容进行编译图<7>可以看到vmlinux-dirs包括SOURCE_HOME下

4、面的init,drivers,net,lib,kernel,mm,fs,ipc.security,crypto,block这些和体系结构无关的目录内容.在scripts/Makefile.build83行看到每个目录生成的结构都保存在built-in.o中,这就生成了vmlinux所依赖的部分文件.有了built-in.o还需要vmlinux.o和kallsyms.ovmlinux.o的生成方式vmlinux.o依赖的vmlinux-main上一节讲过就是那些built-in.o.现在缺少的是$(modpost-init)查找$(mo

5、dpost-init)发现图<5>822行:modpost-init包括了vmlinux-init中除了init/built-in.o之外的那些文件.vmlinux-init:=$(head-y)$(init-y)init-y是init/built-in.o,回头看图<5>822行这么做的原因可能是不想多次包含init/built-in.o.$(head-y)在主Makefile没找到,既然包含了x86/Makefile就去找吧:在这里又发现其实主Makefile中定义的core-y,lib-y等又加入了和体系结构相关x86目录下的一

6、些东西.而head-y如下:图<8>可见head-y包含了x86/kernel/下面的head_32.o,head32.o,init_task.o至此vmlinux.o的生产条件已经满足了.图<9>Kallsyms其实是script下的一个命令,主Makefile在757-759行生成了内核的全部符号表并且把这些符号交给scripts/kallsyms处理.处理的结果可以打开SOURCE_HOME下的..tmp_kallsymsX.o.cmd查看,这里的X代表1/2.图<10>从图中看到这个命令生成的是kallsyms.o依赖的.tm

7、p_kallsymsX.o.至此kallsyms.o生成的条件完全满足了.最后从主Makefile看出又分了三步一步一步修正vmlinux和kallsyms.o最终生成主目录下的vmlinux.最后查看bzImage是如何生成的,方法是查看编译时的输出信息:在上图的970行中vmlinux生成了.然而不是最终的bzImage.从上图983-989,1007-1011行看到vmlinux显然又经过了一些变化,生成的目标都放在compress和boot目录下.到compress目录下查看发现几个命令文件,这些命令文件是编译时的输出,比较详

8、细.首先是.vmlinux.cmd文件他的目标又是一个vmlinux,目的地是本目录.cmd_arch/x86/boot/compressed/vmlinux:=ld-melf_i386-Tarch/x86/boot/c

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

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

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