学linux驱动,看源码感觉 http://lxr.oss.org.cn挺不错,很清晰方便
转载的文章 http://blog.chinaunix.net/uid-26820608-id-3166734.html里面有ubuntu下安装的详细过程,如果感觉链接里面的简单就用里面的方法装,apt-get安装版本默认0.3
在Ubuntu下搭建LXR环境步骤:
1.安装 apache2, MySQL and exuberant-ctags:
- sudo apt-get install apache2 mysql-server exuberant-ctags
在安装mysql-server时,你需要为root 用户创建一个密码才可完成安装
2.安装perl library, 确保你可以连接数据库,安装和perl 相关的库:
- sudo apt-get install libdbi-perl libdbd-mysql-perl libfile-mmagic-perl libapache2-mod-perl2
3.下载lxr
http://sourceforge.net/projects/lxr/
在lxr 官网下载lxr,我下载的是lxr-0.10.2.tgz,默认下载到本地Downloads 文件夹下。
注:
在这里提下,写博客这几天,lxr最新版为lxr-0.11.1,最新版的安装可以说更“简单化了”,准确点的说是更“人性化”,但是把所有的环境配置都弄完了,就是用浏览器访问被禁止(403 Forbidden)不明白是那里的问题,perl代码实在是不想看,看了也解决不了,等高人解决吧,总体来说lxr-0.11.1配置较前面的版本有了很大的提高,文件结构也也规整了很多。
还有就是lxr-0.10.2里面有个bug需要自己手动修改(lxr-0.11.1已经改正),这个bug视perl版本,由perl语法变化导致,如果perl版本较早,没有出现问题就不用改了!
4. 获取解压lxr
解压缩lxr-0.10.2.tgz 到 /usr/local/share 改名为lxr:
不熟悉命令,右击解压,改名lxr
- cd /usr/local/share
- sudo mv /home/beaver/Downloads/lxr-0.9.10.tgz .
- sudo tar -zxf lxr-0.9.10.tgz
- sudo mv lxr-0.9.10 lxr
- cd lxr
5.配置数据库
以下代码中“#”后面的为注释部分,不输入终端
首先登录数据库,使用直接创建的root 用户和密码
- mysql -u root -p #Enter the password when asked.
初始化MySQL server, 运行如下命令建立索引数据系统:
- CREATE USER 'lxr'@'localhost' identified by 'foo'; #Creates the user "lxr" with the password "foo"
- \. initdb-mysql #Initializes the lxr database by creating the tables and give "lxr" user the needed permissions.
注:
为了确保初始化过程正确,需要终端在lxr目录下,即/usr/local/share/lxr 运行以上命令. 否则,在初始化数据库的时候无法找到initdb-mysql脚本。
退出数据库
6.安装搜索引擎swish-e
使用开源搜索引擎swish-e,swish-e是完全开源的,也可以使用glimpse,但glimpse是商业的
注:
不知道什么原因,glimpse-4.18.6在lxr-0.10.2中索引2.6.xx内核时停止不动,看其生成的数据文件中有一个总是创建了又删除,索引linux-0.11的时候没什么问题,不知道什么原因,在lxr-0.3和lxr-0.11.2上没出现这个问题,本来是用glimpse的,因为没通过又装了swish-e,如果没出问题那个都可以
下载安装swish-e:
- sudo apt-get install swish-e
6.配置lxr.conf
拷贝lxr根目录templates中的lxr.conf到lxr 根目录
不熟悉命令直接桌面拷贝,以下是命令方式
- sudo cp templates/lxr.conf . #注意最后的“.”表示当前目录
- gedit lxr.conf &
在lxr.conf 配置文件中注释掉glimpse相关的行,如下所示:
- #, 'glimpsebin' =>‘/usr/local/bin/glimpse'
- #, 'glimpseindex' =>'/usr/local/bin/glimpseindex’
现在给出swish-e 的执行路径,可以通过使用 “which swish-e” 命令找到。我系统的swish-e执行路径是:
- , 'swishbin' =>'/usr/bin/swish-e‘
注:要确保用户对该文件有执行权限,如果遇到问题,可以通过“chmod”使用户有执行权限
配置lxr的 ctags and configuration:
源文件如果是/path/to把这个替换成解压lxr的绝对路径如下
- , 'ectagsconf' => '/path/to/lib/LXR/Lang/ectags.conf'
- , 'genericconf' => '/path/to/lib/LXR/Lang/generic.conf’
替换后
- , 'ectagsconf' => '/usr/local/share/lxr/lib/LXR/Lang/ectags.conf'
- , 'genericconf' =>'/usr/local/share/lxr/lib/LXR/Lang/generic.conf‘
定义 server's URL如下:
- ,'baseurl' => 'http://localhost/lxr’
添加主机的IP addresses,这样通过网络也可以访问LXR, addresses to URL aliases like the following:
- , 'baseurl_aliases' =>[ 'http://17.2.0.193/lxr']
接着指出源码所在的文件夹(下载linux源码),确保通过索引可以找到源码。linux源码可有多个版本,因此可将其放在一个主文件夹下,可包含多个子目录(子目录也可以是ln -s命令创建的源码连接文件夹),如
2.6.30,2.6.34,即每个版本要分别对应一个子目录。例如,我用一个文件夹lxr_source,作为源文件目录,如下所示:
- , 'sourceroot' =>'/home/beaver/lxr_source’ //beaver是你的名字
在lxr_source文件夹下,有两个子目录 2.6.30和2.6.34 源码分别在这两个子目录下,需要告诉LXR这些源码并且对他们进行索引,对lxr.conf文件进行如下配置:
- , 'range' => [qw(2.6.30 2.6.34)]
接着设置默认版本是 version 2.6.34:
- , 'dbpass' =>'foo'
- , 'dbuser' => 'lxr’
最后设置swish-e索引目录,要和源码目录分开,例如:
- , 'swishdir' => '/home/beaver/swish/‘
同时注释掉glimpsedir索引目录:
- , 'glimpsedir' => '/path/to/glimpse/databases’
7.完成以上操作后,开始索引操作,进入/usr/local/share/lxr 目录执行以下命令:
- ./genxref --url=http://localhost/lxr --allversions
这个命令将索引源码目录下的所有版本,如果只对某个版本进行索引,可以执行如下命令:
- ./genxref --url=http://localhost/lxr --version=2.6.30
在0.11.1中提供了检测配置命令
- ./genxref --url=http://localhost/lxr --checkonly
在步骤3中提到由于perl语法规则的辩护导致lxr中相关perl代码执行出错,步骤8执行是会提示错误,大致内容如下:
- ./genxref --checkonly
- Global symbol "$wwwdebug" requires explicit package name at lib/LXR/Common.pm line 65.
- Global symbol "$tmpcounter" requires explicit package name at lib/LXR/Common.pm line 67.
- Global symbol "$wwwdebug" requires explicit package name at lib/LXR/Common.pm line 75.
- Global symbol "$wwwdebug" requires explicit package name at lib/LXR/Common.pm line 84.
- Global symbol "$wwwdebug" requires explicit package name at lib/LXR/Common.pm line 98.
- Global symbol "$tmpcounter" requires explicit package name at lib/LXR/Common.pm line 108.
- Type of arg 1 to keys must be hash or array (not hash element) at lib/LXR/Common.pm line 114, near "}}"
- Compilation failed in require at lib/LXR/Index.pm line 23.
- BEGIN failed--compilation aborted at lib/LXR/Index.pm line 23.
- Compilation failed in require at ./genxref line 27.
- BEGIN failed--compilation aborted at ./genxref line 27.
在lxr根目录,进入lib/LXR中的Common.pm文件,查找内容并修改,修改内容如下
- 修改代码$wwwdebug = 0; 为my $wwwdebug = 0;
- 修改代码$tmpcounter = 23; 为my $tmpcounter = 23;
- 修改代码foreach my $param (%{keys $HTTP->{'param'}}) { 为foreach my $param (keys %{$HTTP->{'param'}}) {
- 可根据错误提示找到错误行位置
8.配置apache2 server
在/etc/apache2/conf.d/目录下创建文件lxrserver.conf
- sudo gedit lxrserver.conf &
在文件中添加如下代码
- Alias /lxr /usr/local/share/lxr
- <Directory /usr/local/share/lxr>
- Options All
- AllowOverride All
- </Directory>
复制lxr根目录下.htaccess_cgi为.htaccess
进入 /usr/local/share/lxr 目录,执行如下命令:
- sudo cp .htaccess_cgi .htaccess
9.启动apache2
- sudo /etc/init.d/apache2 restart
10.查看代码索引
- 打开浏览器,输入http://localhost/lxr/source即可浏览索引的源码
推荐参考文档:
1.lxr自带INSTALL文档
2. http://egemengozoglu.com/blog/2011/07/lxr-installation-on-ubuntu-10-10/
3. http://jinnaxu-tju-edu-cn.iteye.com/blog/1335044
4. http://sourceforge.net/projects/lxr/forums/forum/86145/topic/4922249
5.lxr 下载: http://sourceforge.net/projects/lxr/