冷 迪,陳 瑞,李 英
(深圳供電局有限公司,廣東 深圳 518000)
早期開(kāi)發(fā)任務(wù)少,嵌入式系統(tǒng)功能單一,不需要操作系統(tǒng)支持[1]。但隨著功能和復(fù)雜性的增加,對(duì)系統(tǒng)的要求也越來(lái)越高。所以,像普通計(jì)算機(jī)一樣在處理器中引入操作系統(tǒng)就成了一個(gè)必然的趨勢(shì)[2]。由于操作系統(tǒng)的引入,能夠充分利用處理器有限的資源,實(shí)現(xiàn)不同CPU 進(jìn)程間的最佳切換,因此必然會(huì)把嵌入式系統(tǒng)引入到更廣闊的領(lǐng)域[3]。目前X86架構(gòu)虛擬化逐漸完善,但是仍然有些問(wèn)題需要解決。小型機(jī)原CPU 單核數(shù)量較少,但單核率較高。但PC 服務(wù)器的CPU 內(nèi)核較多,單一CPU 內(nèi)核性能較差[4]。一些應(yīng)用在移植過(guò)程中表現(xiàn)出不同的性能,這是小型機(jī)過(guò)渡到PC 服務(wù)器時(shí)不可避免的共同問(wèn)題。
以ARM 為基礎(chǔ)的嵌入式操作系統(tǒng)是目前信息市場(chǎng)的主流,也是一個(gè)熱門(mén)話題。由于應(yīng)用遷移過(guò)程平臺(tái)公開(kāi)了源代碼,使其他人可以在自己喜歡的平臺(tái)系統(tǒng)中移植代碼和使用它,所以嵌入式操作系統(tǒng)受到關(guān)注,選擇該系統(tǒng)作為應(yīng)用遷移過(guò)程操作平臺(tái)。為此,提出了由X86 構(gòu)架到ARM 構(gòu)架的應(yīng)用移植流程平臺(tái)研究。
由X86 構(gòu)架到ARM 構(gòu)架的應(yīng)用移植流程平臺(tái)結(jié)構(gòu)如圖1 所示。
圖1 應(yīng)用移植流程平臺(tái)結(jié)構(gòu)
圖1是把內(nèi)核分成兩層,底層是驅(qū)動(dòng)程序?qū)樱蠈邮翘摂M文件系統(tǒng)層。這些層對(duì)應(yīng)于內(nèi)核的兩個(gè)主要功能,驅(qū)動(dòng)程序?qū)迂?fù)責(zé)管理底層硬件[5]。虛擬文件系統(tǒng)層為L(zhǎng)inux上層應(yīng)用程序提供對(duì)L1的訪問(wèn)。核心代碼按照其功能可分為進(jìn)程管理、內(nèi)存管理、文件系統(tǒng)、設(shè)備控制、網(wǎng)絡(luò)功能等模塊[6]。每一個(gè)模塊都很大,遷移過(guò)程中的主要工作是驅(qū)動(dòng)設(shè)備控制。各開(kāi)發(fā)板的硬件結(jié)構(gòu)不同,需要增加或改進(jìn)硬件驅(qū)動(dòng)程序[7]。
驅(qū)動(dòng)程序通常與應(yīng)用程序遷移過(guò)程平臺(tái)內(nèi)核中的一個(gè)通用總線連接,例如USB、I2C等驅(qū)動(dòng)程序[8]。但在嵌入式芯片中,很多設(shè)備都沒(méi)有與公共總線連接。
平臺(tái)設(shè)備驅(qū)動(dòng)如圖2 所示。
由圖2 可知,使用USB 和I2C 總線控制器來(lái)控制主板上的設(shè)備,并通過(guò)一條廉價(jià)但功能強(qiáng)大的總線(包括兩根導(dǎo)線)收集相關(guān)信息;LCD 控制器的作用是接收總線發(fā)送的信息,計(jì)數(shù)器通過(guò)計(jì)算數(shù)字系統(tǒng)中脈沖數(shù)來(lái)實(shí)現(xiàn)測(cè)量、計(jì)數(shù)和控制[9-10]。聲道控制器采用聯(lián)機(jī)音樂(lè)控制方式,輸出DMX512/1990 信號(hào),保證了系統(tǒng)的安全可靠[11]。
圖2 平臺(tái)設(shè)備驅(qū)動(dòng)
LCD 控制器結(jié)構(gòu)如圖3 所示。
圖3 LCD控制器結(jié)構(gòu)
由圖3 可知,F(xiàn)CT 接收來(lái)自初始化、屏幕間隙和顯示器等參數(shù)的指令。它根據(jù)指令生成一系列控制信號(hào)和相應(yīng)的時(shí)序,并通過(guò)控制LCD 顯示模塊來(lái)完成相應(yīng)的操作[12]。在FCT 輸入LCD_FCT 為低電平時(shí),對(duì)復(fù)位電路進(jìn)行初始化,對(duì)復(fù)位標(biāo)志和狀態(tài)進(jìn)行復(fù)位,并設(shè)置相關(guān)常數(shù)[13]。
LCD 控制器的主要功能是為計(jì)時(shí)器提供高品質(zhì)的時(shí)間設(shè)定,LCD_FCT 中的微秒和毫秒計(jì)時(shí)器是為了滿足不同時(shí)間的工作要求而設(shè)計(jì)的[14-15]。
定時(shí)器的時(shí)間常數(shù)存放在時(shí)間常數(shù)寄存器中,將MP 中的地址和控制信息發(fā)送給解碼器。該解碼器可根據(jù)不同的地址和控制信息產(chǎn)生相應(yīng)的復(fù)位指令標(biāo)志,將指示符號(hào)發(fā)送到控制電路[16]。
Apache 服務(wù)器是指Apache 服務(wù)器端口中的嵌入式系統(tǒng)。在HTTP 端口上,當(dāng)客戶端向服務(wù)器發(fā)出連接請(qǐng)求時(shí),服務(wù)器軟件守護(hù)程序在客戶端和服務(wù)器之間建立連接。如果守護(hù)程序從客戶端收到HTTP 請(qǐng)求消息,那么就對(duì)其進(jìn)行解析,并將解析的請(qǐng)求傳遞給后臺(tái)處理程序。這個(gè)后端程序是PHP 和CGI。在對(duì)后端程序進(jìn)行處理之后,客戶端所需數(shù)據(jù)就會(huì)傳送到服務(wù)器端,最終呈現(xiàn)在網(wǎng)頁(yè)中。
R2R 平臺(tái)中,觸摸屏驅(qū)動(dòng)層次結(jié)構(gòu)如圖4 所示。
圖4 觸摸屏驅(qū)動(dòng)層次結(jié)構(gòu)
由圖4 可知,如果高層應(yīng)用程序需要獲得觸摸屏坐標(biāo),需要首先調(diào)用I2C 總線驅(qū)動(dòng)程序,這些驅(qū)動(dòng)程序的分層開(kāi)放式系統(tǒng)調(diào)用打開(kāi)文件界面,然后使用ioctl 或read 系統(tǒng)調(diào)用獲取所需的坐標(biāo)值。
由于輸入設(shè)備具有多個(gè)觸摸屏,因此鼠標(biāo)和鍵盤(pán)都是輸入設(shè)備。其基本工作機(jī)制是產(chǎn)生中斷,然后內(nèi)核將數(shù)據(jù)存儲(chǔ)在緩沖區(qū)中。硬件方面,設(shè)置數(shù)據(jù)讀取、輸入事件管理、緩沖區(qū)管理共享模塊;所有這些常規(guī)處理由輸入驅(qū)動(dòng)完成,剩下的是中斷管理、數(shù)據(jù)讀取和其他硬件驅(qū)動(dòng)。
Android 系統(tǒng)移植分析了UBOOT、Android 內(nèi)核、用戶空間的層次結(jié)構(gòu);下一步,根據(jù)層次結(jié)構(gòu)找到與遷移最相關(guān)的代碼。修改代碼以適應(yīng)硬件特性,完成代碼移植。開(kāi)始運(yùn)行系統(tǒng)前,編譯修改的UBOOT代碼,并使用RENEWS 刻錄機(jī)將BIN 文件(編譯結(jié)構(gòu))刻錄到R2R 平臺(tái)的引導(dǎo)風(fēng)扇上。修改后的內(nèi)核隨后被編譯,內(nèi)核鏡像被拷貝到端口主機(jī)的TFTP 目錄中;最后編譯成Android 文件系統(tǒng),拷貝到U 盤(pán)。該系統(tǒng)首先啟動(dòng)應(yīng)用程序,下載內(nèi)核,然后分析數(shù)據(jù),最后內(nèi)核從U 盤(pán)讀取初始化文件,開(kāi)始初始化操作,最后將初始進(jìn)程加載到Android 用戶空間。
啟動(dòng)程序是與架構(gòu)相關(guān)的一部分,是在運(yùn)行操作系統(tǒng)內(nèi)核和應(yīng)用程序之前啟動(dòng)并加載系統(tǒng)的一小部分。一般情況下,不可能在嵌入式系統(tǒng)中建立通用的啟動(dòng)遷移。用戶必須編寫(xiě)此小程序,完成硬件設(shè)備的初始化,建立存儲(chǔ)空間映射,使系統(tǒng)軟硬件達(dá)到適當(dāng)?shù)臓顟B(tài),才能使操作系統(tǒng)內(nèi)核良好運(yùn)行。
通常引導(dǎo)程序移植分為兩步:
步驟一:CPU 依賴代碼使用匯編語(yǔ)言實(shí)現(xiàn)。其中主要包括對(duì)硬件設(shè)備進(jìn)行初始化;準(zhǔn)備內(nèi)存空間將引導(dǎo)程序復(fù)制到引導(dǎo)遷移設(shè)備上,設(shè)置堆棧讀取ARM 空間,完成檢測(cè)系統(tǒng)內(nèi)存映射;
步驟二:將內(nèi)核和根文件系統(tǒng)鏡像從Flash 讀取到ARM 空間;設(shè)置內(nèi)核啟動(dòng)參數(shù),調(diào)用內(nèi)核。引導(dǎo)程序移植的工作流程如圖5 所示。
圖5 引導(dǎo)程序移植工作流程
內(nèi)核移植啟動(dòng)操作系統(tǒng),執(zhí)行內(nèi)存管理任務(wù)調(diào)度,然后執(zhí)行應(yīng)用程序,或者等待用戶的指令。盡管在功能間存在著復(fù)雜的調(diào)度關(guān)系,但應(yīng)用遷移平臺(tái)的層次結(jié)構(gòu)使硬件相關(guān)代碼具有獨(dú)立性。在遷移過(guò)程中,只需要對(duì)進(jìn)程、內(nèi)存、設(shè)備等進(jìn)行管理。對(duì)內(nèi)核代碼的修改包括以下部分:
1)在內(nèi)核目錄樹(shù)中修改項(xiàng)目構(gòu)建工具,設(shè)置環(huán)境變量,找到交叉編譯工具鏈,重新登錄。
2)建立灰色分區(qū)區(qū)域,修改ARM 表示的分區(qū)信息,使用灰色分區(qū)表創(chuàng)建文件內(nèi)容;修改ARM 文件,根據(jù)分區(qū)設(shè)置指定初始化和內(nèi)核啟動(dòng)程序。
通過(guò)執(zhí)行MakeMenucon 命令,配置內(nèi)核生成卡,選擇SBC2410 位卡的處理器類型,將卡保存在串口中。在進(jìn)入配置管理界面時(shí),必須先驗(yàn)證用戶的身份。驗(yàn)證是訪客訪問(wèn)權(quán)的標(biāo)志,不同權(quán)限驗(yàn)證對(duì)應(yīng)不同的數(shù)據(jù)信息。
移植之前,需確保主機(jī)上正確安裝了操作系統(tǒng)和GCC 跨工具編譯器鏈連接了目標(biāo)板上的USB、串行和JTAG 接口,并且成功安裝了驅(qū)動(dòng)程序。該實(shí)驗(yàn)使用安裝在主機(jī)上的RedHat9 和主機(jī)上的Linux 操作系統(tǒng),以及ARM-Linux-GCC3 交叉編譯工具。
單獨(dú)使用X86架構(gòu)、ARM架構(gòu)與移植流程平臺(tái)對(duì)比分析信息存儲(chǔ)空間占用情況、重復(fù)信息剔除效率。
3.2.1 存儲(chǔ)空間
添加Flash 分區(qū)信息,在目標(biāo)板中的存儲(chǔ)空間為64 MB,將其劃分為4個(gè)區(qū)域,分別是分區(qū)1(占用1 MB空間)、分區(qū)2(占用3 MB 空間)、分區(qū)3(占用40 MB空間)、分區(qū)4(占用20 MB 空間)。
分別使用X86 架構(gòu)、ARM 架構(gòu)與移植流程平臺(tái)對(duì)空間占用情況進(jìn)行對(duì)比分析,對(duì)比結(jié)果如圖6所示。
圖6 不同架構(gòu)空間占用情況對(duì)比分析
由圖6 可知,使用X86 架構(gòu),分區(qū)1 所占空間為3 MB,分區(qū)2 所占空間為6 MB,分區(qū)3 所占空間為43 MB,分區(qū)4 所占空間為12 MB;使用ARM 架構(gòu),分區(qū)1 所占空間為2 MB,分區(qū)2 所占空間為6 MB,分區(qū)3 所占空間為32 MB,分區(qū)4 所占空間為24 MB;使用移植流程平臺(tái),分區(qū)1 所占空間為1 MB,分區(qū)2 所占空間為3 MB,分區(qū)3 所占空間為40 MB,分區(qū)4 所占空間為20 MB。由此可知,使用移植流程平臺(tái)在目標(biāo)板中的存儲(chǔ)空間分區(qū)結(jié)果與實(shí)際需求一致。
3.2.2 重復(fù)信息剔除效率
分別使用X86 架構(gòu)、ARM 架構(gòu)與移植流程平臺(tái)對(duì)比分析重復(fù)信息剔除效率,對(duì)比結(jié)果如表1 所示。
表1 不同架構(gòu)重復(fù)信息剔除效率對(duì)比分析
由表1 可知,使用X86 架構(gòu)最高剔除效率為60%;使用ARM 架構(gòu)最高剔除效率為75%;使用移植流程平臺(tái)最高剔除效率為99%,由此可知,使用移植流程平臺(tái)重復(fù)信息剔除效率較高。
該文設(shè)計(jì)了一個(gè)由X86 構(gòu)架到ARM 構(gòu)架的應(yīng)用移植流程平臺(tái),以滿足當(dāng)前社會(huì)發(fā)展的需要,具有良好的市場(chǎng)前景和強(qiáng)大的擴(kuò)展能力。通過(guò)實(shí)驗(yàn)可知,該平臺(tái)存儲(chǔ)空間分區(qū)結(jié)果與實(shí)際需求一致,其最高重復(fù)信息剔除效率高達(dá)99%,移植效果較好,具有較強(qiáng)的性能。根據(jù)平臺(tái)后期開(kāi)發(fā)和運(yùn)行的需要,提出了初步解決方案,為平臺(tái)的后期運(yùn)行和產(chǎn)品開(kāi)發(fā)提供了依據(jù)。