摘 要: 對(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匾D壳笆袌?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.