方 帆
(巢湖學(xué)院 教務(wù)處, 安徽 巢湖 238000)
隨著半導(dǎo)體技術(shù)的不斷進(jìn)步[1],嵌入式處理器的性能日益提高,嵌入式平臺上可管理的硬件資源也隨之增加.若仍采用基于處理器直接編程的模式進(jìn)行嵌入式系統(tǒng)的開發(fā),需了解硬件平臺底層結(jié)構(gòu),增加了開發(fā)難度;若在硬件平臺上引入嵌入式操作系統(tǒng)對各種硬件進(jìn)行管理,并為用戶提供硬件操作接口和編程接口[2],則可大大降低設(shè)計(jì)人員的工作強(qiáng)度,優(yōu)化系統(tǒng)軟件結(jié)構(gòu),提高嵌入式系統(tǒng)開發(fā)的便捷性和靈活性.
Linux是遵循通用公共許可證GPL協(xié)議的開源操作系統(tǒng)[3],因其代碼可靠性高,內(nèi)核可根據(jù)需要任意裁剪,支持大部分的32位、64位CPU和大部分網(wǎng)絡(luò)通信協(xié)議等諸多優(yōu)勢而被廣泛應(yīng)用于嵌入式系統(tǒng).目前已有很多文獻(xiàn)和技術(shù)文檔介紹Linux操作系統(tǒng)在ARM9、ARM11甚至最新的Cortex-A系列處理器上的移植[4-6].目前很多高校設(shè)計(jì)的嵌入式系統(tǒng)課程,對嵌入式系統(tǒng)的開發(fā)仍采用基于處理器直接編程的開發(fā)模式,缺乏嵌入式系統(tǒng)課程所需的科學(xué)性和先進(jìn)性.本實(shí)驗(yàn)從嵌入式系統(tǒng)課程的實(shí)踐教學(xué)需求出發(fā),以ARM9架構(gòu)的32位系統(tǒng)級芯片S3C2440A為硬件平臺核心,進(jìn)行嵌入式Linux操作系統(tǒng)的移植實(shí)驗(yàn)設(shè)計(jì),使學(xué)生深入理解Linux操作系統(tǒng)的內(nèi)核架構(gòu),掌握嵌入式Linux應(yīng)用開發(fā)平臺的構(gòu)建方法,有效提高學(xué)生的實(shí)踐動手能力和創(chuàng)新能力.
本實(shí)驗(yàn)選用友善之臂公司的Micro2440開發(fā)板作為嵌入式Linux系統(tǒng)移植實(shí)驗(yàn)的硬件平臺.該開發(fā)板采用三星公司的S3C2440A微處理器作為CPU,S3C2440 A是基于ARM920T核設(shè)計(jì)的嵌入式微處理器,主頻為400 MHz[7],具有低功耗、高集成度、片內(nèi)資源豐富等特點(diǎn),支持ARM-Linux、WindowsCE5.0/6.0等多種操作系統(tǒng),被廣泛應(yīng)用于手持?jǐn)?shù)碼設(shè)備.硬件平臺環(huán)境如圖1所示.平臺的主要硬件資源有64 MB的SDRAM、2 MB的NOR FLASH、256 MB的NAND FLASH,提供多個串口、USB接口和1個RJ-45接口,支持JTAG調(diào)試[8],為便于后續(xù)實(shí)驗(yàn)進(jìn)行圖形用戶界面Qtopia的移植,還配備了3.5寸的TFTLCD.
嵌入式系統(tǒng)的開發(fā)需采用交叉開發(fā)環(huán)境[9],即編寫、編譯和鏈接軟件采用的開發(fā)環(huán)境與軟件的運(yùn)行環(huán)境不同,通常采用宿主機(jī)-目標(biāo)機(jī)開發(fā)模式[10],如圖2所示.采用通用PC機(jī)作為宿主機(jī),在宿主機(jī)上通過虛擬軟件機(jī)安裝并運(yùn)行Linux系統(tǒng),在Linux環(huán)境下使用交叉編譯工具對引導(dǎo)加載程序、嵌入式Linux內(nèi)核進(jìn)行編譯,并構(gòu)建文件系統(tǒng),編譯成功后將鏡像文件通過串口和網(wǎng)絡(luò)下載到目標(biāo)機(jī)的FLASH存儲器中,并上電運(yùn)行.
交叉編譯環(huán)境的搭建包括以下步驟:
(1) Linux的安裝.安裝Linux通常有兩種方法:硬盤直接安裝和虛擬機(jī)安裝[2].目前普遍的做法是安裝虛擬機(jī),利用虛擬機(jī)軟件安裝新的操作系統(tǒng),對原有Windows系統(tǒng)沒有影響,便于進(jìn)行實(shí)驗(yàn)開發(fā).常用的虛擬機(jī)軟件有VMware和Virtual PC.本實(shí)驗(yàn)要求學(xué)生先安裝VMware軟件,新建并配置一個新的虛擬機(jī),給虛擬機(jī)安裝Linux操作系統(tǒng).由于在嵌入式系統(tǒng)開發(fā)過程中需要根用戶root權(quán)限支持,因此在命令行執(zhí)行$sudo su,以保證本實(shí)驗(yàn)所有的配置操作和命令行編譯均在根用戶root下進(jìn)行.
(2) 安裝Linux開發(fā)工具鏈.在Linux平臺下,為進(jìn)行交叉編譯,需安裝源碼編譯交叉工具鏈或二進(jìn)制工具鏈,建立GUN交叉開發(fā)環(huán)境.安裝二進(jìn)制文件方式對編譯器各組成部件的版本號要求較高,因此本實(shí)驗(yàn)使用源碼編譯方式.在官網(wǎng)下載arm-linux-gcc-4.3.2版本交叉編譯工具進(jìn)行源程序的編譯.gcc編譯器適用于多種硬件平臺,通過調(diào)用軟件對源代碼進(jìn)行預(yù)處理、編譯、鏈接等操作,生成完整的可執(zhí)行文件.
(3) 安裝Minicom仿真終端.在Linux環(huán)境下利用交叉編譯環(huán)境對目標(biāo)機(jī)進(jìn)行調(diào)試,命令的輸入和結(jié)果的輸出通常采用串口工具.Linux下的串口通信使用最廣泛的工具是Minicom仿真終端——一個串口通信工具,可用于串口設(shè)備的通信,具有強(qiáng)大的功能.
嵌入式系統(tǒng)軟件體系架構(gòu)如圖3所示.其中,基于嵌入式Linux的系統(tǒng)軟件由3部分組成:系統(tǒng)引導(dǎo)程序、嵌入式Linux內(nèi)核和文件系統(tǒng)[11].引導(dǎo)程序Bootloader在硬件層之上,高度依賴嵌入式平臺上的硬件,需用戶根據(jù)嵌入式平臺所采用的處理器架構(gòu)和硬件電路結(jié)構(gòu)進(jìn)行設(shè)計(jì),是用于對硬件平臺進(jìn)行初始化和引導(dǎo)操作系統(tǒng)內(nèi)核啟動的程序,根據(jù)所需實(shí)現(xiàn)的功能Bootloader大小一般為幾KB至100 KB.嵌入式Linux內(nèi)核是操作系統(tǒng)的核心,具備操作系統(tǒng)的基本功能,包括進(jìn)程調(diào)度、內(nèi)存管理、設(shè)備管理、網(wǎng)絡(luò)接口和進(jìn)程通信等,其大小為400 KB至900 KB.文件系統(tǒng)主要用于存儲用戶應(yīng)用程序、系統(tǒng)配置文件、系統(tǒng)程序和部分驅(qū)動程序,其大小取決于用戶設(shè)計(jì)的應(yīng)用程序規(guī)模,從幾百KB至幾MB不等.
隨著航天發(fā)射場規(guī)劃建設(shè)水平的不斷提高,發(fā)射場的發(fā)展進(jìn)入了一個新時期,必然呼喚與之適應(yīng)的設(shè)備體系.發(fā)射場機(jī)械設(shè)備推進(jìn)“三化”(通用化、系列化、組合化),實(shí)現(xiàn)特種設(shè)備的裝備化管理成為了發(fā)射場建設(shè)的新目標(biāo).模塊化設(shè)計(jì)的總體目標(biāo)是以較少的資源滿足多樣化的需求,將可靠性、維修性和保障性為核心的先進(jìn)理念應(yīng)用于設(shè)計(jì)階段,實(shí)現(xiàn)發(fā)射場機(jī)械設(shè)備的頂層規(guī)劃和一體化規(guī)劃.依據(jù)變型設(shè)計(jì)的有關(guān)原理,進(jìn)行通用化設(shè)計(jì),運(yùn)用功能模塊置換,使特種機(jī)械設(shè)備種類大大減少,提高設(shè)備的互換性與適應(yīng)性,促進(jìn)設(shè)備的裝備化保障管理,從而推進(jìn)實(shí)現(xiàn)裝備的通用化、模塊化、系列化.
BootLoader是嵌入式系統(tǒng)上電后運(yùn)行的第一段軟件代碼[12],負(fù)責(zé)硬件設(shè)備的初始化及操作系統(tǒng)內(nèi)核的載入和啟動.Bootloader高度依賴硬件電路結(jié)構(gòu)和處理器的架構(gòu),沒有通用的BootLoader,需用戶根據(jù)硬件平臺和微處理器架構(gòu)進(jìn)行特定的BootLoader設(shè)計(jì)和實(shí)現(xiàn).但很多芯片廠商出售的嵌入式開發(fā)板會直接提供Bootloader,用戶可以直接編譯后寫進(jìn)FLASH,不需要自行編寫.常用的BootLoader包括GRUB、RedBoot、uboot和vivi等[9],其中uboot是最常見的BootLoader,用于啟動Linux系統(tǒng)的加載程序,其功能簡單,能夠幫助學(xué)生掌握引導(dǎo)加載程序編譯和移植方法,也適用于該實(shí)驗(yàn).
配置和編譯Vboot的步驟:
(1) 創(chuàng)建工作目錄/opt/fangfan/micro2440,并在命令行執(zhí)行:
#mkdir-p cd/opt/fangfan/micro2440之后所有的源代碼都解壓安裝到此目錄下.
(2) 在/tmp目錄下,創(chuàng)建臨時目錄/tmp/fangfan,用于存放下載的各種源碼包,創(chuàng)建的命令為:
#mkdir-p/tmp/fangfan
(3)下載Vboot源代碼,并在當(dāng)前工作目錄下進(jìn)行解壓,代碼為:
#cd/opt/fangfan/micro2440
#tar xvzf/tmp/fangfan/vboot-src-201204.tar.gz
解壓后會自動在當(dāng)前目錄下創(chuàng)建uboot目錄.該目錄下保存了uboot的源代碼和makefile文件.
(4) 編譯uboot并下載到嵌入式硬件平臺,代碼為:
#cd/opt/fangfan/micro2440/uboot
#make
編譯后,如果源代碼沒有任何錯誤,會在當(dāng)前工作目錄下生成uboot.bin的目標(biāo)文件,可直接通過串口下載到嵌入式硬件平臺的Nand FLASH中[13],重啟開發(fā)板可在minicom仿真終端看到相關(guān)信息,如圖4所示.該源代碼適用于micro2440開發(fā)板,無須修改.若要修改配置文件,可通過make指令修改vboot目錄下的makefile文件.
嵌入式操作系統(tǒng)是嵌入式系統(tǒng)軟件架構(gòu)中最主要的組成部分,而操作系統(tǒng)內(nèi)核的配置和編譯是操作系統(tǒng)能否構(gòu)建成功的關(guān)鍵步驟.Linux內(nèi)核主要由內(nèi)存管理、進(jìn)程調(diào)度、設(shè)備驅(qū)動、虛擬文件系統(tǒng)和設(shè)備驅(qū)動等組成[10],其相互關(guān)系如圖5所示.
操作系統(tǒng)內(nèi)核移植是嵌入式系統(tǒng)開發(fā)人員在系統(tǒng)開發(fā)時必須考慮的.本實(shí)驗(yàn)系統(tǒng)選擇Linux-2.6.32.2內(nèi)核進(jìn)行移植.該內(nèi)核是目前針對micro2440開發(fā)板最新版本的內(nèi)核,很好地實(shí)現(xiàn)了操作系統(tǒng)的大部分功能.下載到目標(biāo)機(jī)前針對處理器架構(gòu)對源代碼進(jìn)行修改,根據(jù)目標(biāo)開發(fā)板的硬件架構(gòu)配置和編譯內(nèi)核,使內(nèi)核能夠在定制的硬件平臺上控制外設(shè),便于應(yīng)用程序通過系統(tǒng)調(diào)控外設(shè)工作.首先下載并解壓Linux-2.6.32.2內(nèi)核源碼,創(chuàng)建生成的Linux-2.6.32.2目錄如圖6所示,執(zhí)行#cp config_mini2440_t35.config,針對目標(biāo)板LCD液晶屏的型號復(fù)制相應(yīng)的內(nèi)核配置文件.
執(zhí)行#make menuconfig命令,可獲取內(nèi)核配置菜單,如圖7所示.在該界面中,可對常規(guī)設(shè)置、處理器類型及其特性、文件系統(tǒng)類型選項(xiàng)等內(nèi)容進(jìn)行配置.本實(shí)驗(yàn)主要對該嵌入式系統(tǒng)后續(xù)需要用到的幾個主要外設(shè)進(jìn)行驅(qū)動配置,包括LCD驅(qū)動配置、DM9000網(wǎng)卡驅(qū)動、NAND FLASH驅(qū)動配置.對DM9000網(wǎng)卡的配置如圖8所示,配置完成后保存設(shè)置并退出.確定所有的配置正確后,運(yùn)行#make zImage進(jìn)行內(nèi)核編譯,生成Linux鏡像文件,并用串口和網(wǎng)絡(luò)下載鏡像文件到目標(biāo)機(jī).
文件系統(tǒng)是操作系統(tǒng)的重要組成部分,負(fù)責(zé)存儲和組織計(jì)算機(jī)文件和數(shù)據(jù).根文件系統(tǒng)是一種目錄結(jié)構(gòu),專門用于存放Linux啟動所必需的目錄和關(guān)鍵性文件,嵌入式Linux系統(tǒng)加電時必須首先從指定位置掛載根文件系統(tǒng),才能保證系統(tǒng)的正常啟動.Linux支持多種文件系統(tǒng)類型,包括YAFFS系統(tǒng)、CRAMFS系統(tǒng)、ROMFS系統(tǒng)、NFS系統(tǒng)等.其中YAFFS文件系統(tǒng)是專為嵌入式系統(tǒng)使用Nand Flash而設(shè)計(jì)的一種日志型文件系統(tǒng),包含YAFFS和YAFFS2兩個版本,具有良好的可移植性、較快的速度和較短的掛載時間,占用的內(nèi)存較小,適用于低功耗嵌入式系統(tǒng).由于YAFFS2比前一版本支持更大的NAND FLASH芯片,而本實(shí)驗(yàn)采用的Micro2440開發(fā)板具有256 MB的Nand Flash,選用YAFFS2文件系統(tǒng),可直接采用Busybox構(gòu)建嵌入式平臺的根文件目錄系統(tǒng).
Linux下一個基本功能的根文件系統(tǒng)通常包含以下幾個目錄:dev目錄、etc目錄、lib目錄、mnt目錄、proc目錄、sys目錄、tmp目錄、var目錄、opt目錄.根據(jù)嵌入式系統(tǒng)設(shè)計(jì)的需要可對根文件系統(tǒng)的目錄進(jìn)行調(diào)整,移除一些不需要的目錄,如為多用戶提供可擴(kuò)展環(huán)境的目錄、/home、/mnt等.構(gòu)建目標(biāo)機(jī)根文件系統(tǒng)的步驟如下:
首先,在Linux虛擬機(jī)中創(chuàng)建根文件系統(tǒng)目錄roofs,以及該目錄下所需的子目錄,包括dev、etc.
其次,安裝編譯Busybox.Busybox是搭建嵌入式Linux系統(tǒng)經(jīng)常安裝的一個非常有用的工具,集成了很多標(biāo)準(zhǔn)Linux工具的程序,包括常用的cat、echo以及http服務(wù)器、telent服務(wù)器等,但整個Busybox的大小卻只有1 M左右[7].Busybox的發(fā)布形式是一個壓縮包,可在官網(wǎng)www.busybox.net免費(fèi)下載,在Linux系統(tǒng)下解壓縮后進(jìn)行配置.與一般Linux內(nèi)核編譯配置方式相同,Busybox采用ncurse動態(tài)庫,提供了一個基于文本的窗口,用戶可在該窗口下配置需要用到的Busybox功能.在busybox路徑下使用make menuconfig命令,進(jìn)入Busybox的配置窗口,如圖9所示.
最后,選擇Build options.為完成交叉編譯,使Busybox了解交叉編譯工具鏈的位置,需選擇Cross Compiler prefix,在其中填好交叉編譯工具鏈的位置.配置好所需的全部功能后,保存并退出配置窗口;使用make命令,用make install命令完成編譯和二進(jìn)制文件的安裝.最后完成文件系統(tǒng)的制作.在dev子目錄中創(chuàng)建主設(shè)備結(jié)點(diǎn)和從設(shè)備結(jié)點(diǎn),在etc子目錄下添加并配置文件[14],制作文件系統(tǒng)映像,并用串口和網(wǎng)絡(luò)下載鏡像文件到目標(biāo)機(jī),完成目標(biāo)機(jī)上嵌入式Linux平臺的搭建.
本實(shí)驗(yàn)采用2人一組的方式,實(shí)驗(yàn)過程分為理論知識學(xué)習(xí)、實(shí)驗(yàn)操作和實(shí)驗(yàn)總結(jié)3個階段[15],其中實(shí)驗(yàn)操作又分基礎(chǔ)部分、擴(kuò)展部分和創(chuàng)新部分.具體的實(shí)驗(yàn)流程和實(shí)驗(yàn)內(nèi)容見表1.
表1 實(shí)驗(yàn)流程和實(shí)驗(yàn)內(nèi)容Tab.1 The process and content of the experiment
本實(shí)驗(yàn)基于ARM9嵌入式硬件平臺設(shè)計(jì)嵌入式Linux操作系統(tǒng)的移植實(shí)驗(yàn),硬件平臺采用ARM9內(nèi)核S3C2440A微控制器為主控芯片,Linux-2.6.32.2內(nèi)核在該平臺上的移植步驟包括:BootLoader移植、Linux內(nèi)核的配置和移植、Busybox的配置和安裝,以及根文件系統(tǒng)的構(gòu)建.該實(shí)驗(yàn)不僅實(shí)現(xiàn)了嵌入式Linux平臺的構(gòu)建,還根據(jù)學(xué)生的完成情況及能力對實(shí)驗(yàn)系統(tǒng)的軟硬件進(jìn)行了擴(kuò)展,以及進(jìn)行驅(qū)動程序的開發(fā)和qt用戶界面的移植[16],并在此基礎(chǔ)上開發(fā)GUI程序.該實(shí)驗(yàn)既能讓學(xué)生深入理解Linux內(nèi)核的架構(gòu)和移植方法,又進(jìn)一步地進(jìn)行了嵌入式Linux系統(tǒng)的應(yīng)用開發(fā),有效地培養(yǎng)了學(xué)生的工程實(shí)踐能力和創(chuàng)新意識,為培養(yǎng)高素質(zhì)應(yīng)用型人才奠定堅(jiān)實(shí)的基礎(chǔ)[17].