Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3371518
  • 博文数量: 258
  • 博客积分: 9440
  • 博客等级: 少将
  • 技术积分: 6998
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-03 10:28
个人简介

-- linux爱好者,业余时间热衷于分析linux内核源码 -- 目前主要研究云计算和虚拟化相关的技术,主要包括libvirt/qemu,openstack,opennebula架构和源码分析。 -- 第五届云计算大会演讲嘉宾 微博:@Marshal-Liu

文章分类

全部博文(258)

文章存档

2016年(1)

2015年(4)

2014年(16)

2013年(22)

2012年(41)

2011年(59)

2010年(40)

2009年(75)

分类: LINUX

2009-06-24 15:49:55

首先声明,本文不适用于初学者!
1 编译ctags需要的文件
  #make ARCH=x86 tags
  ARCH=x86 的意思是除了索引指定的x86体系结构的代码外,不索引其他体系结构的想关代码
2 编译cscope需要的文件
  #make ARCH=x86 cscope
3 在vim中用ctags浏览
  ts do_fork  等同于光标停在do_fork上,再按CTRL + ]
  tn          下一个(next)
  tp          上一个(previous)
  tf          第一个(first)
  tl          最后一个(last)
4 在vim中用cscope浏览
 cs add cscope.out        #添加一个 connection,浏览内核时经常发现 cscope 链接断开
                          可以调用:cs a cscope.out
:cs show                  #显示所有 connections
:cs kill <#>              #杀死第#号 connection,第#号就是:cs show 显示出来的
:cs reset                 #reset 所有 connections
:cs find c|d|e|f|g|i|s|t
解释:
                     c   查找 name 被哪些函数调用
                     d   查找 name 调用了哪些函数
                     e   egrep 句型
                     f   查找名为 name 的文件
                     g   查找 name 的定义
                     i   查找#include 本 name 的文件
                     s   查找 name 这个 C 符号
                     t   查找何处对 name 赋值
        对 Linux 内核来说,如果既有 tags 文件,又有 cscope.out 文件,则 Vim 中:set cst
意味着使用 cscope 风格的^],也就是:tag 命令。 于是:
              如果想用 ctags 找到 do_IRQ:
              :ts do_IRQ
              如果想用 cscope 找到 do_IRQ:
              :ta do_IRQ
5 CTRL + T 返回上一步的操作处

最后给大家推荐一些内核相关的经典图书:
入门推荐: LKD2 - 《Linux 内核设计与实现-第 2 版》
      从入门开始,介绍了诸如中断、系统调用、虚拟文件系统、同步与互斥、
      内存管理、进程控制等方面,内容比较浅显易懂,是入门的好书。
      优点: 适合入门 (个人认为,没有比 LKD2 更优秀的内核入门图书)
      缺点: 内容不够深入,覆盖面不广。(对高手来说估计就像休闲材料)
3.1 ULK3 - 深入理解 Linux 内核-3rd
      一本很全面的 Linux 内核原理书。 书中以 2.6.11 为示例版本,着重讲述了
      x86 平台的 Linux 内核实现。
      优点: 深入,全面
      缺点: N/A
      我觉得看完 ULK3 就是高手了:)    而且由于书中着重介绍了 X86 体系结构,也称得
      上半个 x86 专家了。
3.2 《Linux 内核源代码情景分析》
      以 2.4.0 为例讲解,注重代码级别的剖析,对中断、内存管理、文件系统、
      SMP、PCI 和 USB、IPC 的讲解都是代码级别的深入细致。
      优点: 深入
      缺点: 针对的内核版本较旧,且每个「情景」都很长,不容易坚持读完。
      FYI : 新手不要从《情景分析》开始学习内核,这样只会增长你的学习周期。
3.3 LDD3 - Linux 设备驱动程序-3rd
    LDD3 写的很精彩。 但如果要学会写具体的驱动程序,还是得参照硬件的
    datasheet,读一个内核中现成的驱动程序。
    FYI : 内核中自带的驱动程序 skeleton:
            drivers/net/pci-skeleton.c 和 drivers/usb/usb-skeleton.c,分别是为 PCI/USB
            驱动程序员提供的参考代码。
    3.4 现代体系结构上的 Unix 系统 - 内核程序员的 SMP 和
Caching 技术
        这本书着重讲解各种体系结构上的 Unix 实现注意事项,e.g. SMP 的同步与互斥、
        Cache 一致性问题。
        优点: 作者知识面非常广,原理讲得很清楚。
        缺点: 94 年的书,比较旧
    3.5 Intel & AMD CPU 参考手册
        最好带着问题有针对性的去读 Intel & AMD 的手册。

阅读(6014) | 评论(1) | 转发(2) |
给主人留下些什么吧!~~

amarant2011-04-20 13:25:07

博主文章写的很好啊!!这句话“首先声明,本文不适用于初学者”太打击新手了。。其实vim+cscope也很容易上手。
我发现身边好多人都不用vim用kscope或sourcesight,我觉得真的太可惜了。vim这么强大的工具居然不用。。。