前幾天鼓搗了一個(gè)統(tǒng)計(jì)網(wǎng)絡(luò)流量的軟件,叫Bandwidthd。用起來之后發(fā)現(xiàn)這個(gè)軟件很好,界面比較友好。就想把這個(gè)東西弄到開發(fā)板上玩玩,如果移植成功的話,那開發(fā)板不就變成一個(gè)網(wǎng)絡(luò)流量統(tǒng)計(jì)器了么。不過這個(gè)軟件的分析報(bào)告是通過Web方式給出的。那么就必須得在運(yùn)行Bandwidthd的機(jī)器上開一個(gè)Web服務(wù)器,在普通的環(huán)境下可以使用httpd,但是在板子上就不好用了,太龐大。于是我就找了一個(gè)小型的嵌入式Web Server,也就是今天這篇文章的主角——appWeb
appWeb有兩種許可,一種是GPL,免費(fèi)的,另外一種是商業(yè)許可,有30天的試用期。免費(fèi)的版本在www. 下載,appWeb的商業(yè)版本由Mbedthis公司發(fā)布和維護(hù),網(wǎng)址是 www.
一般情況下使用免費(fèi)的版本就可以了,appWeb的性能非常的優(yōu)秀,其特點(diǎn)可以到網(wǎng)站上查閱,這里不多說。下面切入正題,如何移植appWeb到ARM開發(fā)板。
appWeb的源碼包中有個(gè)很關(guān)鍵的工具,就是configure。如果configure配置好了,那么無需手動(dòng)修改Makefile就可以正確的交叉編譯出ARM格式的可執(zhí)行文件。在configure之前需要設(shè)置幾個(gè)關(guān)鍵的環(huán)境變量,這些環(huán)境變量的值將被configure程序讀取然后應(yīng)用到編譯里去,變量如下:
CC,AR,LD,RANLIB,STRIP //此5個(gè)須設(shè)置成交叉編譯工具的所在位置
CC_FOR_BUILD //這個(gè)設(shè)置成主機(jī)上的gcc
我用的是handhelds.org的toolchain,因此進(jìn)行如下設(shè)置:
#export CC=/usr/local/arm/3.4.1/bin/arm-linux-gcc
#export AR=/usr/local/arm/3.4.1/bin/arm-linux-ar
#export LD=/usr/local/arm/3.4.1/bin/arm-linux-ld
#export RANLIB=/usr/local/arm/3.4.1/bin/arm-linux-ranlib
#export STRIP=/usr/local/arm/3.4.1/bin/arm-linux-strip
#export CC_FOR_BUILD=gcc
設(shè)置好后進(jìn)行configure。configure提供了很多的參數(shù),具體的可以參考appWeb網(wǎng)站上的安裝說明,地址是 http://www./products/appWeb/doc/product/index.html
下面給出我的configure參數(shù):
#./configure --host=arm-s3c2410-linux --build=i686-pc-linux \
--disable-shared --disable-shared-libc --enable-static \
--port=80 --disable-multi-thread --type=RELEASE \
--prefix=/usr/appWeb --webDir=/var/web \
--disable-test --disable-samples
這里的參數(shù)在appWeb的網(wǎng)站上都有說明。需要指出的是,--host參數(shù)設(shè)定目標(biāo)板的類型,這里用的是arm-s3c2410-linux,就是說在ARM平臺(tái)上的Linux系統(tǒng)。而--build才是說明宿主機(jī)的平臺(tái),這里是i686-pc-linux,就是說在一臺(tái)裝有Linux的PC上進(jìn)行交叉編譯。我把a(bǔ)ppWeb編譯成了一個(gè)靜態(tài)的版本,這樣會(huì)省去很多加載動(dòng)態(tài)庫的麻煩。--disable-test --disable-samples兩個(gè)參數(shù)是說編譯的時(shí)候取消測試和例子,不知為什么,在我的環(huán)境中如果不取消這兩個(gè)東西,編譯這兩個(gè)東西的時(shí)候會(huì)產(chǎn)生錯(cuò)誤。
然后就make吧
#make
成功之后make install
#make install
程序會(huì)被安裝到3個(gè)位置,一個(gè)是可執(zhí)行程序的位置,一個(gè)是--prefix指定的程序主目錄,我這里是/usr/sbin和/usr/appWeb,還有一個(gè)就是放html的WebDir了。在/usr/sbin中的是編譯出的正常版本,appWeb。但是這個(gè)不是我需要的全靜態(tài)版本,于是到/appWeb源代碼目錄/bin下找到一個(gè)叫做appWebStatic的程序,把它c(diǎn)p出來。
接下來就是建立一個(gè)nfs的共享目錄了,就起名叫/share吧。關(guān)于NFS的配置和使用不是本文的內(nèi)容,所以不多說。然后把/usr/appWeb里的所有東西都cp到share下,把a(bǔ)ppWebStatic也cp過來,最后在share中建立一個(gè)web目錄,這是appWeb讀取html的默認(rèn)位置,在web中隨便寫個(gè)test.html做測試用。
測試appWeb。還是老一套,把開發(fā)板用網(wǎng)線連上hub,直接連主機(jī)也行。接上串口,在Linux下開minicom連開發(fā)板,連上之后在開發(fā)板的shell下mount主機(jī)的nfs目錄。
#mount -t nfs 主機(jī)IP:/share /tmp/nfs
#cd /tmp/nfs
#./appWebStatic
如果一切正常的話web server就起來了,然后在主機(jī)上用elinks或者別的什么瀏覽器來瀏覽一下網(wǎng)頁,
#elinks 開發(fā)板IP/test.html
應(yīng)該可以看見網(wǎng)頁了,到此所有主要步驟完成。
接下來就是修改cramfs,把a(bǔ)ppWebStatic加到文件系統(tǒng)中,然后把cramfs燒到板子上就Ok了。這些步驟也不贅述了。
結(jié)語:
1)appWeb天生是給嵌入式設(shè)備用的,支持ARM平臺(tái),所以移植起來很方便,只要正確的進(jìn)行configure基本就行了
2)appWeb源碼目錄下有兩個(gè)文件,config.h和config.make。這兩個(gè)文件其實(shí)就是configure的結(jié)果,Makefile就是用他們來編譯程序的。如果感覺使用configure不方便,直接手動(dòng)修改也行,雖然官方不推薦這樣做
2)移植appWeb的目的是為了用Bandwidthd,但是Bandwidthd比較難移植,這個(gè)目前正在嘗試中。
3)開發(fā)板上必須要有功能比較完整的Linux系統(tǒng),這樣方便測試,比如使用U盤或者NFS來測試應(yīng)用程序。
5)還是那句話,嵌入式不是一開始就非做底層不可,做做應(yīng)用,移植移植程序在板子上跑跑即好玩,還能很好的入門。
|
|