1、嵌入式Web的應(yīng)用。在嵌入式設(shè)備的管理與交互中,基于Web方式的應(yīng)用成為目前的主流,這種程序結(jié)構(gòu)也就是大家非常熟悉的C/S結(jié)構(gòu),即在嵌入式設(shè)備上運(yùn)行一個(gè)支持腳本或CGI功能的Web服務(wù)器,能夠生成動(dòng)態(tài)頁(yè)面,在用戶端只需要通過Web瀏覽器就可以對(duì)嵌入式設(shè)備進(jìn)行管理和監(jiān)控,非常方便實(shí)用。
2、嵌入式服務(wù)器的選擇。由于嵌入式設(shè)備資源一般都比較有限,并且也不需要能同時(shí)處理很多用戶的請(qǐng)求,因此不會(huì)使用Linux下最常用的如Apache等服務(wù)器,而需要使用一些專門為嵌入式設(shè)備設(shè)計(jì)的Web服務(wù)器,這些Web服務(wù)器在存貯空間和運(yùn)行時(shí)所占有的內(nèi)存空間上都會(huì)非常適合于嵌入式應(yīng)用場(chǎng)合。常見的嵌入式Web服務(wù)器主要有:lighttpd、thttpd、shttpd和BOA等。
3、Boa是一個(gè)非常小巧的web服務(wù)器,其可執(zhí)行代碼只有約60Kb,它是一個(gè)單任務(wù)的服務(wù)器,只能依次完成用戶的請(qǐng)求,而不會(huì)fork出新的進(jìn)程處理并發(fā)的連接請(qǐng)求。但Boa支持CGI,能夠?yàn)镃GI程序fork出一個(gè)進(jìn)程來執(zhí)行,Boa設(shè)計(jì)目標(biāo)是速度與安全。
硬件環(huán)境:SBC-S2416單板機(jī)
軟件環(huán)境:
1、PC端:win7下VirtualBox虛擬機(jī)+xubuntu系統(tǒng)。具備基本的GCC編譯環(huán)境,能夠執(zhí)行configure產(chǎn)生Makefile;系統(tǒng)中已搭建好交叉編譯環(huán)境。
相比于普通的PC機(jī),嵌入式的硬件資源相當(dāng)?shù)挠邢蓿豢赡苓M(jìn)行本地的開發(fā)。因而,嵌入式的軟件開發(fā)和調(diào)試過程通常是在PC機(jī)上實(shí)現(xiàn)的。這樣就形成了一套在PC機(jī)上交叉編譯,然后生成目標(biāo)機(jī)平臺(tái)的格式,最后在目標(biāo)機(jī)上執(zhí)行的開發(fā)流程,也就是所謂的交叉編譯環(huán)境。
2、移植嵌入式Linux系統(tǒng)到開發(fā)板上。
Boa搭建過程:
1、下載boa-0.94.13.tar,執(zhí)行tar解壓命令
2、在解壓后的src目錄下,執(zhí)行./configure生成MakeFile
3、MakeFile中31、32行,路徑改成交叉編譯路徑。
CC = /usr/local/arm/arm-2014.05/bin/arm-none-linux-gnueabi-gcc?
CPP = /usr/local/arm/arm-2014.05/bin/arm-none-linux-gnueabi-gcc -E
4、執(zhí)行Make編譯命令,生成可執(zhí)行文件boa,可以用file boa查看。
出現(xiàn)的錯(cuò)誤:
(1)提示:make: yacc: 命令未找到 ? ? ? ? ? ? ? ?make: *** [y.tab.c] 錯(cuò)誤127
原因:沒有安裝yacc
解決方法:執(zhí)行apt-get install bison命令(可能需要管理員權(quán)限sudo)?;蛘呦螺dbyacc-1.9.tar.gz,編譯生成yacc,拷貝到/usr/local/bin/下。
(2)提示:make: lex: 命令未找到 ? ? ? ? ? ? ? ? ? make: *** [lex.yy.c] 錯(cuò)誤 127
原因:沒有安裝lex程序
解決方法:執(zhí)行apt-get install flex命令?;蛘呦螺dflex-2.5.37.tar.gz,編譯生成flex,然后改名為lex,將lex拷貝到 /usr/local/bin/下。
(3)提示:make ***[util.0] 錯(cuò)誤1
解決方法:編輯src下的compat.h文件,大概120行處的
#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff 改為
#define TIMEZONE_OFFSET(foo) foo->tm_gmtoff
(4)提示:
解決方法:編輯src下的boa.c文件,注釋掉225-227行
#if 0
if (setuid(0) != -1) {
DIE("icky Linux kernel bug!");
}
#endif
5、將boa拷貝到目標(biāo)板的/bin下。(etc/boa下?)
6、配置。參考鏈接。修改boa-0.94.13文件夾下的boa.conf,放入etc/boa下(此目錄在src下difines.h文件中指定#define SERVER_ROOT "/etc/boa"),常見參數(shù):
Port端口
User(48行)默認(rèn)nobody,改為root?
Group(49行)默認(rèn)nogroup,改為root?
ErrorLog(62行)默認(rèn)/var/log/boa/error_log,需要手動(dòng)建立/var/log/boa目錄
AccessLog(74行)默認(rèn)/var/log/boa/access_log,需要手動(dòng)建立/var/log/boa目錄
(94行)ServerName www.your.org.here前注解#去掉 ?
DocumentRoot(111行)默認(rèn)/var/www,需手動(dòng)建立目錄
DirectoryIndex(123行)默認(rèn)index.html
MimeTypes(155行)默認(rèn)/etc/mime.types,需將虛擬機(jī)中該文件拷貝至目標(biāo)機(jī)相同路徑下
ScriptAlias(193行)默認(rèn)/cgi-bin/ /usr/lib/cgi-bin/,需手動(dòng)建立目錄,本文中修改至/var/www/cgi-bin
7、程序運(yùn)行。(如果boa搭建在虛擬機(jī)中,即非交叉編譯,本文中要在目標(biāo)板上搭建,執(zhí)行$ ./boa?-c `pwd`,-c表示指定boa.conf的路徑,默認(rèn)的路徑是/etc/boa/,`pwd`得到的是當(dāng)前路徑。參見鏈接。)
目標(biāo)機(jī)執(zhí)行 boa&
8、相關(guān)命令。
fdisk -l 顯示掛載的存儲(chǔ)設(shè)備,本文用來找U盤
mount /dev/‘U盤名’ /mnt 復(fù)制U盤內(nèi)容到mnt
cp ‘文件’ ‘路徑’ 復(fù)制
ifconfig -a 查看網(wǎng)絡(luò)信息,IP、MAC等
mv ’文件’ ‘路徑’ 移動(dòng)文件,本文用來重命名
后記:想繼續(xù)探索的問題:1、需要管理員權(quán)限的命令,前面加sudo后,輸入密碼可執(zhí)行。Linux的用戶名和用戶組權(quán)限是怎么回事。
?
評(píng)論