看Linux核心源碼 練內力必備技能

來源:互聯網
上載者:User

由於作業系統的核心貼近硬體,需要對電腦的體繫結構有所瞭解,例如CPU的工作原理、介面特性和BIOS調用等。讀者千萬別因為這些望而卻步,這裡將介紹一些閱讀Linux核心源碼必備的技能。

                                   擷取核心
    一般在Linux系統中的/usr/src/linux*.*.*(*.*.*代表的是核心版本,如2.4.23)目錄下就是核心原始碼(如果沒有類似目錄,是因為還沒安裝核心代碼)。另外還可從互連網上免費下載。注意,不要總到http://www.kernel.org/去下載,最好使用它的鏡像網站下載。請在http://www.kernel.org/mirrors/裡找一個合適的下載點,再到pub/linux/kernel/v2.6/目錄下去下載2.4.23核心。這裡有兩種類型的程式碼封裝,即linux-2.4.23.tar.gz和linux-2.4.23.tar.bz2。兩個程式碼封裝內容是一樣的,只是壓縮程式不同。.gz是用gzip壓縮的;.bz2是用bzip2壓縮的。bzip2的壓縮能力比gzip強。

                                 代碼目錄結構
    在閱讀源碼之前,還應知道Linux核心源碼的整體分布情況。現代的作業系統一般由進程管理、記憶體管理、檔案系統、驅動程式和網路等組成。Linux核心源碼的各個目錄大致與此相對應,其組成如下(假設相對於Linux-2.4.23目錄):
◆arch目錄包括了所有和體繫結構相關的核心代碼。它下面的每一個子目錄都代表一種Linux支援的體繫結構,例如i386就是Intel CPU及與之相相容體繫結構的子目錄。PC機一般都基於此目錄。
◆include目錄包括編譯核心所需要的大部分標頭檔,例如與平台無關的標頭檔在include/linux子目錄下。
◆init目錄包含核心的初始化代碼(不是系統的引導代碼),有main.c和Version.c兩個檔案。這是研究核心如何工作的好起點。
◆mm目錄包含了所有的記憶體管理代碼。與具體硬體體繫結構相關的記憶體管理代碼位於arch/*/mm目錄下。
◆drivers目錄中是系統中所有的裝置驅動程式。它又進一步劃分成幾類裝置驅動,每一種有對應的子目錄,如音效卡的驅動對應於drivers/sound。
◆ipc目錄包含了核心進程間的通訊代碼。
◆modules目錄存放了已建好的、可動態載入的模組。
◆fs目錄存放Linux支援的檔案系統代碼。不同的檔案系統有不同的子目錄對應,如ext3檔案系統對應的就是ext3子目錄。
    Kernel核心管理的核心代碼放在這裡。同時與處理器結構相關代碼都放在arch/*/kernel目錄下。
◆net目錄裡是核心的網路部分代碼,其每個子目錄對應於網路的一個方面。
◆lib目錄包含了核心的庫代碼,不過與處理器結構相關的庫代碼被放在arch/*/lib/目錄下。
◆scripts目錄包含用於配置核心的指令檔。
◆documentation目錄下是一些文檔,是對每個目錄作用的具體說明。
    一般在每個目錄下都有一個.depend檔案和一個Makefile檔案。這兩個檔案都是編譯時間使用的輔助檔案。仔細閱讀這兩個檔案對弄清各個檔案之間的聯絡和依託關係很有協助。另外有的目錄下還有Readme檔案,它是對該目錄下檔案的一些說明,同樣有利於對核心源碼的理解。

                                   閱讀起步
    在閱讀方法或順序上,有縱向與橫向之分。所謂縱向就是順著程式的執行順序逐步進行;所謂橫向,就是按模組進行。它們經常結合在一起進行。對於Linux啟動的代碼可順著Linux的啟動順序一步步來閱讀;對於像記憶體管理部分,可以單獨拿出來進行閱讀分析。實際上這是一個反覆的過程,不可能讀一遍就理解。
    LXR(http://lxr.linux.no)是一個輔助閱讀的好工具,它能對指定的源碼檔案建立索引資料庫,利用Perl指令碼動態產生包含源碼的Web頁面。在此Web頁中,所有的變數、常量和函數都以超串連的形式給出,查閱十分方便。另外,LXR還提供標識符搜尋和檔案搜尋,結合程式Glimpse(http://glimpse.cs.arizona.edu)還可以對所有的源碼檔案進行全文檢索索引,甚至包括注釋。其安裝方法可以參照其代碼中的協助檔案。在Window下也有一適合Linux核心閱讀的工具稱作Source Insight(可從http://www.sourcedyn.com下載)。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.