浅谈Linux内核源码分析方法

一、内核源码之我见
Linux内核代码的庞大令不少人“望而生畏” , 也正因为如此 , 使得人们对Linux的了解仅处于泛泛的层次 。 如果想透析Linux , 深入操作系统的本质 , 阅读内核源码是最有效的途径 。 我们都知道 , 想成为优秀的程序员 , 需要大量的实践和代码的编写 。 编程固然重要 , 但是往往只编程的人很容易把自己局限在自己的知识领域内 。 如果要扩展自己知识的广度 , 我们需要多接触其他人编写的代码 , 尤其是水平比我们更高的人编写的代码 。 通过这种途径 , 我们可以跳出自己知识圈的束缚 , 进入他人的知识圈 , 了解更多甚至我们一般短期内无法了解到的信息 。 Linux内核由无数开源社区的“大神们”精心维护 , 这些人都可以称得上一顶一的代码高手 。 透过阅读Linux内核代码的方式 , 我们学习到的不光是内核相关的知识 , 在我看来更具价值的是学习和体会它们的编程技巧以及对计算机的理解 。
我也是通过一个项目接触了Linux内核源码的分析 , 从源码的分析工作中 , 我受益颇多 。 除了获取相关的内核知识外 , 也改变了我对内核代码的过往认知:
1.内核源码的分析并非“高不可攀” 。 内核源码分析的难度不在于源码本身 , 而在于如何使用更合适的分析代码的方式和手段 。 内核的庞大致使我们不能按照分析一般的demo程序那样从主函数开始按部就班的分析 , 我们需要一种从中间介入的手段对内核源码“各个击破” 。 这种“按需索取”的方式使得我们可以把握源码的主线 , 而非过度纠结于具体的细节 。
2.内核的设计是优美的 。 内核的地位的特殊性决定着内核的执行效率必须足够高才可以响应目前计算机应用的实时性要求 , 为此Linux内核使用C语言和汇编的混合编程 。 但是我们都知道软件执行效率和软件的可维护性很多情况下是背道而驰的 。 如何在保证内核高效的前提下提高内核的可维护性 , 这需要依赖于内核中那些“优美”的设计 。
3.神奇的编程技巧 。 在一般的应用软件设计领域 , 编码的地位可能不被过度的重视 , 因为开发者更注重软件的良好设计 , 而编码仅仅是实现手段问题——就像拿斧子劈柴一样 , 不用太多的思考 。 但是这在内核中并不成立 , 好的编码设计带来的不光是可维护性的提高 , 甚至是代码性能的提升 。
每个人对内核的了理解都会有所不同 , 随着我们对内核理解的不断加深 , 对其设计和实现的思想会有更多的思考和体会 。 因此本文更期望于引导更多徘徊在Linux内核大门之外的人进入Linux的世界 , 去亲自体会内核的神奇与伟大 。 而我也并非内核源码方面的专家 , 这么做也只是希望分享我自己的分析源码的经验和心得 , 为那些需要的人提供参考和帮助 , 说的“冠冕堂皇”一点 , 也算是为计算机这个行业 , 尤其是在操作系统内核方面贡献自己的一份绵薄之力 。 闲话少叙(已经罗嗦了很多了 , 囧~) , 下面我就来分享一下自己的Linix内核源码分析方法 。
二、内核源码难不难?
从本质上讲 , 分析Linux内核代码和看别人的代码没有什么两样 , 因为摆在你面前的一般都不是你自己写出来的代码 。 我们先举一个简单的例子 , 一个陌生人随便给你一个程序 , 并要你看完源码后讲解一下程序的功能的设计 , 我想很多自我感觉编程能力还可以的人肯定觉得这没什么 , 只要我耐心的把他的代码从头到尾看完 , 肯定能找到答案 , 并且事实确实是如此 。 那么现在换一个假设 , 如果这个人是Linus , 给你的就是Linux内核的一个模块的代码 , 你还会觉得依然那么轻松吗?不少人可能会有所犹豫 。 同样是陌生人(Linus要是认识你的话当然不算 , 呵呵


推荐阅读