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