周麗麗
摘要:提出基于ARM9和Linux嵌入Web服務(wù)器的實現(xiàn)方案,介紹了基于S3C2410處理器嵌入式Web服務(wù)器的硬件電路和軟件設(shè)計,通過搭建嵌入式交叉編譯環(huán)境,移植BootLoader、Linux內(nèi)核、文件系統(tǒng)、Boa網(wǎng)絡(luò)服務(wù)器,給出了嵌入式Web服務(wù)器的實現(xiàn)方法,通過通用網(wǎng)關(guān)接口CGI,成功實現(xiàn)了動態(tài)網(wǎng)絡(luò)服務(wù)。
關(guān)鍵詞:S3C2410處理器;Linux;Web 服務(wù)器;BOA 網(wǎng)絡(luò)服務(wù)器
中圖分類號:TP393 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2014)09-1966-03
嵌入式系統(tǒng)具有功能特定、規(guī)模可變、擴(kuò)展靈活、有一定的實時性和穩(wěn)定性、系統(tǒng)式內(nèi)核比較小等特點(diǎn)。隨著Internet技術(shù)持續(xù)發(fā)展,嵌入式產(chǎn)品的上網(wǎng)被寄予厚望。然而,以TCP/IP協(xié)議為核心的網(wǎng)絡(luò)軟件對于計算機(jī)系統(tǒng)的運(yùn)算速度、內(nèi)存空間要求相對較高。由于早期的CPU和單片機(jī)是嵌入式系統(tǒng)中的主體,運(yùn)算能力有限,速度很慢,內(nèi)存空間有限,硬件上的限制阻礙了網(wǎng)絡(luò)的嵌入式應(yīng)用。近年來,計算機(jī)硬件特別是CPU的發(fā)展得到很大幅度的提升,已經(jīng)可以將操作系統(tǒng)、TCP/IP協(xié)議軟件以及相應(yīng)的應(yīng)用軟件存放在以Flash為主的存儲器中。操作系統(tǒng)和TCP/IP協(xié)議軟件隨著Linux的普及揭開了神秘的面紗,嵌入式產(chǎn)品的網(wǎng)絡(luò)化逐漸成為現(xiàn)實。
1 硬件系統(tǒng)設(shè)計
從技術(shù)上來講,嵌入式產(chǎn)品網(wǎng)絡(luò)化有多種方式。比如:有的是通過專門Webserver實現(xiàn),有的是通過專用網(wǎng)關(guān)連接,也有的是在嵌入式產(chǎn)品中擴(kuò)展傳統(tǒng)網(wǎng)絡(luò)技術(shù),通過嵌入式系統(tǒng)本身的架構(gòu)實現(xiàn)Webserver功能。前兩種方案構(gòu)成比較簡單,實現(xiàn)的功能也比較單一,所以本文重在闡述后者,也即基于Linux的嵌入式Webserver系統(tǒng)的構(gòu)建(硬件系統(tǒng)結(jié)構(gòu)框圖見圖1)。
該系統(tǒng)主要由S3C2410處理器、Flash存儲器、SDRAM、JTAG接口電路和時鐘、復(fù)位、電源電路組成,通過專用以太網(wǎng)接口電路連接以太網(wǎng),并通過RS232接口電路與PC電腦相連。其中核心處理器S3C2410采用Samsung公司生產(chǎn)的一款基于32位ARM核的RISC嵌入式處理器核,該處理擁有獨(dú)立的16KB數(shù)據(jù)Cache和16KB指令Cache,SD主機(jī)和MMC接口,NAND閃存控制器,2個USB主機(jī),1個USB設(shè)備,采用272-FBGA芯片封裝,最高頻率可運(yùn)行在203MHz。
2 開發(fā)環(huán)境Linux平臺建立
ARM Linux開發(fā)首先要有ARM Linux編譯開發(fā)環(huán)境,常見做法是采用所謂“虛擬開發(fā)環(huán)境”方式。也就是主機(jī)使用Windows操作系統(tǒng),虛擬機(jī)安裝Linux系統(tǒng),然后在虛擬機(jī)上建立ARM Linux編譯開發(fā)環(huán)境。虛擬機(jī)搭建工具可以使用WMware WorkStation,它的完整使用過程大體分為:建立一個新的虛擬機(jī)、配置安裝好的虛擬機(jī)、配置虛擬機(jī)的網(wǎng)絡(luò)3個部分。
2.1 虛擬機(jī)建立
建立虛擬機(jī)的操作并不復(fù)雜,打開VMware軟件環(huán)境,按照向?qū)崾局鸩讲僮?,直至結(jié)束,就可以順利完成全部過程。具體操作如下:首先啟動VMware WorkStation 軟件,單擊【File】→ 【New】→【Virtual Machine】選項,會出現(xiàn)一個VMware安裝向?qū)Т翱冢ㄒ妶D2)。依指引操作,直至出現(xiàn)虛擬機(jī)相關(guān)參數(shù)的界面(見圖3),單擊【Finish】按鈕,這時候就已經(jīng)建立完成一個虛擬機(jī)了。
2.2 虛擬機(jī)配置
虛擬機(jī)配置是指對虛擬機(jī)的硬盤大小、內(nèi)存容量和網(wǎng)絡(luò)類型等各項參數(shù)進(jìn)行設(shè)置修改的過程,虛擬機(jī)安裝完成之后,就可以進(jìn)行虛擬機(jī)配置。具體單擊“Edit virtual machine settings”,開始進(jìn)行參數(shù)設(shè)置,可以對虛擬機(jī)的Devices進(jìn)行配置(見圖4)。
2.3 配置網(wǎng)絡(luò)
配置虛擬機(jī)網(wǎng)絡(luò)也就是搭建Linux編譯開發(fā)環(huán)境,它主要完成三大目標(biāo)任務(wù)。一是目標(biāo)板通過NFS協(xié)議掛接到服務(wù)器的開發(fā)目錄下,二是開發(fā)終端通過串口監(jiān)視目標(biāo)程序的運(yùn)行,三是利用Samba服務(wù)器的開發(fā)目錄映射到終端的一個本地目錄。完成Linux編譯開發(fā)環(huán)境的搭建主要包括準(zhǔn)備源文件、搭建工作目錄、創(chuàng)建系統(tǒng)變量、創(chuàng)建binutils、編譯內(nèi)核以及創(chuàng)建boot-trap gcc、gblic、GCC和G++等過程。
3 軟件系統(tǒng)設(shè)計
3.1 Boot Loader移植
當(dāng)前比較流行的Boot Loader是由韓國Mizi公司開發(fā)的Vivi,它針對ARM9處理器設(shè)計,提供比較完備的命令體系,操作起來十分方便。該文即以Vivi為例來說明Boot Loader的移植過程。
Vivi在通常情況下有兩種工作模式。第一種是啟動加載模式,也稱為自主模式,是 BootLoader的常規(guī)工作模式。這個過程不需要用戶介入,Boot Loader自動從目標(biāo)機(jī)上將操作系統(tǒng)加載到存儲器中運(yùn)行。第二種被稱為下載模式,此時BootLoader會向用戶提供一個命令行接口,目標(biāo)機(jī)通過串口從主機(jī)下載文件。
Vivi既可實現(xiàn)對ARM920T內(nèi)核的支持,也可實現(xiàn)對S3C2410板級的驅(qū)動支持,移植過程并不復(fù)雜。一般要求先下載和安裝源碼包,然后根據(jù)硬件結(jié)構(gòu)、Linux系統(tǒng)版本及編譯工具修改源文件即可,具體包括以下幾個步驟:一是進(jìn)行Vivi中與軟件相關(guān)的修改,二是進(jìn)行Vivi中與硬件有關(guān)的初始化,三是進(jìn)行一些支持Nor Flash和Nang Flash啟動的修改。
3.2 內(nèi)核系統(tǒng)移植
在完成Boot Loader移植之后,就要開始內(nèi)核的移植。Linux內(nèi)核源碼的頂層是usr/src/linux目錄,在此目錄下可以看到大量子目錄。比如存放體系結(jié)構(gòu)相關(guān)核心代碼的arch 目錄,存放用來重構(gòu)核心大文件的include目錄,存放內(nèi)核初始化代碼的init目錄,存放體系結(jié)構(gòu)特有內(nèi)存管理程序的mm目錄以及drivers目錄、ipc目錄、modules目錄、fs目錄等。
ARM Linux內(nèi)核的移植,主要有以下幾個步驟。第一,下載和安裝內(nèi)核源代碼包;第二,下載內(nèi)核補(bǔ)丁程序;第三,內(nèi)核裁剪,并根據(jù)硬件系統(tǒng)的要求修改內(nèi)核,選擇或編寫驅(qū)動程序;第四,編譯并最終生成映像文件。由于不同ARM處理器的內(nèi)核版本不一定相同,所以在移植之前,需要首先選擇一個適合處理器的內(nèi)核。本系統(tǒng)選用具有S3C2410的Linux-2.6.14內(nèi)核,移植過程首先是去官方網(wǎng)站下載Linux-2.6.14內(nèi)核,并通過命令:tarjxvfhnux一2.6.14.tar.bzZ解壓內(nèi)核。接下來修改makefile文件,主要是修改和體系結(jié)構(gòu)相關(guān)的代碼。然后進(jìn)行內(nèi)核編譯,根據(jù)makefile文件的指示,使用make menuconfig:進(jìn)行菜單式配置,組織內(nèi)核各模塊間的關(guān)系,記錄各模塊間的聯(lián)系。
3.3 根文件系統(tǒng)cramfs移植
根文件系統(tǒng)的移植,是嵌入式系統(tǒng)移植的重要內(nèi)容。只有順利完成根文件系統(tǒng)的掛載,嵌入式系統(tǒng)移植才能宣告完成。根文件系統(tǒng)移植一般包括以下步驟:第一,建立文件系統(tǒng)基本目錄結(jié)構(gòu)。最頂端的稱為根目錄/,其它目錄和文件樹根向下分支,如用于存儲二進(jìn)制文件的/bin目錄、存儲管理系統(tǒng)二進(jìn)制文件的/sbin目錄等。第二,復(fù)制基本文件到/sbin目錄。其中最重要的就是init程序,它是保障系統(tǒng)和運(yùn)行的最基本程序,必不可少。此外還包括執(zhí)行進(jìn)程初始化文件/Linuxrc、調(diào)用程序配置網(wǎng)絡(luò)的/mnt/etc/init.d/rcS文件等。第三,配置系統(tǒng)用戶,保證只有通過設(shè)置的特定組的特定用戶才能合法使用系統(tǒng),實現(xiàn)系統(tǒng)的安全性。第四,根據(jù)系統(tǒng)實際應(yīng)用需要,添加相關(guān)應(yīng)用程序和系統(tǒng)設(shè)備文件。
嵌入式系統(tǒng)有多個根文件系統(tǒng)可供選擇,其中Cramfs 是Linus Torvalds開發(fā)的一個具備嵌入式系統(tǒng)基本特性的文件系統(tǒng)。它是只讀的,可以做到高效隨機(jī)讀取,不會降低系統(tǒng)速度,所以在各種根文件系統(tǒng)中是個較好的選擇。cramfs移植首先是把/usr目錄下的全部內(nèi)容制成一個cramfs的Image文件,再把這個Image文件mount上來,然后通過loopback設(shè)備來完成block設(shè)備任務(wù),也就是在/etc/init.d/rcS腳本前面部分加上mount命令,經(jīng)由loopback設(shè)備把這個cramfs的image文件mount到/usr目錄上去。最后生成目錄樹映像文件,根文件系統(tǒng)cramfs也就基本建成了。
4 系統(tǒng)的調(diào)試與集成
嵌入式Linux系統(tǒng)主要有三個Web服務(wù)器,即httpd、thttpd和boa。其中httpd支持超文本協(xié)議,thttpd提供HTTP和簡單的CGI支持。本系統(tǒng)選擇boa Web服務(wù)器,它小巧高效,支持CGI,源代碼開放,非常適合嵌入式系統(tǒng)。實際安裝時,把index.html放置在/etc/boa/web,用C語言編寫CGI程序,名為httpRpmCgi.c。程序通過httpRpmCgi4Nvs (HTTP_REQ_ID reqId) 對CGI參數(shù)要進(jìn)行編碼轉(zhuǎn)換,如+變成空格等,找出retpage參數(shù),用httpGetEnv(“QUERY_STRING”)獲得數(shù)據(jù),再通過arm-Linux-gcc進(jìn)行交叉編譯,將得到的可執(zhí)行文件httpRpmCgi.cgi拷貝到主機(jī)的/etc/boa/cgi-bin,然后用ifconfig設(shè)置目標(biāo)板ip地址為192.168.3.26。啟動Boa服務(wù)器,在瀏覽器地址欄輸入http:// 192.168.3.26/ cgi-bin/httpRpmCgi.cgi,即可看到默認(rèn)頁面。至此,CGI腳本測試通過,嵌入式WebServer移植成功。
參考文獻(xiàn):
[1] 崔永紅,馬德寶.基于ARM的嵌入式WebServer研究與實現(xiàn)[J].微計算機(jī)信息,2008(8).
[2] 金西,黃汪.嵌入式Linux技術(shù)及其應(yīng)用[J].計算機(jī)應(yīng)用,2000(7).
[3] 顧詠楓,陳章龍.嵌入式Linux裁剪方法[J].小型微型計算機(jī)系統(tǒng),2003(9).
[4] 蘇東.主流ARM嵌入式系統(tǒng)設(shè)計技術(shù)與實例精解[M].北京:電子工業(yè)出版社,2007.