首先声明,本文不适用于初学者!
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 的手册。