官术网_书友最值得收藏!

1.6.2 瀏覽源碼的工具

俗話說(shuō)“工欲善其事,必先利其器”。使用一個(gè)功能強(qiáng)大并方便的代碼瀏覽工具有助于我們學(xué)習(xí)內(nèi)核代碼。接下來(lái)將簡(jiǎn)單介紹瀏覽Linux內(nèi)核源碼的常用工具。

1.Source Insight

Windows系統(tǒng)下最為方便快捷的代碼瀏覽工具是Source Insight,這是一款商業(yè)軟件。Source Insight是一個(gè)面向項(xiàng)目開(kāi)發(fā)的程序編輯器和代碼瀏覽器,它擁有內(nèi)置的對(duì)C/C++、C#和Java等程序的分析。Source Insight可以分析用戶的源代碼并在用戶工作的同時(shí)動(dòng)態(tài)維護(hù)它自己的符號(hào)數(shù)據(jù)庫(kù),并自動(dòng)為用戶顯示有用的上下文信息。 Source Insight不僅僅是一個(gè)強(qiáng)大的程序編輯器,它還能顯示reference trees,class inheritance diagrams和call trees。Source Insight提供最快速的對(duì)源代碼的導(dǎo)航和任何程序編輯器的源信息。Source Insight還提供快速和革新的訪問(wèn)源代碼和源信息的能力。與眾多其他編輯器產(chǎn)品不同,Source Insight能在用戶編輯的同時(shí)分析用戶的源代碼,為用戶提供實(shí)用的信息并立即進(jìn)行分析。

當(dāng)安裝Source Insight后,需要先打開(kāi)Source Insight并創(chuàng)建一個(gè)工程,然后將內(nèi)核代碼加入該工程中,并進(jìn)行文件同步,這樣就可以在代碼之間進(jìn)行關(guān)聯(lián)閱讀。

Source Insight的缺點(diǎn)是并沒(méi)有對(duì)應(yīng)Linux的版本。因此對(duì)于很多Linux初學(xué)者來(lái)說(shuō),在一個(gè)完全的Linux環(huán)境下進(jìn)行學(xué)習(xí),需要尋找一個(gè)可以取代Source Insight的代碼瀏覽工具。

2.Vim+Cscope

Linux環(huán)境下的最佳瀏覽工具是Vim,各種Linux發(fā)行版本都會(huì)默認(rèn)進(jìn)行安裝。雖然Vim默認(rèn)的編輯界面很普通,甚至可以說(shuō)丑陋,但是可以通過(guò)配置文件.vimrc添加不同的界面效果。同時(shí)還可以配合TagList、WinManager等很多好用的插件或工具,將Vim打造成一個(gè)不次于Source Insight的代碼瀏覽編輯工具。

3.LXR

LXR(Linux Cross Reference)也是一種比較流行的Linux內(nèi)核源代碼瀏覽工具,其下載地址為http://lxr.linux.no/。

如果用戶的目的只是瀏覽Linux內(nèi)核代碼,則并不需要安裝LXR。因?yàn)樵诰W(wǎng)站http://lxr.linux.no/上已經(jīng)提供了幾乎所有版本的Linux內(nèi)核代碼,用戶只需登錄該網(wǎng)站,選擇某一特定的內(nèi)核版本后就可以在內(nèi)核代碼之間進(jìn)行關(guān)聯(lián)閱讀。

當(dāng)?shù)卿浘W(wǎng)站并選擇內(nèi)核版本后,在查找框內(nèi)輸入要查找的內(nèi)核代碼符號(hào)名稱,然后就可以搜索到所有以超鏈接形式給出的對(duì)該符號(hào)定義和引用的確切位置。

注意:為什么用匯編語(yǔ)言編寫內(nèi)核代碼?

很多讀者可能要問(wèn),Java、C++和C#功能強(qiáng)大,Visual Basic易于使用,但是為什么還要使用古老的匯編語(yǔ)言來(lái)編寫內(nèi)核代碼呢?這是因?yàn)樘幱谝韵?個(gè)方面的考慮。

(1)Linux內(nèi)核中的底層代碼直接和硬件打交道,需要一些專用的指令,而這些指令在C語(yǔ)言中并無(wú)對(duì)應(yīng)的語(yǔ)言成分。

(2)內(nèi)核中實(shí)現(xiàn)某些操作的過(guò)程、代碼段或函數(shù),在運(yùn)行時(shí)會(huì)很頻繁地被調(diào)用,這時(shí)用匯編語(yǔ)言編寫,其時(shí)間效率會(huì)有大幅度提高。

(3)在某些特別的場(chǎng)合,一段代碼的空間效率也很重要,如操作系統(tǒng)的引導(dǎo)程序一定要容納在磁盤的第一個(gè)扇區(qū)中,多一個(gè)字節(jié)都不行。這時(shí)只能用匯編語(yǔ)言編寫。

在Linux內(nèi)核代碼中,以匯編語(yǔ)言編寫的代碼有如下兩種不同的形式。

● 完全的匯編代碼,這樣的代碼采用“.s”作為文檔名的擴(kuò)展名;

● 嵌入在C代碼中的匯編語(yǔ)言片段。

對(duì)于新接觸Linux內(nèi)核源碼的讀者,即使比較熟悉i386匯編語(yǔ)言,在理解內(nèi)核中的匯編代碼時(shí)都會(huì)感到困難。原因是在內(nèi)核的匯編代碼中,采用的是不同于常用Intel i386匯編語(yǔ)言的AT&T格式的匯編語(yǔ)言,而在嵌入C代碼的匯編語(yǔ)言片段中,更是增加了一些指導(dǎo)匯編工具如何分配使用寄存器、如何與C代碼中定義的變量相結(jié)合的語(yǔ)言成分。這些成分使嵌入C代碼的匯編語(yǔ)言片斷實(shí)際上變成了一種介于匯編和C之間的一種中間語(yǔ)言。

主站蜘蛛池模板: 新宾| 建宁县| 明溪县| 南华县| 赤城县| 屯门区| 黑河市| 崇阳县| 沾化县| 天峨县| 隆回县| 湖南省| 来凤县| 潍坊市| 东安县| 平潭县| 安庆市| 宁武县| 麻栗坡县| 昭平县| 社会| 双柏县| 大连市| 宣汉县| 宁远县| 沙河市| 惠东县| 来宾市| 娱乐| 玉山县| 松潘县| 通榆县| 息烽县| 讷河市| 邓州市| 凌源市| 大新县| 会东县| 交城县| 濮阳县| 武胜县|