Linux系統原始碼學習方法

NO IMAGE

原始碼目錄

一般在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核心原始碼的整體分佈情況。現代的作業系統一般由程序管理、記憶體管理、檔案系統、驅動程式和網路等組成。Linux核心原始碼的各個目錄大致與此相對應,其組成如下(假設相對於Linux-2.4.23目錄):

  1. arch目錄包括了所有和體系結構相關的核心程式碼。它下面的每一個子目錄都代表一種Linux支援的體系結構,例如i386就是Intel CPU及與之相相容體系結構的子目錄。PC機一般都基於此目錄。
  2. include目錄包括編譯核心所需要的大部分標頭檔案,例如與平臺無關的標頭檔案在include/linux子目錄下。
  3. init目錄包含核心的初始化程式碼(不是系統的引導程式碼),有main.c和Version.c兩個檔案。這是研究核心如何工作的好起點。
  4. mm目錄包含了所有的記憶體管理程式碼。與具體硬體體系結構相關的記憶體管理程式碼位於arch/*/mm目錄下。
  5. drivers目錄中是系統中所有的裝置驅動程式。它又進一步劃分成幾類裝置驅動,每一種有對應的子目錄,如音效卡的驅動對應於drivers/sound。
  6. ipc目錄包含了核心程序間的通訊程式碼。
  7. modules目錄存放了已建好的、可動態載入的模組。
  8. fs目錄存放Linux支援的檔案系統程式碼。不同的檔案系統有不同的子目錄對應,如ext3檔案系統對應的就是ext3子目錄。

Kernel核心管理的核心程式碼放在這裡。同時與處理器結構相關程式碼都放在arch/*/kernel目錄下。

  1. net目錄裡是核心的網路部分程式碼,其每個子目錄對應於網路的一個方面。
  2. lib目錄包含了核心的庫程式碼,不過與處理器結構相關的庫程式碼被放在arch/*/lib/目錄下。
  3. scripts目錄包含用於配置核心的指令碼檔案。
  4. documentation目錄下是一些文件,是對每個目錄作用的具體說明。

一般在每個目錄下都有一個.depend檔案和一個Makefile檔案。這兩個檔案都是編譯時使用的輔助檔案。仔細閱讀這兩個檔案對弄清各個檔案之間的聯絡和依託關係很有幫助。另外有的目錄下還有Readme檔案,它是對該目錄下檔案的一些說明,同樣有利於對核心原始碼的理解。

在閱讀方法或順序上,有縱向與橫向之分。所謂縱向就是順著程式的執行順序逐步進行;所謂橫向,就是按模組進行。它們經常結合在一起進行。對於Linux啟動的程式碼可順著Linux的啟動順序一步步來閱讀;對於像記憶體管理部分,可以單獨拿出來進行閱讀分析。實際上這是一個反覆的過程,不可能讀一遍就理解。

UNIX限制存放的目錄

/usr/include/limits.h(bits/posix1_lim.h和posix2_lim.h)