在上一期中,我們介紹了linux核心發展的歷史,也介紹了與其相關的unix和gnu的相關知識。從這一期開始,我們將介紹linux核心的原始碼結構。我們將先根據linux原始碼的目錄結構進行分析,到本文章發布前,linux 4.19的最新版本為linux 4.19.94,我們將依據openeuler開源社群原始碼並參考linux 4.19.94版核心原始碼進行分析。
下圖列出了截至文章發表前openeuler開源社群kernel目錄下的目錄結構[5]:
其中各個資料夾中源**的功能如下表所示[1][3]:
目錄/檔名原始碼功能簡介
/documentation
說明文件,對每個目錄的具體作用進行說明。
/arch
不同cpu架構下的核心**。其中的每乙個子目錄都代表linux支援的cpu架構。
/block
塊裝置通用函式。
/certs
與證書相關。
/crypto
常見的加密演算法的c語言實現**,譬如crc32、md5、sha1等。
/drivers
核心中所有裝置的驅動程式,其中的每乙個子目錄對應一種裝置驅動。
/include
核心編譯通用的標頭檔案。
/init
核心初始化的核心**。
/ipc
核心中程序間的通訊**。
/kernel
核心的核心**,此目錄下實現了大多數linux系統的核心函式。與處理器架構相關的核心**在/kernel/$arch/kernel
。
/lib
核心共用的函式庫,與處理器架構相關的庫在/kernel/$arch/lib
。
/mm
記憶體管理**,譬如頁式儲存管理記憶體的分配和釋放等。與具體處理器架構相關的記憶體管理**位於/arch/$arch/mm
目錄下。
/net
網路通訊相關**。
/samples
示例**。
/scripts
用於核心配置的指令碼檔案,用於實現核心配置的圖形介面。
/security
安全性相關的**。
/sound
與音訊有關的**,包括與音訊有關的驅動程式[2]。
/tools
linux中的常用工具。
/usr
該目錄中的**為核心尚未完全啟動時執行使用者空間**提供了支援。
/virt
此資料夾包含了虛擬化**,它允許使用者一次執行多個作業系統。
copying
許可和授權資訊。
credits
貢獻者列表。
kbuild
核心設定指令碼,可以對核心中的變數進行設定。
kconfig
配置哪些檔案編譯,那些檔案不用編譯[4]。
makefile
該檔案將編譯引數、編譯所需的檔案和必要的資訊傳給編譯器。
本期我們根據openeuler的目錄,並參考linux目錄結構簡要介紹了openeuler kernel中各個子目錄的功能,下一期我們將結合linux 核心的kernel map介紹linux核心的基本功能和抽象層級。
參考文獻
[1][2]
[3][4]
[5]
第五期c語言答案
輸入兩個字串,從第一字串中刪除第二個字串中所有的字元,例如,輸入 they are students 和 aeiou 則刪除之後的第乙個字串變成 thy r studnts 編寫乙個函式,求乙個數字是否是回文數,回文數的概念 給定乙個數,這個數順讀和逆讀都是一樣的,例如 121,1221是回文數,1...
程式筆記 第五期 你好,NOIP
解釋一下 這篇 blog 不是我自發地要寫的,因此可能會有點水,不要在意 老師讓程式設計社的全體學員在這noip的暴風雨來臨之前的寧靜中寫下了這一篇blog,就這樣,數篇世界級的水部落格誕生了!然後再說一下,本來這篇 blog 是準備在noip開始之前寫好給自己打打底氣的,不過現在看來好像沒有什麼用...
《收穫》 06年第五期 太糟了
這個週末把這一期的 收穫 2006年第五期,總第181期 看完了。最近幾期的內容糟糕透了。今年每一期 收穫 買回來,我基本是先看李輝的 封面中國 隨著敘事的時間線逐漸逼近 1949 年,李輝下筆也多有收攏,總有種言猶未盡的感覺。還好,這是 收穫 還值得看的乙個欄目。本期的長篇是 土豆網的王微 的 等...