日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

Linux內(nèi)核源代碼的閱讀及相關(guān)工具介紹

隨著linux的逐步普及,現(xiàn)在有不少人對于Linux的安裝及設(shè)置已經(jīng)比較熟悉了 。與Linux 的蓬勃發(fā)展相適應(yīng),想深入了解Linux的也越來越多 。而要想深入了解Linux,就需要閱讀和分析linux內(nèi)核的源代碼 。
Linux的內(nèi)核源代碼可以從很多途徑得到 。一般來講,在安裝的linux系統(tǒng)下,/usr/src/linux目錄下的東西就是內(nèi)核源代碼 。另外還可以從互連網(wǎng)上下載,解壓縮后文件一般也都位于linux目錄下 。內(nèi)核源代碼有很多版本,目前最新的穩(wěn)定版是2.2.14 。
許多人對于閱讀Linux內(nèi)核有一種恐懼感,其實大可不必 。當(dāng)然,象Linux內(nèi)核這樣大而復(fù)雜的系統(tǒng)代碼,閱讀起來確實有很多困難,但是也不象想象的那么高不可攀 。只要有恒心,困難都是可以克服的 。也不用擔(dān)心水平不夠的問題,事實上,有很多事情我們不都是從不會到會,邊干邊學(xué)的嗎?
任何事情做起來都需要有方法和工具 。正確的方法可以指導(dǎo)工作,良好的工具可以事半功倍 。對于Linux 內(nèi)核源代碼的閱讀也同樣如此 。下面我就把自己閱讀內(nèi)核源代碼的一點經(jīng)驗介紹一下,最后介紹Window平臺下的一種閱讀工具 。
對于源代碼的閱讀,要想比較順利,事先最好對源代碼的知識背景有一定的了解 。對于linux內(nèi)核源代碼來講,我認(rèn)為,基本要求是:1、操作系統(tǒng)的基本知識;2、對C語言比較熟悉,最好要有匯編語言的知識和GNU C對標(biāo)準(zhǔn)C的擴展的知識的了解 。另外在閱讀之前,還應(yīng)該知道Linux內(nèi)核源代碼的整體分布情況 。我們知道現(xiàn)代的操作系統(tǒng)一般由進程管理、內(nèi)存管理、文件系統(tǒng)、驅(qū)動程序、網(wǎng)絡(luò)等組成 。看一下Linux內(nèi)核源代碼就可看出,各個目錄大致對應(yīng)了這些方面 。Linux內(nèi)核源代碼的組成如下(假設(shè)相對于linux目錄):
arch 這個子目錄包含了此核心源代碼所支持的硬件體系結(jié)構(gòu)相關(guān)的核心代碼 。如對于X86平臺就是i386 。
include 這個目錄包括了核心的大多數(shù)include文件 。另外對于每種支持的體系結(jié)構(gòu)分別有一個子目錄 。
init 此目錄包含核心啟動代碼 。
【Linux內(nèi)核源代碼的閱讀及相關(guān)工具介紹】mm 此目錄包含了所有的內(nèi)存管理代碼 。與具體硬件體系結(jié)構(gòu)相關(guān)的內(nèi)存管理代碼位于arch/*/mm目錄下,如對應(yīng)于X86的就是arch/i386/mm/fault.c。
drivers 系統(tǒng)中所有的設(shè)備驅(qū)動都位于此目錄中 。它又進一步劃分成幾類設(shè)備驅(qū)動,每一種也有對應(yīng)的子目錄,如聲卡的驅(qū)動對應(yīng)于drivers/sound 。
ipc 此目錄包含了核心的進程間通訊代碼 。
modules 此目錄包含已建好可動態(tài)加載的模塊 。
fs Linux支持的文件系統(tǒng)代碼 。不同的文件系統(tǒng)有不同的子目錄對應(yīng),如ext2文件系統(tǒng)對應(yīng)的就是ext2子目錄 。
kernel 主要核心代碼 。同時與處理器結(jié)構(gòu)相關(guān)代碼都放在arch/*/kernel目錄下 。
net 核心的網(wǎng)絡(luò)部分代碼 。里面的每個子目錄對應(yīng)于網(wǎng)絡(luò)的一個方面 。
lib 此目錄包含了核心的庫代碼 。與處理器結(jié)構(gòu)相關(guān)庫代碼被放在arch/*/lib/目錄下 。
scripts此目錄包含用于配置核心的腳本文件 。
Documentation 此目錄是一些文檔,起參考作用 。
清楚了源代碼的結(jié)構(gòu)組成后就可以著手閱讀 。對于閱讀方法或者說順序,有所謂的縱向與橫向之分 。所謂縱向就是順著程序的執(zhí)行順序逐步進行;所謂橫向,就是分模塊進行 。其實他們之間不是絕對的,而是經(jīng)常結(jié)合在一起進行 。對于Linux源代碼來講,啟動的代碼就可以順著linux的啟動順序一步一步來,它的大致流程如下(以X86平臺為例):
./larch/i386/boot/bootSect.S-->./larch/i386/boot/setup.S-->./larch/i386/kernel/head.S-->./init/main.c中的start_kernel() 。而對于象內(nèi)存管理等部分,則可以單獨拿出來進行閱讀分析 。我的體會是:開始最好按順序閱讀啟動代碼,然后進行專題閱讀,如進程部分,內(nèi)存管理部分等 。在每個功能函數(shù)內(nèi)部應(yīng)該一步步來 。實際上這是一個反復(fù)的過程,不可能讀一遍就理解 。

推薦閱讀