1.6.2 浏览源码的工具
俗话说“工欲善其事,必先利其器”。使用一个功能强大并方便的代码浏览工具有助于我们学习内核代码。接下来将简单介绍浏览Linux内核源码的常用工具。
1.Source Insight
Windows系统下最为方便快捷的代码浏览工具是Source Insight,这是一款商业软件。Source Insight是一个面向项目开发的程序编辑器和代码浏览器,它拥有内置的对C/C++、C#和Java等程序的分析。Source Insight可以分析用户的源代码并在用户工作的同时动态维护它自己的符号数据库,并自动为用户显示有用的上下文信息。 Source Insight不仅仅是一个强大的程序编辑器,它还能显示reference trees,class inheritance diagrams和call trees。Source Insight提供最快速的对源代码的导航和任何程序编辑器的源信息。Source Insight还提供快速和革新的访问源代码和源信息的能力。与众多其他编辑器产品不同,Source Insight能在用户编辑的同时分析用户的源代码,为用户提供实用的信息并立即进行分析。
当安装Source Insight后,需要先打开Source Insight并创建一个工程,然后将内核代码加入该工程中,并进行文件同步,这样就可以在代码之间进行关联阅读。
Source Insight的缺点是并没有对应Linux的版本。因此对于很多Linux初学者来说,在一个完全的Linux环境下进行学习,需要寻找一个可以取代Source Insight的代码浏览工具。
2.Vim+Cscope
Linux环境下的最佳浏览工具是Vim,各种Linux发行版本都会默认进行安装。虽然Vim默认的编辑界面很普通,甚至可以说丑陋,但是可以通过配置文件.vimrc添加不同的界面效果。同时还可以配合TagList、WinManager等很多好用的插件或工具,将Vim打造成一个不次于Source Insight的代码浏览编辑工具。
3.LXR
LXR(Linux Cross Reference)也是一种比较流行的Linux内核源代码浏览工具,其下载地址为http://lxr.linux.no/。
如果用户的目的只是浏览Linux内核代码,则并不需要安装LXR。因为在网站http://lxr.linux.no/上已经提供了几乎所有版本的Linux内核代码,用户只需登录该网站,选择某一特定的内核版本后就可以在内核代码之间进行关联阅读。
当登录网站并选择内核版本后,在查找框内输入要查找的内核代码符号名称,然后就可以搜索到所有以超链接形式给出的对该符号定义和引用的确切位置。
注意:为什么用汇编语言编写内核代码?
很多读者可能要问,Java、C++和C#功能强大,Visual Basic易于使用,但是为什么还要使用古老的汇编语言来编写内核代码呢?这是因为处于以下3个方面的考虑。
(1)Linux内核中的底层代码直接和硬件打交道,需要一些专用的指令,而这些指令在C语言中并无对应的语言成分。
(2)内核中实现某些操作的过程、代码段或函数,在运行时会很频繁地被调用,这时用汇编语言编写,其时间效率会有大幅度提高。
(3)在某些特别的场合,一段代码的空间效率也很重要,如操作系统的引导程序一定要容纳在磁盘的第一个扇区中,多一个字节都不行。这时只能用汇编语言编写。
在Linux内核代码中,以汇编语言编写的代码有如下两种不同的形式。
● 完全的汇编代码,这样的代码采用“.s”作为文档名的扩展名;
● 嵌入在C代码中的汇编语言片段。
对于新接触Linux内核源码的读者,即使比较熟悉i386汇编语言,在理解内核中的汇编代码时都会感到困难。原因是在内核的汇编代码中,采用的是不同于常用Intel i386汇编语言的AT&T格式的汇编语言,而在嵌入C代码的汇编语言片段中,更是增加了一些指导汇编工具如何分配使用寄存器、如何与C代码中定义的变量相结合的语言成分。这些成分使嵌入C代码的汇编语言片断实际上变成了一种介于汇编和C之间的一种中间语言。