作爲一個初入嵌入式學習不久的菜鳥,在這裏寫博客還是挺害羞的。應一起學習的夥伴的要求,同時也想通過某種方式來記錄自己學習過程的點滴,給自己一個督促,給自己一個未來。
下面介紹一下在S3C2440硬件平臺上如何Boa服務器移植完成相應工作,只求勿噴,多多指教。
一、下載Boa源碼
Boa源碼下載地址:http://www.boa.org/或 http://labs.nevion.com/open-source/ 目前最新發行版本:0.94.13(05年更新版本),在linux上下載boa-0.94.13.tar.gz壓縮包, 並將其解壓並進入解壓源碼目錄的src子目錄。
1.#tar zxvf boa-0.94.13.tar.gz
2.#mv boa-0.94.13 boa_arm
3. #cd boa_arm/src
二、配置編譯Boa文件
下面所有操作都在src子目錄下操作
1、#vim defines.h 修改#define SERVER_ROOT "/etc/boa"統一爲“/usr/boa”。
SERVER_ROOT爲boa啓動時的配置文件boa.conf存放路徑,這裏我們統一爲/usr/boa.(其實這個路徑可以不修改,但是記住一定要將boa.conf文件放在到S3C2440硬件平臺上對應的路徑下)
2、生成Makefile文件
#./configure
#vim Makefile 進入vim進行修改交叉編譯器
將:CC= gcc CPP=gcc -E
改爲:CC=arm-linux-gcc CPP=arm-linux-gcc -E
3、修改boa_arm/src/compat.h
找到#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff
爲:#define TIMEZONE_OFFSET(foo) foo->tm_gmtoff 否則在編譯的時候會出現如下所示錯誤:
util.c: 100: 1: pasting"t"and"->"does not give a valid preprocessing token make: [util.o] Error1
4、 修改src/log.c (其實完全可以不改,只要確保日誌目錄對與所有用戶都具有可讀/寫的權限)
if(dup2(error_log, STDERR_FILENO) == -1) {
DIE("unableto dup2 the error log"); }
即修改爲:
#if 0
if (dup2(error_log, STDERR_FILENO) == -1) {
DIE("unable to dup2 the error log"); }
#endif
否則在編譯的時候會出現如下所示錯誤:
log.c:73 unable to dup2 the error log:bad file descriptor
5、修改src/boa.c
註釋掉下面這段程序:
if (passwdbuf == NULL) {
DIE(”getpwuid”);}
if(initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {
DIE(”initgroups”);}
即修改爲:
#if 0
if (passwdbuf == NULL) { DIE(”getpwuid”)}
if(initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {
DIE(”initgroups”);}
#endif
否則在編譯的時候會出現如下所示錯誤:
boa.c:211 - getpwuid: No such file or directory
註釋掉下面語句:
if(setuid(0) != -1) {
DIE(”icky Linux kernel bug!”);}
即修改爲:
#if 0
if(setuid(0) != -1) {
DIE(”icky Linux kernel bug!”);}
#endif
否則在編譯的時候會出現如下所示錯誤:
boa.c:228 - icky Linux kernel bug!: No such file or directory
6、然後運行make進行編譯,就可得到執行程序boa
#make
生成的boa執行文件大小爲175.8KB。通過執行下面命令就可以將文件中調試信息除去,得到一個約60K的boa文件。 #arm-linux-strip boa
之後就可以將boa文件拷到S3C2440硬件平臺上,至於放在哪個目錄下,大家根據自己習慣來在SecureCRT中通過串口就行操作。我是把boa文件放到了bin目錄下。
三、修改配置文件boa.conf(這個修改配置可以在linux下修改也可以在SecureCRT中通過串口就行操作)
以下我是在SecureCRT中操作的(前提是你已經把boa.conf從linux下拷到了開發板上)
1.在開發板/etc目錄下建立/etc/boa目錄, 並複製boa.conf到/etc/boa目錄下,並按照以下步驟進行修改。
#mkdir /etc/boa
#cp boa.conf /etc/boa
#vim boa.conf 進入boa.conf中進行配置
2.訪問端口號設置
Port 80,可以設定我們訪問網頁時的端口號默認爲80—訪問時無需指定,假如改變了此端口號爲8080,必須以下列格式訪問: http://192.168.1.3:8080。一般在同一個電腦上運行多個boa服務器時可採用此方法我們這裏保持默認即可。(這些都是通過些大牛博客上學來的,大家不妨可以試試)
3. 修改訪問權限:
修改User nobody 爲 user 0
修改Group nogroup 爲 group 0
4. 設定日誌目錄:boa日誌有兩部分,Errorlog 和 AccessLog
默認爲/var/log/boa/error_log和/var/log/boa/access_log兩個文件。因爲要移植到開發板上所以我統一修改
ErrorLog /etc/boa/error_log
AccessLog /etc/boa/access_log
5. 設置html文件目錄:
默認爲:DocumentRoot /var/www 我們統一修改爲:
DocumentRoot /etc/boa/www
6. 設置默認首頁: DirectoryIndex index.html
這是訪問網頁時若不指定訪問的網頁名稱,服務器默認返回的網頁,我們不做修改
7. 設置cgi腳本目錄: 將
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin
修改爲
ScriptAlias /cgi-bin/ /etc/boa/cgi-bin
8.ServerName www.your.org.here 可以不修改,一般註釋掉
9. 把mime.types文件複製到開發板/etc/boa目錄。
其實以上修改沒有定式,大家操作時可以根據自己習慣修改相應的目錄即可。最後就比較簡單了,在開發板/etc/boa目錄下創建日誌文件所在目錄/etc/boa/log,創建HTML文檔的主目錄/etc/boa/www,創建CGI腳本所在目錄/etc/boa/cgi-bin.剩下的就可在/etc/boa/www
下放一個自己寫好的.html文件就好了。然後執行boa文件:# /bin/boa。現在就可以連接硬件網絡,在電腦瀏覽器裏訪問已建立好的服務器裏的.html頁面了。須記得IP就是開發板的IP,大家自己#ifconfig 下就可以了。
初次,勿見怪。希望能互相學習。