嵌入式內(nèi)核
發(fā)布時間:2019-05-22
嵌入式內(nèi)核是在嵌入式硬件和軟件之間的抽象層,它具有五個方面的作用:任務(wù)管理(Task Management)、定時(Timers)、設(shè)備I/O主管(Device I/O Supervisor)、動態(tài)存儲分配(Dynamic Memory Allocation)、任務(wù)間同步通信(Inter-task Communication&Synchronization)。嵌入式系統(tǒng)中的內(nèi)核是系統(tǒng)的核心,系統(tǒng)所有的任務(wù)及所完成的功能都是在內(nèi)核的控制之下完成的。我們可以編程,然后通過程序控制內(nèi)核完成我們所需要的工作。
一個系統(tǒng)要進(jìn)行工作要包括三部分,即
boot+
內(nèi)核+
文件系統(tǒng)。而真正內(nèi)核的東西其實很少,包括cpu初始化、
線程調(diào)度、
內(nèi)存分配、
文件系統(tǒng)、網(wǎng)絡(luò)協(xié)議棧、
驅(qū)動這些部分。在基于優(yōu)先級的調(diào)度中,內(nèi)核處理任務(wù)所需的僅僅是每個任務(wù)的
優(yōu)先級,倘若一個任務(wù)的優(yōu)先級高于另外一個任務(wù)的優(yōu)先級,那么該任務(wù)會先于另外一個任務(wù)執(zhí)行。而對于安全性要求很高的系統(tǒng),就需要利用分區(qū)調(diào)度來完成。在分區(qū)調(diào)度中,內(nèi)核要求任務(wù)分成許多組,每一個組中含有許多相關(guān)的任務(wù)。分區(qū)調(diào)度器根據(jù)一系列的時鐘窗口來執(zhí)行某個任務(wù)。每個過程中的任務(wù)只有當(dāng)時鐘窗口來臨這個任務(wù)時才開始運(yùn)行,所有過程中的其他任務(wù)在這個過程中則不能運(yùn)行。
用戶空間:應(yīng)用程序 C庫 系統(tǒng)配置文件等
內(nèi)核空間:在內(nèi)存中,用戶一般不能直接接觸到(系統(tǒng)調(diào)用接口,體系結(jié)構(gòu)相關(guān)的一些代碼等等)
其實內(nèi)核空間與用戶空間是程序執(zhí)行的兩種不同的狀態(tài),通過系統(tǒng)調(diào)用和硬件中斷能夠完成從用戶空間到內(nèi)核空間轉(zhuǎn)移。
內(nèi)核架構(gòu)
內(nèi)核架構(gòu)是有七個子系統(tǒng)組成的。
1. 系統(tǒng)調(diào)用接口模塊
4. 體系結(jié)構(gòu)相關(guān)的
子系統(tǒng)(和CPU密切相關(guān))
6. 網(wǎng)絡(luò)協(xié)議棧子系統(tǒng)
目錄文件
內(nèi)核源碼下幾個重要的目錄文件
arch目錄:arch是architecture的縮寫,內(nèi)核所支持的每種cpu體系,在該目錄下都有對應(yīng)的子目錄。每個CPU的子目錄,有進(jìn)一步分解為boot,mm,kernel等子目錄,分別包含控制系統(tǒng)引導(dǎo),內(nèi)存管理,系統(tǒng)調(diào)用等
documentation目錄:內(nèi)核的文檔(比如一些驅(qū)動的使用方法,一些內(nèi)核的更新記錄等等都是放在這個目錄里面)
drivers目錄:設(shè)備驅(qū)動程序
include目錄:內(nèi)核所需要的頭文件,與平臺無關(guān)的頭文件在include/linux子目錄下,與平臺相關(guān)的頭文件則放在相應(yīng)的子目錄中
fs目錄:存放各種文件系統(tǒng)的實現(xiàn)代碼,每個子目錄對應(yīng)一種文件系統(tǒng)的實現(xiàn),公用的源程序用于實現(xiàn)虛擬文件系統(tǒng)VFS
內(nèi)核配置編譯
內(nèi)核配置
下載解壓內(nèi)核源碼,在內(nèi)核源碼目錄下,有兩個命令可以配置內(nèi)核
2. make menuconfig: 基于文本模式的菜單型配置(這個配置方法更直觀、簡單、高效)
三個選項所代表的意義:
<*>選擇該功能,該功能會被編譯進(jìn)內(nèi)核,運(yùn)行在內(nèi)存中
<M>選中該功能,內(nèi)核模塊,不編譯進(jìn)內(nèi)核,會將相應(yīng)的模塊編譯成.O文件,然后放到相應(yīng)的目錄下存放在硬盤里面,當(dāng)要用到該功能時,內(nèi)核會把該功能加載到內(nèi)存中,不用的時候從內(nèi)存中刪除,這樣可以節(jié)省內(nèi)存,提高內(nèi)存利用率
< >本次編譯不選中該功能
內(nèi)核配置的結(jié)果:內(nèi)核配置通常是在一個已有的配置文件基礎(chǔ)上,通過修改得到新的配置文件,linux內(nèi)核提供了一系列可供參考的內(nèi)核配置文件,位于Arch/$cpu/configs
內(nèi)核編譯
X86: make bzImage
arm: make uImage ARCH=arm CROSS_COMPILE=arm-linux-
安裝內(nèi)核
內(nèi)核清理