- Android底層接口與驅(qū)動(dòng)開(kāi)發(fā)技術(shù)詳解
- 陳強(qiáng)
- 1310字
- 2019-10-12 15:38:30
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ǔ)言。
- 微信公眾平臺(tái)與小程序開(kāi)發(fā):從零搭建整套系統(tǒng)
- Docker技術(shù)入門與實(shí)戰(zhàn)(第3版)
- Effective C#:改善C#代碼的50個(gè)有效方法(原書第3版)
- Arduino by Example
- 實(shí)用防銹油配方與制備200例
- MariaDB High Performance
- Python機(jī)器學(xué)習(xí)實(shí)戰(zhàn)
- Learn React with TypeScript 3
- 微信小程序入門指南
- Express Web Application Development
- 汽車人機(jī)交互界面整合設(shè)計(jì)
- .NET 4.5 Parallel Extensions Cookbook
- 從0到1:HTML5 Canvas動(dòng)畫開(kāi)發(fā)
- JQuery風(fēng)暴:完美用戶體驗(yàn)
- OpenCV Android Programming By Example