linux 核心學習(2)

2021-04-13 22:50:16 字數 2417 閱讀 6662

linux核心原始碼樹大體結構

由於linux的原**持續在變化,所以不可能給出太詳細的內容,只能指出乙個特殊的驅動大概會出現在什麼地方。

makefile

這是整個的原始碼樹的最頂層的makefile。它定義了很多的有用的變數和規則,如預設的gcc編譯標誌。

arch/

所有的特殊的體系結構的**都在這個目錄和include/a**-目錄下。每個體系在這個目錄下都有自己的目錄。像基於powerpc的計算機的**可以在arch/ppc目錄下找到。你將會在這些目錄下找到低階的記憶體管理,中斷處理,早期初始化,匯程式設計序等很多東西。

crypto/

用於核心自身加密的api。

drivers/

大體上,在這個目錄的子目錄下驅動外設的**。其中包括了顯示卡驅動,網絡卡驅動,低階的scsi驅動等相似的東西。一些將所有同一類的驅動整合的高層次的**可能與低層次的驅動不在同乙個目錄下。

fs/一般的檔案系統的**(也就是vfs,或者虛擬檔案系統)和其他不同的檔案系統的**都可以在這個目錄下找到。你的根檔案系統可能是ext2的,用來閱讀ext2格式的**在fs/ext2下。不是所有的檔案系統被編譯和執行,並且更晦澀的檔案系統常常是那些在尋找核心工程的不錯的候選者。

include/

大部分的在乙個.c檔案的開頭被包含的標頭檔案都能在這個目錄中找到。體系結構的include檔案在a**-目錄下。部分核心構建是建立了軟從a**到a**-的軟鏈結,所以#include將會得到適和與體系結構的檔案,而編碼到.c檔案中。另外的一些目錄包含了沒有特殊的體系構架的標頭檔案。如果乙個結構,常量或者變數被幾個.c檔案使用,那麼他可能在其中的乙個標頭檔案中。

init/

這個目錄下包含了檔案main.c,version.c,和用來建立早期的使用者空間(userspace)的**。version.c定義了linux的版本的字串。main.c可以被認為是核心的黏合劑。早期的使用者空間提供了當核心啟動時可用但是不需要在核心內部執行的功能。

ipc/

"ipc"是程序間的通訊的意思。這個目錄包含了共享記憶體,訊號量和其他形式的ipc的**。

kernel/

一般的核心級別不適合其他地方的**都在這裡。較高層次的系統呼叫在這兒,printk,排程,訊號處理**等等。

lib/

對所有核心**同樣有用的常規性**被放在這裡。一般的字串操作,debugging例程和命令列語法分析的**都在這兒。

mm/在這個目錄中是高階的記憶體管理的**。虛擬記憶體(vm)是通過這些例程聯合在arch//mm/中的特定的對應體系結構的低層的體系結構的例程來實現。前期的引導記憶體管理,檔案記憶體對映,頁快取管理,記憶體分配,ram中頁面的替換等等也是在這裡實現的

net/

高層次的聯網的**被放在這裡。低層的網路驅動將接收到的包向上傳遞並且把這一層發出的包打包。這一層次可能將資料傳遞到使用者層次的運用,或丟棄資料,或在核心內部使用,這些取決於相應的包。

scripts/

這個目錄包含了用來構建核心的有用的指令碼,其中不包含任何結合進入核心的**。比如各種配置工具把他們的指令碼放在這裡。

security/

這裡放了linux中的不同的加密模組,像nsa提高linux的安全和套接字和網路安全檢查hooks

sound/

音效卡的驅動和其他的一些與聲音相關的**被放在這兒。

usr/

這個目錄包含了構建包含了乙個可用做早期的使用者空間的根檔案系統映象cpio格式的歸檔的**。

整個的linux核心的中心結合點是檔案init/main.c。每個體系執行了一些底層次的設定函式之後執行在init/main.c中的start_kernel函式。

**的執行順序如下圖

特定體系的設定**(在arch//*)|v

函式start_kernel()(在init/main.c)|v

函式init()(在/init/main.c)|v

使用者層次的"init"程式。

特定體系結構的設定的**實現了:

如果必要,開啟並移動核心**。

初始化硬體

可能包含設定低層次的記憶體管理。

將控制權轉交到函式start_kernel()

start_kernel()所作的:

列印核心的版本和命令列

開始輸出到開始輸出到控制台

允許中斷

校準延時迴圈。

呼叫rest_init(),rest_init()功能:

開始乙個核心執行緒來執行init()函式。

進入空迴圈

init():

啟動另乙個處理器(在一台**p機器上)

啟動設配子系統

掛載根檔案系統

釋放未使用的核心記憶體

執行/sbin/init(或 /etc/init)

執行到這裡,使用者級的init程式已經在執行了,他會作一些類似啟動網路服務和在控制台執行getty。

注:有些地方是翻譯的,意思可能表達的有點問題,還望多多指教。

linux核心學習筆記2

選擇符用來查詢段描述符的,其中有一位會標明是去全域性描述符表中查詢還是去區域性描述符表中查詢。實模式下 直接在段暫存器中存放段基位址。每乙個段暫存器 即選擇符 都有乙個高速緩衝暫存器,為了加快訪問速度。為了避免每次儲存器訪問時,都要訪問描述符表,讀取描述符並對段進行解碼得到描述符本身的各種資訊,每個...

Linux核心學習

交叉工具鏈 核心相關知識 linux系統的構成 使用者空間 核心空間 思考 為什麼劃分為兩個層次?目的其實是為保護作業系統,防止應用程式的異常導致作業系統崩潰。核心空間與使用者空間是程式執行的兩種不同狀態,通過系統呼叫和硬體中斷能夠完成從使用者空間到核心空間的轉移。那麼linux的核心由哪些構成呢?...

linux 核心學習

linux核心獲取 官網 linux作業系統的核心是模組化,可以使用lsmod命令檢視核心模組,下面展示已載入系統的模組 root 172.16.0.55 vendor composer test lsmod module size used by nfnetlink queue 8111 0 nf...