通过lxr可以帮助你在浏览器里浏览内核源码,其提供内核字符的定义和使用的链接。有助于学习和理解内核源码。

安装过程参考AmirWatad.com的"Browser the Linux Kernel Source with LXR"
链接:
http://www.amirwatad.com/blog/archives/2009/05/12/browse-the-linux-kernel-source-with-lxr/

作者提到,当他要看内核源码时,通常要打开LXR,Google,还有shell来进行grep,可见LXR的意义。

下面的安装过程在Ubuntu 9.10里通过:

1. 安装Apache (http server)
    sudo apt-get install apache2 libapache2-mod-perl2
    sudo apt-get install libcgi-simple-perl libcgi-ajax-perl libhtml-parser-perl libtemplate-perl

2. 安装LXR
    sudo apt-get install lxr

3. 安装Glimpse,是LXR使用的index工具
   a. 先从Glimpse的主页下载
      http://webglimpse.net/trial/glimpse-latest.tar.gz
   b. 解压
      tar xzf glimpse-latest.tar.gz
   c. 安装flex(glimpse安装时需要使用)
      sudo apt-get install flex
   d. 到glimpse源码目录
      ./configure
      make
      sudo make install
4. 打开/etc/apache2/httpd.conf,增加如下:
        ServerName localhost
    # Linux Cross Reference Stuff
    Alias /lxr /usr/share/lxr
    <Directory /usr/share/lxr>
    Options All
    AllowOverride All
    </Directory>

        注: 如果不加ServerName localhost,可能导致下面的警告
    apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
    apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName

5. 打开 /usr/share/lxr/http/.htaccess,加入
        <Files ~ (search|source|ident|diff|find)$>
    SetHandler cgi-script
    </Files>

6. 进入 /usr/share/lxr/source/

7. 拷贝内核代码至当前目录
   如:linux-2.6.24.7_nxp

8. 把版本号写入/usr/share/lxr/source/versions
   echo linux-2.6.24.7_nxp > /usr/share/lxr/source/versions

9. 创建默认的版本显示到源码的符号链接
   ln -s /usr/share/lxr/source/linux-2.6.24.7_nxp /usr/share/lxr/source/defversion

10. 创建检查参考(cross-reference)
   cd /usr/share/lxr/source
   sudo genxref
   sudo glimpseindex -H . .

11. 把相关文件和目录的属性设置为http server可以访问
    chown www-data.www-data .glimpse_*

    chown -R www-data.www-data /usr/share/lxr/

    chown www-data.www-data fileidx

12. 启动apache
    sudo /etc/init.d/apache2 restart
    注:遇到如下问题
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
    处理方法,
    > sudo lsof -i :80
COMMAND  PID      USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
xinetd  1324      root    6u  IPv6   6641      0t0  TCP *:www (LISTEN)
firefox 4503 qianjiang   22u  IPv4  89919      0t0  TCP qianjiang-laptop.local:56010->nrt04s01-in-f99.1e100.net:www (ESTABLISHED)
    可以看出xinetd 在使用80端口,所以,
    > sudo kill -9 1324
    启动,OK

    又注(2010-06-28):如果stop xinetd,发现tftp不能工作。所以需要寻求新的解决方法,如果能够改变www的端口地址。。。方法是打开/etc/services,把www的tcp和udp端口改为81

13. 打开/usr/share/lxr/http/lxr.conf
    把sourceroot: /usr/share/lxr/source/$v/linux/
    改成sourceroot: /usr/share/lxr/source/$v

    注:如果改成/usr/share/lxr/source/$v/可能导致[file search]之后的结果,不能打开,原因见:/usr/share/lxr/http/find    line 57
      $file =~ s/^$sourceroot//;
      这里是要把$file里面的绝对路径去掉,但是因为$v已经携带/符号,所以出错,没有完成替换

14. 打开firefox,输入
    http://localhost/lxr/http/blurb.html

注:
a. 发现[freetext search]工作不正常
   检查发现/usr/share/lxr/search line 64,调用glimpsebin
   但是,在lxr.conf中定义的glimpsebin路径为/bin/glimpsebin,应该改成
   glimpsebin: /usr/local/bin/glimpse