当前位置: 首页 > 工具软件 > LXR > 使用案例 >

linux 跨平台查询 lxr,利用LXR来生成Linux内核代码的交叉索引页面

金毅
2023-12-01

LXR(the Linux Cross Reference),linux

下的交叉索引工具,主要用来看源代码,其生成后的页面和http://lxr.linux.no/这个站点差不多,只不过生成自己的LXR页面的话在本地浏览不受网络影响,速度会快不少。

这里说一下我的安装过程。

1,安装apache

这个就不说了,网上一大堆教程。

./configure --prefix=/usr/local/apache2

make

make

install

2,perl 模块

我在安装的时候只需要另外安装这个模块:File::MMagic

cpan

-i File::MMagic

3,安装glimpse

去这里下载glimpse:http://webglimpse.net/trial/glimpse-latest.tar.gz

下载后按下面方式安装

tar

zxvf glimpse-latest.tar.gz

cd

glimpse-4.18.6/

./configure

make

make

install

只要安装flex就行了,debian下

apt-get install flex

4,下载LXR包并配置

①下载并解压LXR包

下载地址: http://sourceforge.net/projects/lxr

下载后解压到/usr/local/lxr下。

debian:/usr/local# tar zxvf lxr-0.9.5.tgz

debian:/usr/local# mv lxr-0.9.5 lxr

#复制template文件到/usr/local/lxr下面

debian:/usr/local/lxr# cp ./templates/* ./

②配置lxr.conf

我只修改了下面的几行

#glimpse所在目录,可以用whereis glimpse查看

‘glimpsebin’ => ‘/usr/local/bin/glimpse’,

’glimpseindex’ =>

‘/usr/local/bin/glimpseindex’,

#这个不用,注释掉

#’swishbin’ =>

‘/usr/local/bin/swish-e’,

’genericconf’ =>

‘/usr/local/lxr/lib/LXR/Lang/generic.conf’,

’ectagsconf’ =>

‘/usr/local/lxr/lib/LXR/Lang/ectags.conf’,

’baseurl’ =>

‘http://IP地址/lxr’, # Put your URL here

’baseurl_aliases’ => [

'http://localhost/lxr', 'http://www.ssnail.net/lxr'

],

‘range’ => [ readfile('srcroot/versions')

],

#代码所放目录

‘sourceroot’ =>

‘/usr/local/lxr/srcroot’,

#代码根目录的名字,自己喜欢的

’sourcerootname’ => ‘LXR

FOR SSNAIL’,

#用来放glimpse生成索引文件的目录,没有的话要自己生成

’glimpsedir’ =>

‘/usr/local/lxr/glimpse/databases’,

#这个不用,注释掉

#’swishdir’ =>

‘/a/directory/here/’,

③生成mysql数据库并修改lib/LXR/Index/Mysql.pm

LXR号称只支持mysql 4.x系列的,这么老的版本我当然没有了,看了一下代码,原来是因为LXR的数据表里用了release这样的字段,而release为mysql 5.0的关键字,这样只要在release 外面加上“就可以在mysql

5.0上用了。如下修改lib/LXR/Index/Mysql.pm

81c81

{dbh}->prepare(“select * from

${prefix}releases where fileid = ? and release =

?”);

> $self->{dbh}->prepare(“select * from

${prefix}releases where fileid = ? and `release`

= ?”);

83c83

{dbh}->prepare(“insert into

${prefix}releases (fileid, release) values (?, ?)”);

> $self->{dbh}->prepare(“insert into

${prefix}releases (fileid, `release`) values (?,

?)”);

130c130

{dbh}->prepare(“delete from

${prefix}releases ” . “where release = ?”);

> $self->{dbh}->prepare(“delete from

${prefix}releases ” . “where `release` = ?”);

同样修改initdb-mysql

create

table lxr_releases

(fileid int not null references lxr_files,

release char(255) binary not null,

primary

key (fileid,release)

);

—->

create

table lxr_releases

(fileid int not null references lxr_files,

`release` char(255) binary not null,

primary

key (fileid,release)

);

修改后,执行mysql

④建立必要的目录

#glimplse生成的索引数据文件所放目录

mkdir

-p /usr/local/lxr/glimpse/databases/

#我的源代码所放目录

mkdir

/usr/local/lxr/srcroot/

#生成version文件,这里表示我的内核代码放在/usr/local/srcroot/linux-2.6.24目录

echo

linux-2.6.24

>/usr/local/lxr/srcroot/versions

创建/usr/share/lxr/source/versions,这里记录所有要看的版本,内容是2.6.202.6.22

要保证2.6.22 =>/usr/share/lxr/source/2.6.22

创建/usr/share/lxr/source/defversion,这里记录缺省要看的版本,内容是2.6.22

之所以是这两个文件,见/usr/share/lxr/http/lxr.conf里的相关设置

5,配置apache访问。

LXR支持mod_perl和cgi两种方式,我采用的是cgi方式。

debian:/usr/local/lxr# mv .htaccess

.htaccess_mod_perl

debian:/usr/local/lxr# cp .htaccess_cgi

.htaccess

然后在apche的http.conf中加入下面的

Alias

/lxr/ “/usr/local/lxr/”

/usr/local/lxr>

AllowOverride

All

6,生成交叉索引页面。

一切改好之后就可以生成交叉索引数据了

debian:/usr/local/lxr# ./genxref

–url=http://www.ssnail.net/lxr

#这里很花时间,可以去休息一会儿了

最后访问 http://IP地址/lxr/source就可以看到生成的页面了

 类似资料: