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