Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4602916
  • 博文数量: 385
  • 博客积分: 21208
  • 博客等级: 上将
  • 技术积分: 4393
  • 用 户 组: 普通用户
  • 注册时间: 2006-09-30 13:40
文章分类

全部博文(385)

文章存档

2015年(1)

2014年(3)

2012年(16)

2011年(42)

2010年(1)

2009年(2)

2008年(34)

2007年(188)

2006年(110)

分类: LINUX

2006-12-21 16:49:02

今天配置lrx  和glimpse  阅读源代码的过程

一开始找了一个中文文档看了一下:
 

   lxr(linux cross reference)就是一个解决这个问题的工具:他对
你指定的源代码文件建立索引数据库,利用perl脚本CGI动态生成包含
源码的web页面,你可以用任何一种浏览器查阅。在此web页中,所有
的变量、常量、函数都以超连接的形式给出,十分方便查阅。比如你
在阅读/usr/src/linux/net/socket.c的源代码,发现函数
get_empty_inode不知道是如何以及在哪里定义的,这时候你只要点击
get_empty_inode,lxr将返回此函数的定义、实现以及各次引用是在什
么文件的哪一行,注意,这些信息也是超连接,点击将直接跳转到相应
的文件相应的行。另外lxr还提供标识符搜索、文件搜索,结合程序
glimpse还可以提供对所有的源码文件进行全文检索,甚至包括注释!


   下面将结合实例介绍一下lxr和glimpse的基本安装和使用,由于

glimpse比较简单,就从它开始:

   首先访问站点: 得到glimpse
的源码,比如我得到的是glimpse-4.12.5.tar.gz . 用root登录,在
任一目录下用tar zxvf glimpse-4.12.5.tar.gz解开压缩包,在当前
目录下出现新目录glimpse-4.12.5 .进入该目录,执行make即可。进
入bin目录,将文件glimpse和glimpseindex拷贝到/bin或/usr/bin下
即可。如果单独使用glimpse,那么只要简单的执行glimpseindex foo
即可,其中foo是你想要索引的目录,比如说是/usr/src/linux .glimpseindex
的执行结果是在你的起始目录下产生若干.glimpse*的索引文件。然后
你只要执行glimpse yourstring即可查找/usr/src/linux下所有包含
字符串yourstring的文件。

   对于lxr,你可以访问lxr.linux.no得到它的源代码解包后,遵循如下步骤:



/*下面的文字来源于lxr的帮助文档以及本人的安装体会*/


   1)修改Makefile中的变量PERLBIN和INSTALLPREFIX,使它们分别为
perl程序的位置和你想lxr安装的位置.在我的机器上,PERLBIN的值为
/usr/bin/perl  .至于INSTALLPREFIX,有如下原则,lxr的安装路径

必须是web服务器能有权限访问。因此它的值简单一点可取
/home/httpd/html/lxr (对于Apache web server)。
这里web服务器默认访问的目录是/home/httpd/html/


   2)执行 make install        这里假设lxr 安装在$INSTALLPREFIX =/home/httpd/html/

   3)修改$INSTALLPREFIX/lxr/http/lxr.conf :

       baseurl :
注意此处 /  千万不能少, 如果少了,配置之后发现 很多链接目录因为隔了一层,导致访问失败。


       htmlhead:$INSTALLPREFIX/lxr/http/template-head

       htmltail: $INSTALLPREFIX/lxr/http/template-tail

       htmldir: $INSTALLPREFIX/lxr/http/template-dir

       sourceroot : $INSTALLPREFIX/lxr/source/$v    # 假如对linux核心代码索引

       dbdir : /home/httpd/html/lxr/dbdir/$v/          #dbdirk可任意起名,且位置任意

       glimpsebin: /usr/bin/glimpse   #可执行程序glimpse的位置



   4)在$INSTALLPREFIX/http/下增加一个文件.htaccess  内容:

       ***

       SetHandler cgi-script

      


     上面这个文件保证Apache server将几个perl文件作为cgi-script.



   5)按照lxr.conf中的设置建立dbdir ,按照上例,建立目录

     $INSTALLPREFIX/lxr/dbdir

     进入这个目录执行$INSTALLPREFIX/bin/genxref yourdir

     其中yourdir是源码目录,比如/usr/src/linux

     如果要结合glimpse,则执行glimpseindex -H . yourdir

   
  6)编辑lxr.conf文件中指定获得Version的文件面, variable: v, Version, [$INSTALLPREFIX/lxr/source/versions], [/local/lxr/source/defversion]

将源码目录放在lxr/下
      如: mv    ..../linux-2.4.18        $INSTALLPREFIX/lxr/source/2.4.18
              mv   /usr/src/linux-2.6.15  $INSTALLPREFIX/lxr/source/2.6.15

这种做软链接的方法不知在处理多个源目录时发生了问题,单个源目录没有问题(没有用到$v).
              ln  -s  ..../linux-2.4.18        $INSTALLPREFIX/lxr/source/2.4.18

       vi  source/versions 如下:
2.4.18
2.6.15


   7)修改 /etc/httpd/conf/access.conf ,
   加入

    

      Options All

      AllowOverride All

      order allow,deny

      allow from all

    


  注意如果没有 access.conf 这个文件,直接将上面的内容加在 /etc/httpd/conf/httpd.conf 里面。

   8)进入/etc/rc.d/init.d/  执行

     killall httpd

     ./httpd start

     进入X ,用浏览器 blurb.html

     大功告成 ,这下你可以舒心的读源码了。
12.如何建立多个内核版本的源码交叉索引?

编辑lxr.conf文件中指定获得Version的文件/var/www/lxr/source/versions

按照7的步骤建立linux-2.0.39;linux-2.4.18两个版本的源码索引,然后

cat /var/www/lxr/source/versions;

2..2.20

2.0.39

2.4.18



由于没有写baseurl :    最后面的“/”号, 导致很多链接出现问题,发现隔了一层目录。

看了一下, lxr 文档,尽管是英文的,
参考文档:

1)lxr 自带文档
2)

安装用于内核与源码的交叉索引工具lxr-0.3



1.wget


2. tar zxvf lxr-0.3.tar.gz后 cd lxr-0.3/;make;



3. vi Makefile

修改INSTALLPREFIX=/var/www/lxr(通过浏览器访问的目录)



4. make install将lxr的相关文件复制到$INSTALLPREFIX指定的目录下



5. 安装apache,建立用户及用户组apache,然后更改配置文件httpd.conf

或其它(与apache版本有关)

User = apache

Group = apache

DocumentRoot=/var/www/lxr/http

在DirectoryIndex 中加入blurb.html,类似于DirectoryIndex index.html index.htm
blurb.html



编辑 /etc/httpd/conf/access.conf ,加入



Options All

AllowOverride All

order allow,deny

allow from all





6.编辑/var/www/lxr/http/lxr.conf文件

更改如下:

variable: v, Version, [/var/www/lxr/source/versions]

baseurl:

sourceroot: /var/www/lxr/source/$v/

srcrootname: Linux



incprefix:/var/www/lxr/source/$v/include/linux/ 需要包含的头文件所在目录

dbdir:/var/www/lxr/dbindex/$v/ 存放交叉索引数据库的目录

map: /var/www/lxr/source/$v/include/asm[^\/]*/ /var/www/lxr/source/$v/include/asm-$a/

map: /var/www/lxr/source/$v/arch/[^\/]+/ /var/www/lxr/source/$v/arch/$a/



7.mkdir -p /var/www/lxr/dbindex/;chown -R apache.apache /var/www/lxr/dbindex/



8.为linux-2.2.20内核建立lxr交叉索引

wget
cd /var/www/lxr/source/;

tar zxvf linux-2.2.20.tar.gz;

mv linux 2.2.20;

cd 2.2.20;

../../bin/genxref (建议安装perl-5.0)

chow -R .apache.apache ../source/

mv fileidx ../../dbindex/2.2.20/

mv xref ../../dbindex/2.2.20/



9. cd http/; vi .htaccess;编辑以下内容



SetHandler cgi-script





10.修改blurb.html中的超连接如下



Browse the code




修改template-tail与template-head文件修改blurb.html的超连接为href="/blurb.html">



11.打开mozilla浏览 192.168.0.1



12.如何建立多个内核版本的源码交叉索引?

编辑lxr.conf文件中指定获得Version的文件/var/www/lxr/source/versions

按照7的步骤建立linux-2.0.39;linux-2.4.18两个版本的源码索引,然后

cat /var/www/lxr/source/versions;

2..2.20

2.0.39

2.4.18




看一下这里:
效果太好了,还可以对比版本。
发现里面对安装过程说得很详细, 看来如果出了问题,首先不是去google, 一定要先看看英文文档,
往往答案就在其中。







阅读(1557) | 评论(0) | 转发(0) |
0

上一篇:fdisk 将移动硬盘分区

下一篇:strace调试

给主人留下些什么吧!~~