在JZ2440板上關於一直Boa伺服器的一點心得總結
作為一個初入嵌入式學習不久的菜鳥,在這裡寫部落格還是挺害羞的。應一起學習的夥伴的要求,同時也想通過某種方式來記錄自己學習過程的點滴,給自己一個督促,給自己一個未來。
下面介紹一下在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 下就可以了。
初次,勿見怪。希望能互相學習。