探本溯源深入领略Linux31内核绝美风光之系统启动篇.docxVIP

  • 3
  • 0
  • 约1.14万字
  • 约 10页
  • 2017-08-18 发布于重庆
  • 举报

探本溯源深入领略Linux31内核绝美风光之系统启动篇.docx

探本溯源深入领略Linux31内核绝美风光之系统启动篇

探本溯源——深入领略Linux3.1内核绝美风光之系统启动篇(一)从拿到Linux3.1.1版内核源码并搭建好阅读环境开始,到现在大约已经徘徊了两个多月的时间,期间google了大大小小的文章,才刚刚理清了些许思路并找到了阅读的切入口。对于内核初学者来说一个好的指导比什么都重要,有关Linux内核学习的方法论可以参考fudan_abc写的Linux内核修炼之道,作者以其深厚的内核功底加上诙谐幽默的文字对读者娓娓道来,这样的感染力使得我几乎是一口气不断的看完了整个专栏,相信对于任何对内核有强烈兴趣的学习者一定有很多助益。另外,对初学者来说光有方法论是不够的,特别是对于Linux Kernel如此庞大的迷宫,所以一份好的地图在内核学习中同样举足轻重,而Kconfig Makefile正扮演了如此重要的角色,特别是对于想要重点研究某一模块或是子系统的学习者来说更是如此,详细参见以上专栏的具体文章——Kernel地图:Kconfig与Makefile,而对于Makefile Kbuild体系介绍的更加具体的可以参见云松写的Makefile预备知识/Kbuild体系,当然最权威的信息自然来自内核文档了。根据我自己的实际情况,其实我认为并没有必要去详细分析每个makefile文件,因为最后的结果是显然的——一个内核映像由成百乃至上千个文件组成,这样的解剖工作量无疑是巨大的,特别是对于像我这样还没有构建大型系统,甚至写的最大的makefile文件都仅有寥寥数行的初学者来说,无疑是一个巨大的挑战,因此通过google搜索前人所写的关于某一模块所依赖的源文件的文章可以让我们把时间放在更加重要的源代码剖析上。Kbuild/Makefile/Kconfig根据个人的亲身体会,阅读Linux内核对于新手来说首先要过的第一道坎便是源文件中大大小小的CONFIG_XXXX标识,这对于广大的像我一样没有接触过驱动开发/文件系统/网络协议的学习者们无疑是对自信心的首个重大打击,不过幸运的是,Linux内核的发行版提供了丰富的文档,在内核学习的过程中碰到很多自己不熟悉的东西是很常见的现象,因此学会查找合适的文档对于学习将会事半功倍。有关Kbuild/Makefile/Kconfig的文档可参见目录Documentation\kbuild,以下列出了该文档中有关这三者的简要概述:MakefileMakefile总共包含五个部分,分别为:①顶层Makefile文件,②内核配置文件,③在各个体系结构下的makefile,在目录arch/$(ARCH)中,④一系列用于kbuild Makefile的通用规则,这些文件主要在scripts目录中,⑤kbuild Makefiles,这类文件大约有500个左右。顶层Makefile读取.config文件,该文件主要在内核的配置过程中生成。有关内核的具体配置可参见这里。顶层的Makefile主要用来构造两个最主要的文件:vmlinux——固定内核映像,以及任意的模块,这种构造过程是通过递归进入内核源代码树的子目录而完成的。需要访问的子目录列表依据内核的配置而定。顶层Makefile包含一个具体体系结构下的Makefile文件,该文件主要向顶层Makefile提供指定体系结构的信息。每一个子目录都包含kbuild Makefile,其用来执行由上级目录传递下来的一些命令。kbuild Makefile通过使用.config文件中包含的信息来构造各种各样的文件清单,最终kbuild根据这些文件清单构造任一内置的或模块化的目标。而scripts目录中包含的一些Makefile.*文件中则包含了一系列的定义或是规则,这些规则根据kbuild makefile构造内核。Kbuild这是从Linux2.6版本内核开始采用的编译系统。简言之,就是根据makefile生成的文件列表构造内置的或模块化的目标。Kconfigkconfig文件就是用来存放组织成树形结构的一系列配置选项的配置数据库。这些配置选项被组织成菜单条目的形式,一个简单的例子如下:[cpp]?view plaincopyconfig?MODVERSIONS??????bool?Set?version?information?on?all?module?symbols??????depends?on?MODULES??????help????????Usually,?modules?have?to?be?recompiled?whenever?you?switch?to?a?new????????kernel.??...??这是一个简单的配置菜单条目,不过这也说明了所有的配置条目所应有的特征:config引出一个新的配置选项,接下来的行定义了一系列的属性,这些属性的类型可以是

文档评论(0)

1亿VIP精品文档

相关文档