linxu下阅读内核源代码,通常都使用vim + ctags 或者 lxr进行,我个人比较倾向于lxr,因为lxr提供了良好的界面,函数和定义都使用超链接标记出来,可以很方便的跟踪到函数内部去查看详细或者查看数据结构的定义等。网上有现成的网站提供了这样的服务,如果你只是偶尔看看内核源代码的话,其实直接登录某些提供这样服务的网站就差不多了,比如LXR,这个网站提供的体验相当不错,我以前就是经常在这个网站上查看源代码的,毕竟搭建这个环境的过程中,要建立文件检索的过程还是比较漫长的。
利用lxr查看内核源代码,其实就是搭建一个本地的网站,在ubuntu上,我们可以快速的完成这些工作。先大体的了解下需要的工具,apache2,glimpse,lxr。下面就正式开始搭建我们自己的lxr.
一、安装apach2:
sudo apt-get install apache2
centos环境下yum install httpd -y
二、安装glimpse:
先去网站下载最新的源代码glimpse-latest.tar.gz,然后解压到当前目录下
wget http://webglimpse.net/trial/glimpse-latest.tar.gz
tar -xvgf glimpse-latest.tar.gz
再接着进入解压后的目录下,比如我的是:
cd glimpse-4.18.6/
在编译之前,首先看看你的机器上是否已经安装了flex,因为编译glimpse的时候需要这个软件。如果没有的话,那么进行安装:
sudo apt-get install flex #快速词汇代码生成器
sudo yum install flex-devel
接着进行编译:
./config
make
sudo make install
执行完上面的步骤后,将生成的glimpse glimpseindex 拷贝到/bin目录下:
cd /bin
sudo cp glimpse glimpseindex /bin
三、安装lxr
https://lxr.sourceforge.io/zh/1-0-InstallSteps/1-0-install2LXR.php
sudo apt-get install lxr
新建/usr/share/lxr/http/.htaccess文件
在里面增加如下内容:
SetHandler cgi-script
四、复制linux源代码
去linux官方网站下载最近的内核代码(当然,以前的也可以)
复制linux源代码到/usr/share/lxr/source
sudo cp /home/huangwei/Download/linux-2.6.33.2.tar.bz2 /usr/share/lxr/source
解压:
tar xvjf linux-2.6.33.2.tar.bz2
重命名解压后的文件夹
sudo mv linux-2.6.33.2 2.6.33
五、生成数据文件
cd /usr/share/lxr/source
生成关键字交叉索引数据库
sudo genxref 2.6.33/
接下来要等待一段比较长的时间,因为它要扫描文件。
接下来,生成freetext交叉索引数据库:
glimpseindex -H . 2.6.33/
更改权限,使任何人都可以读取该文件
sudo chmod +r .glimpse*
六、修改lxr配置文件
原文:
sourceroot: /usr/share/lxr/source/$v/linux/
dbdir: /usr/share/lxr/source/dbdir
改成 :
sourceroot: /usr/share/lxr/source/2.6.33 #刚刚生成的fileidx 和xref 的地址
dbdir: /usr/share/lxr/source #生成的.glimpse_filenames这些文件的位置
七、阅读源代码
重新启动apache2
sudo /etc/init.d/apache2 restart
打开浏览器,输入http://localhost/lxr/http/source就能浏览本地的内核代码了
阅读的时候可以看到页面顶部有
~ [ source navigation ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~
source navigation是用户查看页面的界面
identifier search是查找某个变量名、结构名、函数名的界面
freetext search是查找任何字符串的界面
file search查找某个文件