Posted on 2008-11-07 10:29
猫头鹰 阅读(945)
评论(3) 编辑 收藏 引用 所属分类:
源码分析
自从写了一些视频的东西后就很久没有写东西了,视频的实例打算有时间的话和我培训班的学生弄出来以后再接着写。
这段时间的前半部份重新看了一下2.4内核的原码,对于网上很多人说2.4内核过时,要读就读2.6的,要写就写2.6的内核的说话,我其实挺有意见的。我认为经典的原码没有过时这一说法,嵌入式不是PC,本来就是本着够用的前提下越低成本越好的。谁敢说八几年代产的8051过时。相对于动咋几M的2.6内核,才几百K的2.4真的是娇小玲珑。
因为前几次都是以学习的方式去读,这一次也不例外(第一点的记性差,读完就忘,第二点是因为第一次读都有新感受),但这一次目和性有点变了,就是不单想把每一个局部原源读懂,而且想进一步的弄明百函数之间、文件之间、硬件相关代码和硬件完关代码之间的关联。特别的,是硬件相关代码和硬件完关代码的API。包括如下:
1:新加一个体系结构,我们应该实现那些接口
2:在一种体系结构如ARM中,新加一个支持平台,我们应实现那些接口
Linux最大的缺点是什么?依我来就是他是一个很“随意”的项目,这个项目并没有总体规划,更没有详细设计,任何人(当然指高手)都可能按它自己的风格去改写它。从0.11的一人开发,到2.6的全地球人一齐开发,代码已经没有规划而言了(指代码的规划,而不是操作系统的规划)。能改写它的国人不多,能弄清它脉络的人就更少,不因别的,因为它的“经脉”本来就是乱七八糟的。
我原来一直是用souce insight 来分析原码的,无悔的说,这个工具我是我能免费拿到的功能最强的代码分析软件。得出这个结论是我已经用过了N多工具,window的,linux的。用它,我分析过很多的项目。但对linux这个“经脉错乱”的代码,它就显得有点乏力了,只能做到局部代码分析,还是不能把linux的“经脉”给理清,我发现我除了需要网上铺天盖地论述的函数调用关系图以外,我还需要文件的相互依赖交系图,模块(这里指linux的某一个子文件夹,或手工指定的某只个文件)和模块间的相户依赖关系。我在网上找了很长一段时间,我现它们都最多只做到前面第一点(包括我很佩服的souce insight),而对于后两点,就连花几千美金的商业静态分析软件都做不到(当然了,这类软件真的很强,我只是针对我的需求而言)。这个需求驱使我google了整个地球几个月。
最终,我还是未能找到我想要的工具,体却学到了很多我原来没涉足的方面。如graphviz这个这么强的画图工具,BerkeyleyDB这么另类和强大的数据库、TCL/TK这么强大而又和嵌入式无缘的语言(听是听了很多,但由于它不适合嵌入式开发,以前都会看都不看,裁减掉),同时,也熟悉了ctag(以前老板结常提)、etag、csope、lxr、global ... 并对它们进行了对比。呵呵,总结了这么多年的自学经历,发现,原来目标只是用来产生问题的引子,你真正的学习,是在确决这个问题的过程上面。
这么一轮下来,发现没有一款软件能满足我需求,没办法就只能自己动手罗,都说自己动手,丰衣足食。前几天开始打红帽的开源源码分析软件soucenav开刀,都说这软件是linux下唯一能和souce insight拼的,其实在细节上还是差很远的,不说别的,语化着色就弄得乱七八糟的(好了好了,它的缺点了不说了)。那也没办法,谁要我拿不到souce insight的源码,打算在soucenav上面加入我要的功能,所以这两天变成了分析soucenav的源码。已经分析了有好几天了,也有很多的东西分析出来了,有空写出来。不过后来发现KScope的GUI做的很不错,现在内心又有点摇摆了,呵呵。不知它内部的分析功能强不强(其实soucenav已经很强了),如果强的话说不定我还真换到它上面去研究了。