日期:2014-05-16 浏览次数:20710 次
linux内核源代码目前的版本已经到了3.8,其源代码行数已经过千万了,规模之大,任何一个人想要全部看完,几乎是不可能的事情。
linux内核源代码大部分使用c语言编写的,少部分是汇编语言。知道c语言是面向过程的,其重要的特点是完成一个功能需要调用一系列函数是实现。在linux内核这样庞大的源码中,初学者往往会沉没在很多层次的函数调用海洋里,A函数的实现需要B函数,B函数的实现需要C函数。。。一步一步跟下去,当达到一定深度的时候,就会出现之间树木不见森林的情况,看代码的时候就会被复杂的函数调用层所吓到。
可以发现,很多层次的调用,其实是形成了一颗函数调用树,如果我们在阅读源代码的过程中,把这可函数调用树能够绘制出来,但看到某个具体函数的时候,我们可以迅速的在调用树上看到它是那个分支,属于那个分支,有了这样一个函数调用树,我们就能把握整个森林,而不会被细节淹没。
如下图所示,这是我在阅读linux0.11内核中关于加载根文件系统setup系统调用时绘制的函数调用树。
图1.安装根文件系统函数调用树
查看这个调用树,可以清楚地看到调用层次,每一层的函数都调用了哪些主要的下一层函数。要是在XMind中,还可以点击话题(topic,图中每个方框都是一个topic)下方的加号或减号,折叠或展开函数的下一层调用情况,这样就可以以较粗的粒度查看整个函数的功能。通过XMind绘制函数调用树,可以让我们很容易地掌握函数调用情况,一边阅读代码,一边绘制,能够帮助我们一层一层地看清整个实现思路。希望大家能喜欢这个方法。