張偉杰 李明理
(1:吉林建筑工程學(xué)院計(jì)算機(jī)科學(xué)與工程學(xué)院,長春 130118;2:大連理工大學(xué)軟件學(xué)院,大連 116000)
近些年,嵌入式系統(tǒng)開發(fā)已經(jīng)成為信息產(chǎn)業(yè)的研究熱點(diǎn).基于ARM硬件平臺(tái)及Linux操作系統(tǒng)的嵌入式產(chǎn)品應(yīng)用開發(fā)已成為主流.而在嵌入式的開發(fā)過程中,針對目標(biāo)平臺(tái)的操作系統(tǒng)移植成為影響嵌入式產(chǎn)品開發(fā)進(jìn)度的一個(gè)關(guān)鍵因素.
嵌入式Linux系統(tǒng)的軟件結(jié)構(gòu)如圖1所示[1];嵌入式Linux系統(tǒng)開發(fā)流程如圖2所示.
圖1 嵌入式Linux系統(tǒng)的軟件結(jié)構(gòu)平臺(tái)
圖2 嵌入式Linux系統(tǒng)開發(fā)流程
由于一般嵌入式開發(fā)系統(tǒng)存儲(chǔ)大小有限,所以在裁剪和定制Linux運(yùn)用于嵌入式系統(tǒng)之前,通常都要在PC上建立一個(gè)用于目標(biāo)機(jī)的交叉編譯環(huán)境,完成嵌入式系統(tǒng)的開發(fā).如圖3所示,建立一個(gè)交叉編譯工具鏈?zhǔn)且粋€(gè)相當(dāng)復(fù)雜的過程,網(wǎng)上有一些編譯好的可以下載.
圖3 交叉編譯環(huán)境
2.1.1 Linux系統(tǒng)的抽象結(jié)構(gòu)
Linux操作系統(tǒng)的內(nèi)核結(jié)構(gòu)從層次上來說,是整體式的結(jié)構(gòu).其主要組成結(jié)構(gòu)如表1所示[2].
表1右邊是從操作系統(tǒng)的層次結(jié)構(gòu)進(jìn)行分層,左邊是從基本功能模塊的角度來對Linux系統(tǒng)進(jìn)行分層.
2.1.2 Linux內(nèi)核子系統(tǒng)與系統(tǒng)移植
Linux內(nèi)核功能有進(jìn)程管理、內(nèi)存管理、中斷和異常處理、設(shè)備控制、文件系統(tǒng)和網(wǎng)絡(luò)接口.從典型的ARM平臺(tái)的系統(tǒng)移植實(shí)例的分析來看,系統(tǒng)移植的工作主要集中在中斷異常處理、文件系統(tǒng)、設(shè)備控制部分.主要是由于這幾個(gè)部分和ARM平臺(tái)的系統(tǒng)之間關(guān)系密切,相對來說,設(shè)備控制是移植中工作量最大的部分[3].
表1 Linux操作系統(tǒng)結(jié)構(gòu)
2.2.1 分層結(jié)構(gòu)
Linux內(nèi)核的設(shè)計(jì)吸取了層次結(jié)構(gòu)和對硬件抽象層的思想,對內(nèi)核進(jìn)行分層,以便將硬件相關(guān)部分和操作其它上層實(shí)現(xiàn)分離開來,從而增強(qiáng)了系統(tǒng)的可移植性,具體分為硬件直接相關(guān)層、硬件抽象層和操作系統(tǒng)內(nèi)核層.其中硬件直接相關(guān)層主要包括由于處理器體系結(jié)構(gòu)和指令集不同而需要進(jìn)行相應(yīng)實(shí)現(xiàn)的部分;硬件抽象層是為了屏蔽底層的硬件細(xì)節(jié),并為上層提供一個(gè)邏輯上統(tǒng)一的硬件環(huán)境接口及各種硬件平臺(tái)上操作系統(tǒng)的代碼重用而引入的機(jī)制;硬件無直接相關(guān)的操作系統(tǒng)內(nèi)核層主要包括進(jìn)程、內(nèi)存和設(shè)備管理,文件系統(tǒng)及其它和底層設(shè)備不直接相關(guān)的較高層實(shí)現(xiàn)[4].
2.2.2 面象對象思想
Linux內(nèi)核主要是用非面向?qū)ο蟮腃語言編寫而成,但是Linux內(nèi)核中大量的借鑒和使用了面向?qū)ο蟮乃枷?雖然C語言本身沒有提供面向?qū)ο蟮恼Z法支持,但是在Linux中通過使用結(jié)構(gòu)體和函數(shù)指針實(shí)現(xiàn)了面向?qū)ο髾C(jī)制的部分模擬.
本次移植目標(biāo)系統(tǒng)采用的是Intel Xscale系列處理器PXA255(ARM核),該處理器具有體積小、耗電低、處理能力強(qiáng)、可靠性高等特點(diǎn),非常適合工業(yè)現(xiàn)場控制產(chǎn)品的開發(fā).主要部件:處理器:32位RISC結(jié)構(gòu)400 MHz INTEL PXA 255;FLASH:E 28 J 3 A-150 X 2,32 MB;SDRAM:K 4 S 561632 CX 2,64 M;液晶顯示器:6.4寸STN;串口:PXA 255內(nèi)置2個(gè)串口;網(wǎng)口:一個(gè)10 BASE-T以太網(wǎng)接口[5].
具有的軟件平臺(tái):采用的內(nèi)核版本是linux-2.4.18,交叉工具鏈?zhǔn)莂rm-linux-Xscale-gcc-3.2.
(1)建立自已開發(fā)板的目錄PXA 255,并將u-boot/board/xaeniax/目錄中的所有文件拷貝到u-boot/ board/PXA255目錄下,針對目標(biāo)平臺(tái)文件做相應(yīng)的修改;
(2)建立自已的配置文件:在include/configs目錄中添加頭文件PXA 255.h,這個(gè)文件是PXA 255開發(fā)板的配置文件,它包括開發(fā)板的CPU、系統(tǒng)時(shí)鐘、RAM,GPIO及其它相關(guān)的配置信息;
(3)建立自已的開發(fā)板的CPU目錄cpu/cpu255,并將cpu/PXA中所有文件拷貝到該目錄下,針對目標(biāo)硬件特性和需求進(jìn)行各文件的修改;
(4)修改u-boot-1.1.0/Makefile,以便在其中加入對目標(biāo)板的編譯支持,并根據(jù)實(shí)際情況修改交叉編譯器的路徑:PXA255-config:unconfig;@./mkconfig$(@:_config+)arm cpu255 PXA255.其中“Arm”代表CPU的種類,cpu2 55是ARM CPU對應(yīng)的代碼目錄,PXA 255是自已開發(fā)板對應(yīng)的目錄;
(5)依次過運(yùn)行命令:$make clean,$make PXA 255-config,$make.生成3個(gè)文件:u-boot:ELF格式的文件,可以被大多數(shù)Debug程序識別;u-boot.bin:二進(jìn)制bin文件,純粹的U-BOOT二進(jìn)制執(zhí)行代碼,不保存ELF格式和調(diào)試信息.這個(gè)文件一般用于燒寫到用戶開發(fā)中;u-boot.srec:motorola S-Record格式,可以通過串行口下載至開發(fā)板中.
通過JTAG口將u-boot.bin燒寫至Flash的零地址,復(fù)位后就可以啟動(dòng)系統(tǒng)了.
本文針對嵌入式Linux系統(tǒng)移植在存在的普遍問題,并結(jié)合工業(yè)現(xiàn)場控制的需求,對嵌入式Linux移植就嵌入式Linux系統(tǒng)開發(fā)流程和交叉開發(fā)環(huán)境的建立、Linux的內(nèi)部組織結(jié)構(gòu)及其對系統(tǒng)移植的影響、目標(biāo)硬件平臺(tái)和現(xiàn)有的軟件基礎(chǔ)以及系統(tǒng)移植實(shí)現(xiàn)進(jìn)行了探討,將為在此硬件、軟件平臺(tái)的開發(fā)工作奠定基礎(chǔ).
[1]陳莉君,康 華,張 波.Linux內(nèi)核設(shè)計(jì)與實(shí)現(xiàn)[M].北京:中國機(jī)械工業(yè)出版社,2006:22-25.
[2]陳 頤.嵌入式技術(shù)原理與應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2011:272-280.
[3]華清遠(yuǎn)見嵌入式培訓(xùn)中心.嵌入式Linux應(yīng)用程序開發(fā)[M].北京:人民郵電出版社,2009:99-112.
[4]任橋偉.Linux內(nèi)核修煉之道[M].北京:人民郵電出版社,2010:37-50.
[5]錢連舉.基于ARM的嵌入式Linux系統(tǒng)移植技術(shù)研究與應(yīng)用[D].成都:電子科技大學(xué),2006.