隨著linux的逐漸普及,現今有不少人對於Linux的安裝及設定早已比較熟悉了。與Linux的蓬勃發展相適應,想深入了解Linux的也越來越多。而要深入了解Linux,就必須閱讀和剖析linux核心的原始碼。
Linux的核心原始碼可以從好多途徑得到。通常來講,在安裝的linux系統下,/usr/src/linux目錄下的東西就是核心原始碼。另外還可以從互連網上下載,解壓縮後檔案通常也都坐落在linux目錄下。核心原始碼有許多版本,目前最新的穩定版是2.2.14。
許多人對於閱讀Linux核心有一種焦慮感,雖然大可毋須。其實,象Linux核心這樣大而複雜的系統程式碼,閱讀上去確實有好多困難,而且也不像想像的這麼高不可攀。只要有恆心,困難都是可以克服的。也不用害怕程度不夠的問題,事實上linux關機指令,有好多事情我們不都是從不會到會,邊幹邊學的嗎?
任何事情做上去都必須要有技巧和工具。正確的方式可以指導工作,良好的工具可以事半功倍。對於Linux核心原始碼的讀取也同樣這麼。下邊我就把自己閱讀核心原始碼的一點經驗介紹一下,最後介紹Window平台下的一種閱讀工具。
對於原始碼的閱讀,要想比較順利,事先最好對原始碼的知識背景有一定的了解。對於linux核心原始碼來講linux 核心程式碼閱讀工具,我覺得,基本要求是:1、作業系統的基本知識;2、對C語言比較熟悉,最好要有組合語言的知識和GNUC對標準C的擴充的知識的了解。另外在閱讀之前,也應當曉得Linux核心原始碼的整體分佈。我們曉得現代的作業系統通常由行程管理、記憶體管理、檔案系統、驅動程式、網路等組成。看一下Linux核心原始碼就可看出,各個目錄大致對應了那些方面。 Linux核心原始碼的組成如下(假定相對於linux目錄):
arch這個子目錄包含了此核心原始碼所支援的硬體體系結構相關的核心程式碼。如對於X86平台就是i386。
include這個目錄包括了核心的大多數include檔案。另外對於每種支援的體系結構分別有一個子目錄。
init此目錄包含核心啟動程式碼。
mm此目錄包含了所有的記憶體管理程式碼。與具體硬體體系架構相關的顯存管理程式碼坐落在arch/*/mm目錄下,如對應X86的就是arch/i386/mm/fault.c。
drivers系統中所有的裝置驅動程式都坐落於此目錄中。它又進一步界定成幾類裝置驅動,每一種也有對應的子目錄,如音效卡的驅動對應於drivers/sound。
ipc此目錄包含了核心的進程間通訊程式碼。
modules此目錄包含已建置可動態載入的模組。
fsLinux支援的檔案系統程式碼。不同的檔案系統有不同的子目錄對應,如ext2檔案系統對應的就是ext2子目錄。
#kernel主要核心程式碼。同時與處理器結構相關程式碼都置於arch/*/kernel目錄下。
net核心的網路部分程式碼。上面的每位子目錄對應於網路的一個面向。
lib此目錄包含了核心的函式庫程式碼。與處理器結構相關函式庫程式碼被置於arch/*/lib/目錄下。
scripts此目錄包含用於設定核心的腳本檔案。
Documentation此目錄是一些文檔,起參考作用。
清楚了原始碼的結構組成後就可以著手閱讀。對於閱讀技巧或則說次序,有所謂的橫向與縱向之分。所謂橫向就是沿著程式的執行次序逐漸進行;所謂縱向查看linux是什麼系統,就是分模組進行。雖然她們之間不是絕對的,而是常常結合在一起進行。對於Linux原始碼來講,啟動的程式碼就可以沿著linux的啟動次序一步一步來,它的大致流程如下(以X86平台為例):
./larch/i386/boot/bootSect.S-->./larch/i386/boot/setup.S-->./larch/i386/kernel/head.S-->./ init/main.c中的start_kernel()。而對於象顯存管理等部份,則可單獨掏出來進行閱讀剖析。我的感受是:開始最好依序閱讀啟動程式碼,之後再進行專題閱讀,如進程部份,顯存管理部等。在每位功能函數內部應一步一步來。其實這是一個反覆的過程linux 核心程式碼閱讀工具,不可能讀一遍就理解。
以上是Linux核心原始碼閱讀經驗分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!