資源描述:
《Source_Insight打開linux內(nèi)核》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、用SourceInsight打開linux內(nèi)核源代碼2008-01-0919:06Linux的內(nèi)核源代碼可以從很多途徑得到。一般來(lái)講,在安裝的linux系統(tǒng)下,/usr/src/linux目錄下的東西就是內(nèi)核源代碼。另外還可以從互連網(wǎng)上下載,解壓縮后文件一般也都位于linux目錄下。內(nèi)核源代碼有很多版本,目前最新的穩(wěn)定版是2.2.14?! ≡S多人對(duì)于閱讀Linux內(nèi)核有一種恐懼感,其實(shí)大可不必。當(dāng)然,象Linux內(nèi)核這樣大而復(fù)雜的系統(tǒng)代碼,閱讀起來(lái)確實(shí)有很多困難,但是也不象想象的那么高不可攀。只要有恒心,困難都是可以克服的。也不用擔(dān)心水平不夠的問題,事
2、實(shí)上,有很多事情我們不都是從不會(huì)到會(huì),邊干邊學(xué)的嗎? 任何事情做起來(lái)都需要有方法和工具。正確的方法可以指導(dǎo)工作,良好的工具可以事半功倍。對(duì)于Linux內(nèi)核源代碼的閱讀也同樣如此。下面我就把自己閱讀內(nèi)核源代碼的一點(diǎn)經(jīng)驗(yàn)介紹一下,最后介紹Window平臺(tái)下的一種閱讀工具。 對(duì)于源代碼的閱讀,要想比較順利,事先最好對(duì)源代碼的知識(shí)背景有一定的了解。對(duì)于linux內(nèi)核源代碼來(lái)講,我認(rèn)為,基本要求是:1、操作系統(tǒng)的基本知識(shí);2、對(duì)C語(yǔ)言比較熟悉,最好要有匯編語(yǔ)言的知識(shí)和GNUC對(duì)標(biāo)準(zhǔn)C的擴(kuò)展的知識(shí)的了解。另外在閱讀之前,還應(yīng)該知道Linux內(nèi)核源代碼的整體分布
3、情況。我們知道現(xiàn)代的操作系統(tǒng)一般由進(jìn)程管理、內(nèi)存管理、文件系統(tǒng)、驅(qū)動(dòng)程序、網(wǎng)絡(luò)等組成??匆幌翷inux內(nèi)核源代碼就可看出,各個(gè)目錄大致對(duì)應(yīng)了這些方面。Linux內(nèi)核源代碼的組成如下(假設(shè)相對(duì)于linux目錄): arch這個(gè)子目錄包含了此核心源代碼所支持的硬件體系結(jié)構(gòu)相關(guān)的核心代碼。如對(duì)于X86平臺(tái)就是i386?! nclude這個(gè)目錄包括了核心的大多數(shù)include文件。另外對(duì)于每種支持的體系結(jié)構(gòu)分別有一個(gè)子目錄。 init此目錄包含核心啟動(dòng)代碼?! m此目錄包含了所有的內(nèi)存管理代碼。與具體硬件體系結(jié)構(gòu)相關(guān)的內(nèi)存管理代碼位于arch/*/mm
4、目錄下,如對(duì)應(yīng)于X86的就是arch/i386/mm/fault.c?! rivers系統(tǒng)中所有的設(shè)備驅(qū)動(dòng)都位于此目錄中。它又進(jìn)一步劃分成幾類設(shè)備驅(qū)動(dòng),每一種也有對(duì)應(yīng)的子目錄,如聲卡的驅(qū)動(dòng)對(duì)應(yīng)于drivers/sound。 ipc此目錄包含了核心的進(jìn)程間通訊代碼。 modules此目錄包含已建好可動(dòng)態(tài)加載的模塊?! sLinux支持的文件系統(tǒng)代碼。不同的文件系統(tǒng)有不同的子目錄對(duì)應(yīng),如ext2文件系統(tǒng)對(duì)應(yīng)的就是ext2子目錄?! ernel主要核心代碼。同時(shí)與處理器結(jié)構(gòu)相關(guān)代碼都放在arch/*/kernel目錄下?! et核心的網(wǎng)絡(luò)部分代碼
5、。里面的每個(gè)子目錄對(duì)應(yīng)于網(wǎng)絡(luò)的一個(gè)方面?! ib此目錄包含了核心的庫(kù)代碼。與處理器結(jié)構(gòu)相關(guān)庫(kù)代碼被放在arch/*/lib/目錄下。 scripts此目錄包含用于配置核心的腳本文件?! ocumentation此目錄是一些文檔,起參考作用?! ∏宄嗽创a的結(jié)構(gòu)組成后就可以著手閱讀。對(duì)于閱讀方法或者說順序,有所謂的縱向與橫向之分。所謂縱向就是順著程序的執(zhí)行順序逐步進(jìn)行;所謂橫向,就是分模塊進(jìn)行。其實(shí)他們之間不是絕對(duì)的,而是經(jīng)常結(jié)合在一起進(jìn)行。對(duì)于Linux源代碼來(lái)講,啟動(dòng)的代碼就可以順著linux的啟動(dòng)順序一步一步來(lái),它的大致流程如下(以X86平
6、臺(tái)為例): ./larch/i386/boot/bootSect.S-->./larch/i386/boot/setup.S-->./larch/i386/kernel/head.S-->./init/main.c中的start_kernel()。而對(duì)于象內(nèi)存管理等部分,則可以單獨(dú)拿出來(lái)進(jìn)行閱讀分析。我的體會(huì)是:開始最好按順序閱讀啟動(dòng)代碼,然后進(jìn)行專題閱讀,如進(jìn)程部分,內(nèi)存管理部分等。在每個(gè)功能函數(shù)內(nèi)部應(yīng)該一步步來(lái)。實(shí)際上這是一個(gè)反復(fù)的過程,不可能讀一遍就理解。?????安裝SourceInsight并啟動(dòng)程序,可以進(jìn)入圖1界面。在工具條上有幾個(gè)值得
7、注意的地方,如圖所示,圖中內(nèi)凹左邊的是工程按鈕,用于顯示工程窗口的情況;右邊的那個(gè)按鈕按下去將會(huì)顯示一個(gè)窗口,里邊提供光標(biāo)所在的函數(shù)體內(nèi)對(duì)其他函數(shù)的調(diào)用圖,通過點(diǎn)擊該窗體里那些函數(shù)就可以進(jìn)入該函數(shù)所在的地方。圖1SourceInsight界面圖由于SourceInsight實(shí)質(zhì)上是一個(gè)支持多種開發(fā)語(yǔ)言(java,c,c++等等)的編輯器,只不過由于其查找、定位、彩色顯示等功能的強(qiáng)大,而被我們當(dāng)成源代碼閱讀工具使用。所以,為了有效的閱讀源程序,首先必須選擇功能菜單上的“Project”選項(xiàng)的子菜單“NewProject”新建一個(gè)項(xiàng)目,項(xiàng)目名稱可以自由選定
8、,當(dāng)然也可以選擇刪除(Remove)一個(gè)項(xiàng)目。當(dāng)刪除一個(gè)項(xiàng)目的時(shí)候,并不刪除原有的源代碼文件,