不管你是从事于Linux内核工作还是出于兴趣爱好,Linux内核源码都是非常好的学习资源。意味着就要经常的和内核源码大交道,那么软件工具就是少不了的。在Windows系统上确实有着许多好用的软件,这点还是可以肯定的。对于像内核这种复杂庞大的源码树,Source Insight工具便是非常适合且好用的了。那么怎样去管理Linux内核源码树呢?很明显Linux操作系统支持不同的体系结构的CPU,在/ARCH/目录下有alpha、i386、parisc、sparc、arm、mips等各种具体架构的CPU相关的目录。那么在建立一个学习用的内核源码树工程时,当然我们只要添加我们所关心的CPU目录和一些通用的目录和文件。
一、建立工程文件夹
最好建立一个自己的管理Source Insight所有工程文件夹(例如在D:\建立文件夹 D:\SourInProject),然后分别创建单独的工程文件夹。在这里我们建的是Linux-2.6.22.6工程,那么就建立一个文件夹名为:Linux-2.6.22.6Pro,在里面放置linux-2.6.22.6源码包,和一个准备放置Source Insight所创建的linux-2.6.22.6工程包SourInPro。这样就很清晰,源码和工程包单独放在一个命名为Linux-2.6.22.6Pro下,即不同的工程都带有一个源码包和一个创建后的工程包。
二、如何创建工程
(1)、首先打开Source Insight软件,配置好软件所认识的文件后缀,点击菜单栏上Options->Document Options,在Document Type下拉列表中,选择C Source File,然后在右边File filter:文本框中添加一些重要文件后缀;*.S;*.lds;Kconfig;*defconfig;*.in;Makefile等(否则点击Add Tree添加目录树时,一些重要文件不被加入到工程,则要手动一个个加入。不过最省事的莫过写个;*.*了)。然后再点击菜单栏上的Project->New Project,在弹出的New Project对话窗口,New project name:(工程名)在这填linux-2.6.22.6,Where do you want to store the project data files?(你想把你的工程文件存放在哪里),在这我们填在上一步创建的D:\SourInProject\Linux-2.6.22.6Pro\SourInPro。然后一路OK,出现一个名为:Add and Remove Project Files对话框,下面我们就针对此对话窗口操作;
(2)、在Add and Remove Project Files对话框中,我们点击左边Directory我们预先放好的linux-2.6.22.6的源码包,此时在右边File Name将会显示所有的源码目录文件。那么我们如何选择哪些文件是我们以后查看源码更为紧密关联的呢?
(3)第一步,我们可以把所有的文件都加进工程,毕竟大部分目录文件还是通用的,然后我们去除一些我们所不关心的目录和文件。点击右边File Name 框中顶层目录..(一个向上的箭头标识),这里把Show only known document types(所熟知的文件类型)去掉勾选,否则很多重要的文件像Makefile、Kbuild等其它的文件没有被加入。然后点击Add All 在对话框中Add to Project 钩上Recursively add lower sub-directories(意思递归添加子目录文件);
(4)、显然在/ARCH/目录下有alpha、i386、parisc、sparc、arm、mips等各种具体架构的CPU相关的目录。首先我们先把整个目录Remove Tree,然后再添加我们所关心的目录。在这里我们进入Arch中的我们关心的Arm目录,首先看到一些单独的文件(比如Kconfig、Kconfig.debug等,一般顶层的单独文件都是通用的),我们点击Add All 在弹出的Add to Project对话框中去掉Include top level sub-directories。然后看到像Boot、Common、Configs、Kernel、Lib目录,这些在Arm架构中都是些通用的目录,我们依次选中它们,点击Add Tree;接着是一些Mach-xxx目录,那我们是哪个Mach呢,往后看有个Mach-s3c2410目录,就是我们的Mach目录,点击Add Tree加入工程。再接着后面的目录看上去就是通用的,但发现有几个目录是Plat-xxx,显然我们属于Plat-s3c24xx,所以从Mm目录开始,一直到最后目录(但中间Plat-xxx目录,我们只选Plat-s3c24xx),我们点击Add Tree。这样整个Arch目录我们已经搞定。
(5)、回到顶层目录我们再往下看,发现一个Include目录,同样里面也会有很多不同体系结构的目录。进入Include目录,发现有很多Asm-xxx的目录,从名字上知道,Asm-arm是arm相关的头文件,Asm-i386是x86相关的头文件。显然我们不需要那么多不相关的目录,我们回到顶层目录,选中Include目录,点击Remove Tree去除整个目录,然后再进入添加我们关系的目录和文件。同是ARM架构的也有不同的架构,进入/Include/Asm-arm目录,这里会有一些单独的文件,我们点击Add All 在弹出的Add to Project对话框中去掉Include top level sub-directories,待会我们再处理这些子目录。进入/Include/Asm-arm目录,同样把这里面的许多的单独文件先加入,同上步一样操作。然后在这里我们发现Arch-s3c2410是我们所关心的,进入/Include/Asm-arm/Arch-s3c2410目录,点击Add All加入所以文件。再回到/Include/Asm-arm目录,后面Hardware、Mach、Plat-s3c24xx目录都是通用的,我们选中它们,点击Add Tree加入到工程。这时,/Include/Asm-xxx目录我们已经搞定Asm-arm。接着回到/Include目录,发现有个Asm-generic目录,从名字上就知道是个通用的目录,我们选中它,Add Tree加入工程。至此,/Include/Asm-xxx其它目录我们不用考虑。接着从Crypto目录开始到最后目录Video目录,都是一些通用的目录和文件,从Crypto目录开始,按shift,选择到最后一个目录,点击Add Tree加入剩下的目录。此时/Include目录我们全部搞定;
(6)、最后再回到linux-2.6.22.6顶层目录,剩下的没有分析的目录都是一些通用的目录,在第一步我们已经全部加入此时我们不用理会。关闭Add and Remove Project Files对话窗口;
(7)最后我们点击Source Insight菜单栏下的Project->Synchronize Files进行同步生成索引。至此,一个比较满意的工程建立完毕。