首先聲明,本文不適用於初學者!
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 的手冊。