摘 要: 對(duì)嵌入式系統(tǒng)的基本概念、原理和基于ARM的嵌入式Linux應(yīng)用系統(tǒng)的設(shè)計(jì)與開(kāi)發(fā)作了介紹;設(shè)計(jì)開(kāi)發(fā)了一套用于投影機(jī)的嵌入式遠(yuǎn)程監(jiān)控系統(tǒng),利用Internet,通過(guò)對(duì)底層設(shè)備驅(qū)動(dòng)編程和上層軟件系統(tǒng)的設(shè)計(jì)開(kāi)發(fā),客戶端可通過(guò)瀏覽器訪問(wèn)嵌入式系統(tǒng)內(nèi)置的http服務(wù)器,將投影機(jī)的相關(guān)參數(shù)直觀實(shí)時(shí)地在Web頁(yè)面上顯示出來(lái),并且可以實(shí)現(xiàn)對(duì)于投影機(jī)現(xiàn)場(chǎng)相關(guān)顯示參數(shù)的設(shè)置。
關(guān)鍵詞: 投影機(jī); Linux; ARM;CGI
投影機(jī)網(wǎng)絡(luò)化正成為投影機(jī)發(fā)展過(guò)程中的一個(gè)重要趨勢(shì),通過(guò)標(biāo)配的有線及無(wú)線網(wǎng)絡(luò)接口或選配的網(wǎng)絡(luò)適配器,用戶可以通過(guò)計(jì)算機(jī)更方便地向投影機(jī)傳送顯示控制信號(hào),在投影機(jī)上顯示輸出內(nèi)容,可通過(guò)計(jì)算機(jī)來(lái)監(jiān)控管理投影機(jī)。
1 嵌入式計(jì)算機(jī)系統(tǒng)的特點(diǎn)
嵌入式計(jì)算機(jī)系統(tǒng)[1]同通用型計(jì)算機(jī)系統(tǒng)相比具有以下特點(diǎn):
(1)嵌入式系統(tǒng)通常面向特定應(yīng)用。與通用型系統(tǒng)的最大不同是嵌入式CPU大多工作在為特定用戶群設(shè)計(jì)的系統(tǒng)中,它通常具有低功耗、體積小、集成度高等特點(diǎn),能夠把通用CPU中許多由板卡完成的功能集成在芯片內(nèi)部,從而有利于嵌入式系統(tǒng)設(shè)計(jì)趨于小型化,移動(dòng)能力大大增強(qiáng),與網(wǎng)絡(luò)的耦合也越來(lái)越緊密。
(2)嵌入式系統(tǒng)是將先進(jìn)的計(jì)算機(jī)技術(shù)、半導(dǎo)體技術(shù)和電子技術(shù)與各個(gè)行業(yè)的具體應(yīng)用相結(jié)合后的產(chǎn)物。這一點(diǎn)決定了它必然是一個(gè)技術(shù)密集、資金密集、高度分散、不斷創(chuàng)新的知識(shí)集成系統(tǒng)。
(3)嵌入式系統(tǒng)的硬件和軟件都必須高效率地設(shè)計(jì),量體裁衣、去除冗余,力爭(zhēng)在同樣的硅片面積上實(shí)現(xiàn)更高的性能,這樣才能在具體應(yīng)用中對(duì)處理器的選擇更具有競(jìng)爭(zhēng)力。
(4)嵌入式系統(tǒng)與具體應(yīng)用有機(jī)結(jié)合,它的升級(jí)換代也是與具體產(chǎn)品同步進(jìn)行的,因此嵌入式系統(tǒng)產(chǎn)品一旦進(jìn)入市場(chǎng),一般具有較長(zhǎng)的生命周期。
(5)為了提高執(zhí)行速度和系統(tǒng)可靠性,嵌入式系統(tǒng)中的軟件一般都固化在存儲(chǔ)器芯片或單片機(jī)中,而不是存儲(chǔ)于磁盤等載體中。
(6)嵌入式系統(tǒng)本身不具備自舉開(kāi)發(fā)能力,設(shè)計(jì)完成以后用戶通常不能對(duì)其中的程序功能進(jìn)行修改,必須有一套開(kāi)發(fā)工具和環(huán)境才能進(jìn)行開(kāi)發(fā)[2]。
2 嵌入式投影機(jī)系統(tǒng)的組成
本系統(tǒng)采用目前比較流行的ARM處理器和嵌入式Linux操作系統(tǒng)平臺(tái),對(duì)投影機(jī)進(jìn)行信息采集,并向局域網(wǎng)中的投影機(jī)發(fā)出控制命令。在ARM處理器的NAND Flash中,固化了嵌入式Linux操作系統(tǒng)和http服務(wù)器,可以將投影機(jī)的投影信息及時(shí)地傳輸給用戶,同時(shí)用戶可以方便地通過(guò)瀏覽器修改投影機(jī)的投影參數(shù)。
首先,用戶在瀏覽器中輸入已經(jīng)聯(lián)入局域網(wǎng)的投影機(jī)嵌入式模塊的IP地址,向嵌入式模塊的http服務(wù)器提出連接請(qǐng)求,輸入正確的用戶名和密碼之后,用戶就可以登錄系統(tǒng)進(jìn)行控制。當(dāng)用戶登錄系統(tǒng)之后,嵌入式模塊首先會(huì)通過(guò)IPC(進(jìn)程間通信)的方式和投影機(jī)的核心模塊通信,投影機(jī)設(shè)備將當(dāng)前投影參數(shù)讀取出來(lái),然后將參數(shù)通過(guò)IPC(進(jìn)程間通信)發(fā)送給嵌入式模塊,嵌入式模塊通過(guò)TCP/IP協(xié)議棧將參數(shù)返回給瀏覽器,用戶則通過(guò)Web頁(yè)面直觀實(shí)時(shí)地查看投影機(jī)當(dāng)前的投影信息。用戶也可以選擇對(duì)投影機(jī)的投影信息進(jìn)行修改,如增加投影機(jī)投影亮度、對(duì)比度、選擇Auto Keystone方式等。
系統(tǒng)的整體框架如圖1所示。
3 嵌入式投影機(jī)應(yīng)用系統(tǒng)架構(gòu)詳細(xì)設(shè)計(jì)
3.1 硬件平臺(tái)的選擇
基于嵌入式微處理器在嵌入式系統(tǒng)中的核心地位,選擇一款恰當(dāng)?shù)奶幚砥鞣浅V匾?。目前市?chǎng)主流的32位微處理器主要有Power PC、68K、MIPS和ARM等。通常在選擇微處理器時(shí),需要考慮很多因素,如性能、功耗、價(jià)格、配套的開(kāi)發(fā)工具以及市場(chǎng)的供貨情況,而ARM在這些方面都具有優(yōu)勢(shì)。同時(shí)ARM還具有業(yè)界領(lǐng)先的RISC體系架構(gòu),所以,選擇基于ARM核的處理器是最理想的。
本設(shè)計(jì)采用S3C2410開(kāi)發(fā)板為硬件平臺(tái)。該平臺(tái)在盡可能小的電路板面積上集成了64 M SDRAM、64 M Nand Flash、1 M Nor Flash、RJ-45網(wǎng)卡、音頻輸入與輸出、USB Host、USB Slave、標(biāo)準(zhǔn)串口、SD卡插座、,用戶按鍵和一些用戶燈等設(shè)備接口,并且引出CPU的大部分信號(hào)引腳。通過(guò)這個(gè)平臺(tái)可以針對(duì)S3C2410進(jìn)行系統(tǒng)級(jí)的硬件和軟件設(shè)計(jì),并且能夠很方便地在該平臺(tái)上進(jìn)行相關(guān)的功能擴(kuò)展,并進(jìn)行所需的產(chǎn)品設(shè)計(jì)。
3.2 系統(tǒng)的軟件實(shí)現(xiàn)
3.2.1開(kāi)發(fā)平臺(tái)宿主機(jī)的配置
本系統(tǒng)的開(kāi)發(fā)平臺(tái)選擇ubuntu 8.04 LTS。首先從網(wǎng)絡(luò)上下載vmware workstation的體驗(yàn)版,在Windows XP環(huán)境下安裝配置好。從網(wǎng)絡(luò)下載ubuntu 8.04 LTS版本的ISO鏡像文件,在vmware workstation虛擬機(jī)環(huán)境下安裝配置好ubuntu 8.04 LTS系統(tǒng),設(shè)置虛擬機(jī)中ubuntu系統(tǒng)的網(wǎng)絡(luò)連接方式為Bridged,通過(guò)apt軟件包管理程序可以方便地安裝配置虛擬機(jī)中的ubuntu開(kāi)發(fā)環(huán)境,安裝系統(tǒng)開(kāi)發(fā)所必須的程序庫(kù),如build-essential,samba以及openssh-server等。
3.2.2 開(kāi)發(fā)過(guò)程
(1)搭建交叉編譯環(huán)境
當(dāng)開(kāi)發(fā)嵌入式Linux軟件時(shí),一般都要經(jīng)過(guò)交叉編譯。如果是開(kāi)發(fā)PC機(jī)上的軟件,只要用Linux本身提供的強(qiáng)大的編譯器(如GCC)直接編譯即可。而一般的嵌入式設(shè)備所用的CPU和PC機(jī)上的CPU有著不同的架構(gòu),這樣就要求在PC機(jī)上編譯出適用于嵌入式設(shè)備CPU架構(gòu)的軟件,這就是交叉編譯的概念。圖2是交叉編譯環(huán)境圖示。
(2)U-boot的移植
嵌入式的軟件系統(tǒng)主要由Bootloader、Kernel、嵌入式文件系統(tǒng)以及應(yīng)用程序等組成。其中,Bootloader是介于硬件和操作系統(tǒng)之間的一層,其作用就好像PC機(jī)中的BIOS。系統(tǒng)加電運(yùn)行后,由系統(tǒng)自動(dòng)加載,通過(guò)這段程序,可以初始化硬件設(shè)備,建立內(nèi)存空間的映射圖,從而將系統(tǒng)的硬件環(huán)境引導(dǎo)到一個(gè)合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好環(huán)境。本系統(tǒng)對(duì)于bootloader的選擇采用Das U-boot,由于U-boot的使用范圍相當(dāng)廣,因此很容易找到關(guān)于U-boot移植的相關(guān)資料。U-boot引導(dǎo)程序分為stage1和stage 2兩大部分,stage1中主要包括設(shè)備初始化、中斷設(shè)置、時(shí)鐘的設(shè)置以及存儲(chǔ)器初始化等工作,并且采用匯編語(yǔ)言實(shí)現(xiàn),而一些通用功能大多采用C語(yǔ)言實(shí)現(xiàn),放在stage 2階段執(zhí)行。
修改cpu/arm920t/start.s文件,start.s文件是采用匯編語(yǔ)言編寫的U-boot程序入口代碼,完成對(duì)底層硬件的初始化。
修改board/smdk2410/nand_read.c中的nand_read_11函數(shù)將stage 2階段的代碼復(fù)制到ram中。
修改U-boot根目錄下的makefile文件完成以后,依次在終端中執(zhí)行:
Make distclean //清除生成的鏈接
Make smdk2410_config
Make CROSS-COMPILE=arm-linux-編譯成功后,將生成三個(gè)文件,其中需要燒到開(kāi)發(fā)板中的文件是二進(jìn)制的u-boot.bin文件。
(3)裁剪Linux內(nèi)核
修改根目錄下的makefile文件,指定目標(biāo)平臺(tái)為ARM,ARCH:=arm,指定交叉編譯器,CROSS_COMPILE=/usr/local/3.3.2/bin/arm-linux-gcc內(nèi)核移植完成后,可以對(duì)內(nèi)核進(jìn)行配置,一般用“make menuconfig”命令即可,具體的配置要根據(jù)自己的軟件平臺(tái)以及應(yīng)用程序的使用情況來(lái)確定,內(nèi)核要盡可能小,以滿足嵌入式系統(tǒng)資源少的特點(diǎn)。
(4)文件系統(tǒng)的選擇
cramfs文件系統(tǒng)是專門針對(duì)閃存設(shè)計(jì)的只讀壓縮文件系統(tǒng),其容量上限為256 MB,采用zlib壓縮,文件系統(tǒng)類型可以是EXT2或EXT3。本系統(tǒng)選擇的文件系統(tǒng)正是cramfs文件系統(tǒng)??赏ㄟ^(guò)busybox工具集來(lái)制作根文件系統(tǒng)。
(5)CGI部分的設(shè)計(jì)
要實(shí)現(xiàn)網(wǎng)頁(yè)的交互性和實(shí)時(shí)更新,就要用到CGI技術(shù)。公共網(wǎng)關(guān)接口CGI(common gateway interface)是一種服務(wù)器與瀏覽器信息交換的標(biāo)準(zhǔn)接口。從物理上看,CGI程序?qū)儆谝粋€(gè)外部程序,需要編譯成可執(zhí)行文件,以便能夠在服務(wù)器端執(zhí)行,它提供客戶端頁(yè)面HTML代碼的接口,完成無(wú)法做到的交互功能。CGI建立在C/S機(jī)制上,為外部擴(kuò)展應(yīng)用程序與Web服務(wù)器交互提供了一個(gè)標(biāo)準(zhǔn)接口。按照CGI標(biāo)準(zhǔn)編寫的外部擴(kuò)展應(yīng)用程序可以處理客戶端輸入的工作數(shù)據(jù),完成客戶端與服務(wù)器的交互操作。因此,如果說(shuō)CGI是Web能夠發(fā)展如此迅猛的最大原因也不為過(guò)。本系統(tǒng)的CGI部分的主函數(shù)(main)中代碼截取如圖3所示。
(6) 鏡像的燒入
通過(guò)網(wǎng)絡(luò)燒入代碼可以利用tfttp協(xié)議,在主機(jī)中開(kāi)啟tftp服務(wù),同時(shí)指定鏡像文件所在的目錄,然后利用超級(jí)終端來(lái)控制代碼的燒入,打印信息。首先需要在超級(jí)終端中設(shè)置目標(biāo)板的環(huán)境,包括MAC地址、目標(biāo)板的IP地址、tftp服務(wù)器的IP地址,這里需要將目標(biāo)板和開(kāi)發(fā)主機(jī)的IP地址設(shè)置在同一個(gè)網(wǎng)段,設(shè)置完成以后重啟目標(biāo)系統(tǒng),進(jìn)入待燒入模式,通過(guò)tftpboot、erase、cp.b等命令拷貝鏡像文件到嵌入式設(shè)備存儲(chǔ)設(shè)備中的指定地址段。
完全燒入完成后重啟目標(biāo)板上的Linux系統(tǒng)即可。待燒入鏡像在nand flash中存放的地址空間如表1所示。
本文主要討論了應(yīng)用于投影機(jī)設(shè)備的嵌入式模塊的設(shè)計(jì)與開(kāi)發(fā)。包括開(kāi)發(fā)平臺(tái)的選擇,配置嵌入式開(kāi)發(fā)的環(huán)境,對(duì)于Kernel和文件系統(tǒng)的裁剪。最后通過(guò)tftp程序?qū)⒕幾g生成的鏡像文件燒寫到嵌入式模塊的存儲(chǔ)設(shè)備中。
參考文獻(xiàn)
[1] 孫瓊.嵌入式Linux應(yīng)用程序開(kāi)發(fā)詳解[M].北京:人民郵電出版社, 2006.
[2] YAGHMOUR K. Building embedded linux systems[M]. O′Reilly, 2008.
[3] 葉欣.嵌入式Linux環(huán)境下Web頁(yè)面技術(shù)的實(shí)現(xiàn)[J].現(xiàn)代商貿(mào)工業(yè),2009(1):356-357.
[4] HENKEL J. Software development in embedded linux[M]. Wirtschaftinformatik proceedings, 2003.
[5] 汪小燕,連曉平,董燕,等. 基于TFTP協(xié)議的嵌入式系 統(tǒng)開(kāi)發(fā)方法設(shè)計(jì)與實(shí)現(xiàn)[J].武漢:華中科技大學(xué)學(xué)報(bào)
(自然科學(xué)版),2006,34(12):56-58.