推荐博文: Linux内核“问题门”——学习问题、经验集锦
推荐下载:《Linux内核修炼之道》精华版之方法论
至此落笔之际,恰至Linux问世18周年,18年的成长,如梦似幻,风雨颇多,感慨颇多。
犹自忆起多年以前一位前辈训导时的箴言:今天的必然正是由之前一系列的偶然所决定的。过去的某年某月,我偶然初识Linux就身陷其中,至今仍找不到出去的路,而正是这次乃至之后的多次偶然相联合,从而决定了今日的我要在此写下这些话。那么,当您偶然地拿起这本书,偶然地看到这段话,您是否会问自己:这样的偶然又会导致什么样的必然?
如果您依然决定继续这次的偶然之旅,那么首先请认识两个人,准确的说是一个人和一只企鹅。这个人自然就是Linus Torvalds,我们也可是称他为Linus或李纳斯,正是这位来自芬兰的天才,在1991年1月2日,攥着在圣诞节和生日得到的钱,偶然地做出了一个重大的财政决定,分期三年买一台价格3500美元得相貌平平得计算机,从而Linux开始了。
企鹅则是Linux的标志,很多人可能不知道Linus,但是却可能知道这只企鹅,这是一个奇怪的现象,就像很多人知道微软,却不知道比尔盖茨。不管怎么说,是Linus塑造了这只企鹅,并让它有一副爽透了的样子,就像刚刚吞下一扎啤酒。除此之外,这只企鹅还要很特别,其他的企鹅都是黑嘴巴黑脚蹼,但它却是黄嘴巴黄脚蹼,这使它看上去好像是鸭子与企鹅的杂交品种,也许它是唐老鸭在南极之旅中与一只当地企鹅一夜倾情的结晶。
其次,在您继续之前,我还想请您问自己一个问题:我在强迫自己学习内核么?我很希望您能回答不是,但希望与现实往往都有段不小的距离,因为很多时候,我都发现身边的人是因为觉得内核很高深而强迫自己喜欢的。强迫自己去喜欢一个人是多么痛苦的事情。或许,针对这个问题,最让人愉悦的回答是“说实话,我学习的热情从来都没有低落过。”正如Linus在自己的自传《Just for Fun》中希望的那样。
本书的组织形式
本书将Linux内核的学习分为四个层次:全面了解,掌握基本功;兴趣导向,选择重点深度钻研;融入社区,参与开发做贡献;坚持,坚持,再坚持。总结起来,就是“全面了解抓基本,兴趣导向深钻研;融入社区做贡献,坚持坚持再坚持。”(如果您是一个修真小说爱好者,尽可以将其与炼气、筑基、结丹和元婴等层次相对应。)
第一层次修炼的内容包括了前三章,目的是希望您能够对Linux以及内核有个全面的认识和了解,掌握分析Linux内核源代码的分析方法。
第1章主要介绍了Linux的18年成长史,或许您会乐意陪我一起缅怀下这过去的十八年。
第2章介绍内核的配置和编译过程,和任何大型软件源码的学习一样,学会编译和配置是第一步。
第3章介绍学习内核需要的基础,内核的体系结构、目录结构、代码特点,浏览内核代码的工具,最后,突出强调了内核源码分析过程中极为重要的两个角色——Kconfig和Makefile,并以USB子系统为例,演示了如何利用这两个角色进行代码分析。
第二层次的修炼包括了第4~11章的内容,对内核多数部分的工作原理进行介绍。按照认识的发展规律,在第一层次修炼中已经对内核有个全局的认识和了解之后,接下来就应该以兴趣为导向,寻找一个子系统或模块,对其代码深入钻研和分析,不懂的地方就通过社区、邮件列表或者直接发Email给maintainer请教等途径弄懂,切勿得过且过,这样分析下来,对同步、中断等等内核的很多机制也同样会非常了解,俗话说一通则百通就是这个道理。
因此第二层次的各个章节里,只是阐释重点的概念和工作原理,帮助您在分析该部分代码时进行理解,并不求详尽。
第4章讨论系统的初始化,万事开头难,系统的初始化是一个很复杂的过程,不过对于内核源码的学习来说,以这个部分开始应该是个不错的选择。特别是子系统初始化的讨论,应该是您选择任何内核子系统开始分析时都需要了解的内容。
第5章讨论系统调用,它是应用程序和内核间的桥梁,学习并理解它是我们走向内核的一个很好的过渡。
第6章讨论内核的中断处理机制,包括几乎任何一本内核书籍都没有涉及的通用IRQ层。
第7章讨论进程的内核抽象,以及进程如何被创建和销毁。如果我们将计算机上运行的操作系统以及各种各样的软件看作一系列有机的生命体,而不是死的指令集合,那么这就是一个进程的世界,只不过与我们人类世界不同的是,进程世界里的个体是一个一个鲜活的进程,而不是人。人的世界有道德与法律去制约管理,进程的世界同样也有自己的管理机制,这就是第7章所要展示的内容——进程管理。
第8章讨论进程的调度,重点讨论了在内核历史上具有重要地位的O(1)调度器和最新的CFS调度起。
第9章讨论内存管理,内存就是进程的家,这里讨论内核如何为每个进程都分配一个家,并尽量的去做到“居者有其屋”,以及保证每个家的安全。
第10章讨论文件系统,主要是虚拟文件系统(VFS),它通过在各种具体的文件系统之上建立一个抽象层,屏蔽了不同文件系统间的差异。
第11章讨论设备驱动,对于驱动开发来说,设备模型的理解是根本,spec、datasheet与内核源代码的利用是关键。
通过第二层次的修炼,您应该对至少一到两个部分有了很深入的理解,对内核代码采用的通用手法也已经很拈熟,那么您应该开始进入第三层次,努力融入到内核的开发社区,此时的您已经不会再是社区中潜水小白的角色,而是会针对某个问题发表自己的见解。您已经可以尝试参与到内核的开发中去,即使仅仅修改了内核中的一个错误单词,翻译了一份大家需要的文档,也是做出了自己的贡献,会得到大家的认可。
本书中第三层次只包括了两章的内容,这是因为内核的修炼之道越往后便越依赖于自己,任何参考书都替代不了自己不断的反思与总结。
第12章讨论参与内核开发需要了解的一些基础信息。
第13章讨论了内核的调试技术,与第12章一样,您可以仅仅将这些内容看成内核修炼中的一些tips。
至于最后的第四层次,更是仅有两个字——坚持。能够在内核的修炼之道上走多远,都取决于我们能够坚持多久,或许一个用一个公式概括更为合适:心态+兴趣+激情+时间+X=Y。
革命尚未成功,我等仍需努力。——与君共勉之。
……