Linux內(nèi)核源碼樹(shù)介紹
Linux內(nèi)核簡(jiǎn)介
Linux是一種開(kāi)源的操作系統(tǒng)內(nèi)核。它是一個(gè)用C語(yǔ)言寫(xiě)成,符合POSIX標(biāo)準(zhǔn)的類(lèi)Unix操作系統(tǒng)。Linux最早是由芬蘭大學(xué)生Linus Torvalds于1991年開(kāi)發(fā)的一款全新的操作系統(tǒng)。那時(shí),作為芬蘭赫爾辛基大學(xué)的一名學(xué)生的linus,正為不能隨心所欲使用強(qiáng)大而自由的Unix系統(tǒng)而苦惱。Linus熱衷于使用Minix,一種教學(xué)用的廉價(jià)Unix,但是,他不能輕易修改和發(fā)布該系統(tǒng)的源代碼,也不能對(duì)Minix開(kāi)發(fā)者所作的設(shè)計(jì)進(jìn)行修改,基于此linus開(kāi)始了開(kāi)發(fā)自己的操作系統(tǒng),并于1991年年底在internet上發(fā)布了早期版本,由此Linux內(nèi)核誕生。Linux內(nèi)核的主要功能有以下幾個(gè)方面:存儲(chǔ)管理、CPU和進(jìn)程管理、文件系統(tǒng)、設(shè)備管理和驅(qū)動(dòng)、網(wǎng)絡(luò)通信,以及系統(tǒng)的初始化、系統(tǒng)調(diào)用等。
獲取Linux內(nèi)核源碼
通過(guò)Linux內(nèi)核官網(wǎng)www.kernel.org下載自己需要的Linux內(nèi)核源碼,筆者下載的是4.14版本的源碼。
Linux內(nèi)核源碼樹(shù)展示
Linux內(nèi)核源碼目錄和文件介紹
了解Linux內(nèi)核源碼各個(gè)目錄和文件的作用,對(duì)于我們以后進(jìn)行Linux內(nèi)核源碼閱讀和Linux內(nèi)核編程大有益處。
arch目錄
arch是architecture的縮寫(xiě),所有與體系結(jié)構(gòu)相關(guān)的代碼都在這個(gè)目錄,Linux支持的每種體系結(jié)構(gòu)在arch目錄下都有對(duì)應(yīng)的子目錄,例如arm子目錄是arm32位體系相關(guān)代碼,arm64子目錄是arm64位體系相關(guān)代碼,x86子目錄是intel x86體系相關(guān)代碼。每個(gè)體系結(jié)構(gòu)子目錄下又包含和啟動(dòng)相關(guān)的代碼目錄boot,和內(nèi)核配置相關(guān)的代碼目錄configs,和體系結(jié)構(gòu)相關(guān)的頭文件目錄include,和具體體系結(jié)構(gòu)相關(guān)的內(nèi)存管理代碼目錄mm等。
block目錄
塊設(shè)備驅(qū)動(dòng)所在目錄。塊設(shè)備是以數(shù)據(jù)塊方式發(fā)送和接收數(shù)據(jù)的設(shè)備。
certs目錄
認(rèn)證相關(guān)的一些代碼實(shí)現(xiàn)。
crypto目錄
內(nèi)核本身所用的加密API,實(shí)現(xiàn)了常用的加密和散列算法,還有一些壓縮和CRC校驗(yàn)算法。例如SHA1加密算法的代碼。
Documentation目錄
內(nèi)核幫助文檔目錄,是學(xué)習(xí)內(nèi)核了解內(nèi)核實(shí)現(xiàn)機(jī)制的重要途徑,關(guān)于內(nèi)核的一些說(shuō)明信息,在這個(gè)目錄下會(huì)有幫助手冊(cè)。
drivers目錄
各種設(shè)備驅(qū)動(dòng)代碼、驅(qū)動(dòng)架構(gòu)代碼所在目錄,這個(gè)目錄是內(nèi)核中最龐大的一個(gè)目錄,內(nèi)核源碼數(shù)量的一半以上都是這個(gè)目錄貢獻(xiàn)的。顯卡、網(wǎng)卡、SCSI適配器、PCI總線、USB總線和其他任何Linux支持的外圍設(shè)備或總線的驅(qū)動(dòng)程序都可以在這兒找到。
firmware目錄
fireware中包含了讓計(jì)算機(jī)讀取和理解從設(shè)備發(fā)來(lái)的信號(hào)的代碼。舉例來(lái)說(shuō),一個(gè)攝像頭管理它自己的硬件,但計(jì)算機(jī)必須了解攝像頭給計(jì)算機(jī)發(fā)送的信號(hào)。Linux系統(tǒng)會(huì)使用vicam固件(firmware)來(lái)理解攝像頭的通訊。否則,沒(méi)有了固件,Linux系統(tǒng)將不知道如何處理攝像頭發(fā)來(lái)的信息。另外,固件同樣有助于將Linux系統(tǒng)發(fā)送消息給該設(shè)備。這樣Linux系統(tǒng)可以告訴攝像頭重新調(diào)整或關(guān)閉攝像頭。
fs目錄
虛擬文件系統(tǒng)(VFS)的代碼和各種不同類(lèi)型的文件系統(tǒng)的代碼都在這個(gè)目錄中。Linux支持的所有文件系統(tǒng)在fs目錄下面都有一個(gè)對(duì)應(yīng)的子目錄。比如ext4文件系統(tǒng)對(duì)應(yīng)的是fs/ext4目錄,fat文件系統(tǒng)對(duì)應(yīng)的是fs/fat目錄。一個(gè)文件系統(tǒng)是存儲(chǔ)設(shè)備和需要訪問(wèn)存儲(chǔ)設(shè)備的進(jìn)程之間的媒介。存儲(chǔ)設(shè)備可能是本地的物理上可以訪問(wèn)的設(shè)備,比如硬盤(pán)、U盤(pán)、Flash,他們分別使用系統(tǒng)ext4/UBIFS文件系統(tǒng)。還有一些虛擬文件系統(tǒng),比如proc、sysfs等,他們以一個(gè)標(biāo)準(zhǔn)文件系統(tǒng)出現(xiàn)。然而,他們的文件只存在于內(nèi)存中,并不占磁盤(pán)空間。
include目錄
這個(gè)目錄包含了內(nèi)核中大部分的頭文件,按照不同的功能分散在不同的子目錄下。例如與平臺(tái)相關(guān)的頭文件在/include/linux子目錄下。
init目錄
內(nèi)核的初始化代碼。包括main.c、創(chuàng)建早期用戶(hù)空間的代碼及其他初始化代碼。do_mounts.c內(nèi)核啟動(dòng)后掛載根文件系統(tǒng)。
ipc目錄
IPC(進(jìn)程間通信)。它包含了共享內(nèi)存、信號(hào)量、消息隊(duì)列及其他形式的IPC代碼。
kernel目錄
內(nèi)核中核心的部分,包括進(jìn)程的調(diào)度(sched.c),以及進(jìn)程的創(chuàng)建和撤銷(xiāo)(fork.c和exit.c)等。
lib目錄
此目錄包含了核心的庫(kù)代碼。實(shí)現(xiàn)了一個(gè)標(biāo)準(zhǔn)C庫(kù)的通用子集,包括字符串和內(nèi)存操作的函數(shù)(strlen、mmcpy)以及有關(guān)sprintf和atoi系列函數(shù)。
mm目錄
此目錄包含了與體系結(jié)構(gòu)無(wú)關(guān)的部分內(nèi)存管理代碼。與體系結(jié)構(gòu)相關(guān)的內(nèi)存管理代碼位于arch目錄相對(duì)應(yīng)的子目錄下的mm目錄。
net目錄
核心的網(wǎng)絡(luò)部分代碼,實(shí)現(xiàn)了各種常見(jiàn)的網(wǎng)絡(luò)協(xié)議,如TCP/IP。
samples目錄
一些內(nèi)核編程的范例。
scripts目錄
該目錄下沒(méi)有內(nèi)核代碼,只是包含了用來(lái)配置內(nèi)核的腳本文件。當(dāng)運(yùn)行make menuconfig之類(lèi)的命令配置內(nèi)核時(shí),用戶(hù)就是和位于這個(gè)目錄下的腳本進(jìn)行交互的。
security目錄
這個(gè)目錄下包含了不同的Linux安全模型的代碼。它對(duì)計(jì)算機(jī)免于受到病毒和黑客的侵害很重要。包括SELinux安全模塊。
sound目錄
ALSA,OSS音頻設(shè)備的驅(qū)動(dòng)核心代碼和常用設(shè)備驅(qū)動(dòng)。
tools目錄
這個(gè)文件夾中包含了和內(nèi)核交互的工具。
usr目錄
實(shí)現(xiàn)了用于打包和壓縮的cpio等。
virt目錄
內(nèi)核虛擬化相關(guān)的代碼。包括kvm等。
COPYING文件
許可和授權(quán)信息。Linux內(nèi)核在GPLv2許可證下授權(quán)。該許可證授予任何人有權(quán)免費(fèi)去使用、修改、分發(fā)和共享源代碼和編譯代碼。
CREDITS文件
貢獻(xiàn)者列表
Kbuild文件
這是一個(gè)設(shè)置一些內(nèi)核設(shè)定的腳本。例如設(shè)定一個(gè)ARCH變量,這是開(kāi)發(fā)者想要生成的內(nèi)核支持的處理器類(lèi)型。
Kconfig文件
這個(gè)腳本會(huì)在開(kāi)發(fā)人員配置內(nèi)核的時(shí)候用到。
MAINTAINERS文件
這是一個(gè)目前維護(hù)者列表,他們的電子郵件地址,主頁(yè),和他們負(fù)責(zé)開(kāi)發(fā)和維護(hù)的內(nèi)核的特定部分或文件。這是內(nèi)核問(wèn)題反饋的途徑。
Makefile文件
這個(gè)腳本是編譯內(nèi)核的主要文件。這個(gè)文件將編譯參數(shù)和編譯所需的文件和必要的信息傳給編譯器。
README文件
這個(gè)文檔提供給開(kāi)發(fā)者想要知道的如何編譯內(nèi)核的信息。
總結(jié)
本文簡(jiǎn)要介紹了Linux內(nèi)核源碼樹(shù)下各個(gè)目錄的作用,以及它們主要實(shí)現(xiàn)了哪些功能,是我們以后進(jìn)行Linux內(nèi)核開(kāi)發(fā)的基礎(chǔ)。
評(píng)論