|
Linux內(nèi)核作為一個(gè)特殊的程序,同樣需要經(jīng)過編譯、鏈接之后才能運(yùn)行,僅僅是它執(zhí)行時(shí)擁有特殊的權(quán)限,位于特定的空間,并且不會(huì)也不可能信賴其他的軟件罷了。
Linux發(fā)展至今,其內(nèi)核的組織結(jié)構(gòu)日漸清晰,層次日漸分明。一旦基本系統(tǒng)安裝完畢,具有系統(tǒng)管理員權(quán)限的用戶即可編譯內(nèi)核。一般來說,Linux系統(tǒng)內(nèi)核的源碼放置在/usr/src/linux目錄下,它將依賴于體系結(jié)構(gòu)的代碼和獨(dú)立于體系結(jié)構(gòu)的代碼分離開來(前者僅占5%,通常是一些匯編代碼和局部的、針對(duì)于不同體系結(jié)構(gòu)的局部處理細(xì)節(jié),如時(shí)鐘定時(shí)器頻率)。 為了讓讀者更好地理清內(nèi)核結(jié)構(gòu),下面列出了幾個(gè)重要的源碼目錄: arch目錄 該目錄的存放具體地依賴于體系結(jié)構(gòu)實(shí)現(xiàn)的代碼。在這個(gè)目錄下,針對(duì)不同體系結(jié)構(gòu)所移植的版本都有三個(gè)子目錄:kernel、lib和mm。kernel子目錄包含依賴于體系結(jié)構(gòu)實(shí)現(xiàn)的一般內(nèi)核功能,例如信號(hào)處理、時(shí)鐘處理等。lib子目錄包含庫(kù)函數(shù)的本地實(shí)現(xiàn),如果從依賴于體系結(jié)構(gòu)的源碼編譯,則運(yùn)行得更快。mm子目錄包含存儲(chǔ)管理實(shí)現(xiàn)的代碼。 drivers目錄 這個(gè)目錄擁有50%以上的內(nèi)核源碼,所有的驅(qū)動(dòng)程序源碼均位于該目錄之下。 fs目錄 該目錄存放所有的系統(tǒng)支持的文件系統(tǒng)的實(shí)現(xiàn)代碼。 include目錄 一些重要的頭文件。 ipc目錄 處理進(jìn)程間通信的全部所需的代碼都放在ipc目錄下。 init目錄 該目錄存放所有系統(tǒng)的初始化代碼,許多重要的文件,例如main.c就位于該目錄下。該文件還包含了許多核心代碼--比如實(shí)現(xiàn)fork()的代碼和最常執(zhí)行的代碼--cpuidle()循環(huán)。 lib目錄 該目錄放置內(nèi)核其他部分經(jīng)常所需要的代碼。例如,inflate.c就放在這里,它能夠在引導(dǎo)時(shí)解壓內(nèi)核并裝入內(nèi)存,它也知道如何解壓標(biāo)準(zhǔn)PKZIP 8位壓縮算法。 kernel目錄 許多最常調(diào)用的內(nèi)核函數(shù)放在該目錄下。調(diào)度器fork()和timer.c就放在這里。你還能在這個(gè)目錄下找到printk.c。 mm目錄 該目錄包含所有Linux實(shí)現(xiàn)虛擬內(nèi)存管理的源碼。 net目錄 所有提供網(wǎng)絡(luò)支持的代碼都放在這個(gè)目錄下。 Document目錄 該目錄存放了大量的內(nèi)核代碼相關(guān)文檔,以及用戶開發(fā)和維護(hù)手冊(cè)。 |
|
|