大多數(shù)嵌入式設(shè)備都是為了在通常資源受限或低規(guī)格的設(shè)備上執(zhí)行特定任務(wù)而構(gòu)建的。
因此,大多數(shù)嵌入式開發(fā)人員需要去除不必要的庫和模塊,并為其特定設(shè)備和用例創(chuàng)建自定義分發(fā)。我們先來了解一下嵌入式 Linux
系統(tǒng)有哪些組件。
引導(dǎo)加載程序
從技術(shù)上講,它位于系統(tǒng)之外,其運(yùn)行方式與首先運(yùn)行 BIOS
的臺(tái)式機(jī)或服務(wù)器系統(tǒng)不同。在嵌入式系統(tǒng)上,硬件啟動(dòng)負(fù)責(zé)基本初始化和執(zhí)行內(nèi)核的引導(dǎo)加載程序。在嵌入式系統(tǒng)上,這可以通過以下方式處理:GRUB、LILO 或 Das
U-Boot。后者專門用于嵌入式設(shè)備。
Linux內(nèi)核
包含進(jìn)程和內(nèi)存管理、網(wǎng)絡(luò)堆棧、設(shè)備驅(qū)動(dòng)程序,并為任何用戶空間應(yīng)用程序提供服務(wù)。引導(dǎo)加載程序?qū)?nèi)核加載到內(nèi)存中并運(yùn)行它。內(nèi)核尋找首先運(yùn)行的“init”程序。
“Init”程序負(fù)責(zé)啟動(dòng)其他服務(wù),例如硬件驅(qū)動(dòng)程序、文件系統(tǒng)驅(qū)動(dòng)程序、文件系統(tǒng)掛載、服務(wù)和其他應(yīng)用程序。內(nèi)核只知道 init
程序,如果找不到它,就會(huì)“內(nèi)核崩潰”。
嵌入式系統(tǒng)上的內(nèi)核與臺(tái)式機(jī)等大型系統(tǒng)中的內(nèi)核相同。主要區(qū)別在于嵌入式 Linux 內(nèi)核專為在不同的 CPU
架構(gòu)上運(yùn)行而構(gòu)建。
根文件系統(tǒng)
根文件系統(tǒng)包含 C 庫和 Linux
服務(wù)/命令,以及其他必要的腳本。在嵌入式開發(fā)中,文件系統(tǒng)是內(nèi)核和用戶空間應(yīng)用程序之間的接口。在初始化時(shí),內(nèi)核將每個(gè)程序加載到內(nèi)存中,并希望將它們組織到文件和目錄中。這是根文件系統(tǒng),應(yīng)該提前創(chuàng)建并掛載到“/”,然后內(nèi)核才能啟動(dòng)“init”。
用戶空間
用戶空間是任何自定義應(yīng)用程序或服務(wù)所在的地方。 init
程序還負(fù)責(zé)將這些加載到內(nèi)存中。大多數(shù)嵌入式系統(tǒng)都是執(zhí)行特定功能的單一用途應(yīng)用程序,因此嵌入式系統(tǒng)上的應(yīng)用程序往往是精簡和最小化的。在目標(biāo)嵌入式處理器上運(yùn)行
Linux 需要至少 8MB 的 RAM,大多數(shù)應(yīng)用程序至少需要 32MB 的 RAM。 RAM 的實(shí)際要求取決于你的嵌入式應(yīng)用程序的大小。除了 RAM
之外,還需要至少 4MB 的存儲(chǔ)內(nèi)存。它可以是以下類型之一:NAND 或 NOR 閃存、SD 或 MMC 卡。
主板支持包
主板支持包包含驅(qū)動(dòng)程序和其他軟件,它們與你正在運(yùn)行的特定硬件和操作系統(tǒng)相連接。 對(duì)于 Linux
系統(tǒng),每種電路板類型都有自己的一組 BSP。在嵌入式開發(fā)某些情況下,如果你需要硬件來執(zhí)行默認(rèn) BSP
中未包含的特定功能,你可能需要自定義這些并編寫你自己的驅(qū)動(dòng)程序來支持你的特定應(yīng)用程序。