歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux內核

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

  由於操作系統的內核貼近硬件,需要對計算機的體系結構有所了解,例如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)還可以對所有的源碼文件進行全文檢索,甚至包括注釋。其安裝方法可以參照其代碼中的幫助文件。




Copyright © Linux教程網 All Rights Reserved