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

Linux 核心--15.Linux內(nèi)核資源

第十四章 Linux核心資源

本章主要描敘尋找某個(gè)特殊核心函數(shù)時(shí)用到的Linux核心資源 。

本書并不要求讀者具有C編程語言的能力或者擁有Linux核心源代碼來理解Linux核心工作原理 。但是如果 對(duì)核心源代碼進(jìn)行閱讀將加深對(duì)Linux操作系統(tǒng)的理解 。本章提供了一個(gè)核心源代碼的綜述 。


從哪里得到Linux核心源碼
所有主要Linux分發(fā)版本(如Craftworks,Debian,Slackware,Redhat)都包含了源碼在內(nèi) 。通常安裝在 你的Linux系統(tǒng)核心就是從這些源碼中構(gòu)造出來的 。由于一些顯然的因素,這些源碼都或多或少有點(diǎn)過期 。你可以在www-appendix一章中的那些WEB站點(diǎn)中得到最新的版本 。這些站點(diǎn)包括ftp://ftp.cs.helsinki.fi 以及所有其他鏡象站點(diǎn)中 。helsinki的這個(gè)WEB站點(diǎn)上的Linux源碼顯然是最新的但是MIT和Sunsite中的也 不會(huì)差太遠(yuǎn) 。
如果你無法訪問這些WEB站點(diǎn),有許多CD ROM廠商以非常合理的價(jià)格提供了這些WEB站點(diǎn)的鏡象光盤 。有些 廠商還提供每季度甚至每個(gè)月更新的訂購(gòu)服務(wù) 。另外你所在的本地Linux用戶組也是一個(gè)很好的資源 。

Linux核心代碼的版本編號(hào)很簡(jiǎn)單 。任何偶數(shù)編號(hào)的核心(如2.0.30)都是穩(wěn)定的發(fā)行版而記數(shù)編號(hào)的核心?。ㄈ?.1.42)都是正在開發(fā)的核心 。本書基于穩(wěn)定的2.0.30版本 。開發(fā)版的核心具有所有最新的特征并支持 最新的設(shè)備 。盡管它們不是你所希望的那樣穩(wěn)定,但是對(duì)于Linux用戶團(tuán)體來說試用新核心是非常重要的 。因?yàn)樗麄儗⑼瓿蛇@些評(píng)測(cè)工作 。當(dāng)試用非發(fā)行版本核心時(shí)備份系統(tǒng)總是有好處的 。

核心的修改以patch文件來分發(fā) 。而patch實(shí)用程序被用來對(duì)一些核心源碼進(jìn)行編輯 。例如如果現(xiàn)在你已經(jīng) 有了2.0.39的核心代碼但是你想升級(jí)到2.0.30,那么你在取得2.0.30補(bǔ)丁文件后可以實(shí)用以下命令來修改 現(xiàn)存核心:


$ cd /usr/src/linux
$ patch -p1 < patch-2.0.30

一個(gè)收集核心補(bǔ)丁的站點(diǎn)是http://www.linuxhq.com 。


核心源碼的組織
核心源碼的頂層是/usr/src/linux目錄,在此目錄下你可以看到大量子目錄:

arch
這個(gè)子目錄包含了所有體系結(jié)構(gòu)相關(guān)的核心代碼 。它還包含每種支持的體系結(jié)構(gòu)的子目錄,如i386 。
include
這個(gè)目錄包括了用來重構(gòu)核心的大多數(shù)include文件 。對(duì)于每種支持的體系結(jié)構(gòu)分別有一個(gè)子目錄 。此目錄中的asm子目錄中是對(duì)應(yīng)某種處理器的符號(hào)連接,如include/asm-i386 。要修改處理器結(jié)構(gòu) 則只需編輯核心的makefile并重新運(yùn)行Linux核心配置程序 。
init
此目錄包含核心啟動(dòng)代碼 。
mm
此目錄包含了所有的內(nèi)存管理代碼 。與具體體系結(jié)構(gòu)相關(guān)的內(nèi)存管理代碼位于arch/*/mm目錄下, 如arch/i386/mm/fault.c。
drivers
系統(tǒng)中所有的設(shè)備驅(qū)動(dòng)都位于此目錄中 。它又進(jìn)一步劃分成幾類設(shè)備驅(qū)動(dòng),如block 。
ipc
此目錄包含了核心的進(jìn)程間通訊代碼 。
modules
此目錄僅僅包含已建好的模塊 。
fs
所有的文件系統(tǒng)代碼 。它也被劃分成對(duì)應(yīng)不同文件系統(tǒng)的子目錄,如vfat和ext2 。
kernel
主要核心代碼 。同時(shí)與處理器結(jié)構(gòu)相關(guān)代碼都放在arch/*/kernel目錄下 。
net
核心的網(wǎng)絡(luò)部分代碼 。
lib
此目錄包含了核心的庫(kù)代碼 。與處理器結(jié)構(gòu)相關(guān)庫(kù)代碼被放在arch/*/lib/目錄下 。
scripts
此目錄包含用于配置核心的腳本文件(如awk和tk腳本) 。

從哪里入手
閱讀象Linux核心代碼這樣的復(fù)雜程序令人望而生畏 。它象一個(gè)越滾越大的雪球 。閱讀核心某個(gè)部分經(jīng)常要 用到好幾個(gè)其他的相關(guān)文件,不久你將會(huì)忘記你原來在干什么 。本小節(jié)將給出一些提示 。

系統(tǒng)啟動(dòng)與初始化
在基于intel的系統(tǒng)上,Linux可以通過loadlin.exe或者LILO將核心載入內(nèi)存并將控制傳遞給它 。這部分程序 位于arch/i386/kerneld/head.S 。此文件完成一些處理器相關(guān)操作并跳轉(zhuǎn)到init/main.c中的main()例程 。

推薦閱讀