隨著大規(guī)模集成電路技術(shù)的不斷發(fā)展,微控制器單元MCU(Micro Controller Unit)的功能越來(lái)越強(qiáng),片上設(shè)備的集成度越來(lái)越高,MCU逐漸演變成功能更加強(qiáng)大、體積更小、功耗更低的片上系統(tǒng)SOC(System On A Chip)。隨著硬件規(guī)模的擴(kuò)大,應(yīng)用程序的規(guī)模也越來(lái)越大。原始的在MCU上的“裸奔”的程序已經(jīng)不能適應(yīng)用戶需求了,所以引入管理硬件與軟件資源的系統(tǒng)軟件就顯得是非常迫切的需求了。
Linux(發(fā)音:哩吶克斯)操作系統(tǒng)在誕生之初,是一套免費(fèi)使用和自由傳播的類Unix操作系統(tǒng),是一個(gè)基于POSIX和UNIX的多用戶、多任務(wù)、支持多線程和多CPU的操作系統(tǒng)。Linux以其旺盛的生命力,在嵌入式系統(tǒng)當(dāng)中得到了廣泛的應(yīng)用。
嵌入式Linux是將日益流行的Linux操作系統(tǒng)進(jìn)行裁剪修改,使之能在嵌入式計(jì)算機(jī)系統(tǒng)上運(yùn)行的一種操作系統(tǒng)。嵌入式Linux既繼承了Internet上無(wú)限的開(kāi)放源代碼資源,又具有嵌入式操作系統(tǒng)的特性。
下面主要介紹一下,構(gòu)建嵌入式Linux系統(tǒng),最主要的工作內(nèi)容。
在嵌入式操作系統(tǒng)中,BootLoader是在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的一種軟件。它可以簡(jiǎn)單的初始化硬件設(shè)備、建立內(nèi)存空間映射圖,從而將目標(biāo)系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適狀態(tài),以便為最終加載并引導(dǎo)操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。在嵌入式系統(tǒng)中,通常并沒(méi)有像BIOS(基本輸入輸出系統(tǒng):Basic In And Output System)那樣的固件程序(注,有的嵌入式CPU也會(huì)內(nèi)嵌一段短小的啟動(dòng)程序),因此整個(gè)系統(tǒng)的加載啟動(dòng)任務(wù)就完全由Boot Loader來(lái)完成。在嵌入式系統(tǒng)中常用的Boot Loader為U-Boot,它是一種開(kāi)源免費(fèi)的支持目標(biāo)系統(tǒng)非常多的系統(tǒng)引導(dǎo)程序。后面同大家討論這個(gè)問(wèn)題。
Linux支持的目標(biāo)系統(tǒng)平臺(tái)非常多,因此,不是所有的內(nèi)核代碼都對(duì)目標(biāo)系統(tǒng)有效。選擇合適的目標(biāo)系統(tǒng)分支確定CPU架構(gòu)是最主要的配置內(nèi)容,這樣內(nèi)核就會(huì)只保留與目標(biāo)系統(tǒng)相關(guān)的代碼。其次,由于Linux內(nèi)核實(shí)現(xiàn)了完整的操作系統(tǒng)功能,但對(duì)于特定的嵌入式系統(tǒng)來(lái)說(shuō),很多功能是不需要的,所以,在內(nèi)核配置階段還要去掉不使用的多余的功能。裁剪后的內(nèi)核能夠剛好適合目標(biāo)系統(tǒng),達(dá)到內(nèi)核代碼的體積最小、功能最優(yōu)、運(yùn)行效率最高的效果。Linux內(nèi)核是C語(yǔ)言程序設(shè)計(jì)的,裁剪并編譯后的Linux內(nèi)核映像非常小。通常來(lái)講只有幾兆字節(jié)。這么小的內(nèi)核,幾乎一般的片上系統(tǒng)都可以運(yùn)行。當(dāng)你真正的配置并使用過(guò)Linux內(nèi)核之后,你就會(huì)真正的明白它的好、正真的愛(ài)上它、用心的贊美它。
嵌入式系統(tǒng)的最大特點(diǎn)就是軟件與硬件的可裁剪性。根據(jù)項(xiàng)目要求,去除不需要的硬件電路,并保留必須的硬件設(shè)備,添加定制硬件設(shè)備。由于硬件的定制性,操作系統(tǒng)內(nèi)核也需要根據(jù)要求進(jìn)行調(diào)整。引入了Linux操作系統(tǒng),在系統(tǒng)軟件方面,開(kāi)發(fā)者只需要根據(jù)要求定制相應(yīng)設(shè)備的驅(qū)動(dòng)程序就可以了。Linux下的設(shè)備被分成塊設(shè)備、字符設(shè)備、套接字設(shè)備,構(gòu)建平臺(tái)的時(shí)候,開(kāi)發(fā)者更多的是定制字符類設(shè)備驅(qū)動(dòng)程序。
Linux操作系統(tǒng)內(nèi)核與根文件系統(tǒng)是完全獨(dú)立的兩個(gè)部分。Linux使用的根文件系統(tǒng)是以“/”作為根目錄的倒樹(shù)型的目錄結(jié)構(gòu),這個(gè)目錄結(jié)構(gòu)中有很多系統(tǒng)定義的特有目錄,如etc、home、sys、dev、proc、bin、sbin、mnt、lib等等。定制根文件系統(tǒng),要求開(kāi)發(fā)者根據(jù)需要?jiǎng)?chuàng)建目錄文件、各種腳本文件、設(shè)備文件、庫(kù)文件、指令解釋執(zhí)行文件等內(nèi)容。根文件存放在指定的存儲(chǔ)器內(nèi),內(nèi)核啟動(dòng)后,會(huì)先驅(qū)動(dòng)存儲(chǔ)設(shè)備,然后在根據(jù)預(yù)先設(shè)定的方式掛載并使用根文件系統(tǒng)。開(kāi)源的世界總會(huì)給我們不一樣的驚喜,雖然根文件系統(tǒng)內(nèi)容很多,但開(kāi)發(fā)者現(xiàn)在可以使用BusyBox工具集,只需通過(guò)簡(jiǎn)單的菜單配置,就可以輕松的定制Linux根文件系統(tǒng)了。
構(gòu)建嵌入式Linux系統(tǒng)平臺(tái),需要開(kāi)發(fā)者硬件功底非常扎實(shí),能熟練使用Linux進(jìn)行開(kāi)發(fā),同時(shí)對(duì)Linux操作系統(tǒng)結(jié)構(gòu)有一個(gè)比較清晰的認(rèn)識(shí),還有其它方面的要求,這里咱就不討論了。所以,想要從業(yè)的有志青年們,加油吧!
聯(lián)系客服