移植Boa Web服務器到ARM-Linux系統

本次移植的主要參考資料:
 
1、 《嵌入式Web服務器移植 》 是網上一份Boa移植文檔,比較全面。本文檔就是基本參照它來寫的。基本上上可以說是這篇文章的修改版,增加了我的移植經驗。由於這篇文章被轉載得到處都是,我實在無法找到出處。在這裏衷心的感謝文章作者!!我所做的修改和遇到的問題將在文章最後貼出來。
 
2、 《構建嵌入式Linux系統》 的第十章 設置網絡服務 中的Boa移植部分。

一、Boa程序的移植

1、下載Boa源碼
    下載地址:
http://www.boa.org/
    目前最新發行版本: 0.94.13   (幾年沒更新版本了)
    下載 boa-0.94.13.tar.gz,

注意:若從boa上下載的是boa-0.94.13.tar.tar,解壓方式一樣
    解壓:

[ tekkamanninja@Tekkaman- Ninja source] $ tar xzf boa- 0. 94. 13. tar. gz

2、生成Makefile文件
   進入boa- 0. 94. 13, 直接運行src/configure文件

[ tekkamanninja@Tekkaman- Ninja src] $./configure

3、修改Makefile文件(注意:必須用cross-2.95.3, 如使用3.4.1、4.1.1等等會出錯)

CC = / home/ tekkamanninja/ working/ source/ 2. 95. 3/ bin/ arm- linux- gcc
CPP = / home/ tekkamanninja/ working/ source/ 2. 95. 3/ bin/ arm- linux- gcc - E


4、交叉編譯

[ tekkamanninja@Tekkaman- Ninja src] $ make

5、去除調試信息,減小體積。(可選)

[ tekkamanninja@Tekkaman- Ninja src] $ / home/ tekkamanninja/ working/ source/ 2. 95. 3/ bin/ arm- linux- strip boa

6、將編譯好的程序放入根文件系統的/bin目錄下。

[ tekkamanninja@Tekkaman- Ninja src] $ cp boa / home/ tekkamanninja/ working/nfs/rootfs / bin/

  

二、配置Boa

Boa需要在/etc目錄下建立一個boa目錄,裏面放入Boa的主要配置文件boa.conf。 在Boa源碼目錄下已有一個示例boa.conf ,可以在其基礎上進行修改。

[ tekkamanninja@Tekkaman- Ninja src] $ cd . . / . .
[ tekkamanninja@Tekkaman- Ninja source] $ cd . . / nfs/ rootfs/ etc/
[ tekkamanninja@Tekkaman- Ninja etc] $ mkdir boa
[ tekkamanninja@Tekkaman- Ninja etc] $ chmod 777 boa/
[ tekkamanninja@Tekkaman- Ninja etc] $ cd boa
[ tekkamanninja@Tekkaman- Ninja boa] $ kwrite boa. conf

1、Group的修改

修改 Group nogroup
Group user (開發板上有的組)
修改 User nobody
User boa (user組中的一個成員)
根據你的開發板的情況設定。一定要存在的組和用戶。
 
以下是我在開發板上的操作:

[ root@~ ] # adduser - g user boa
Changing password for boa
Enter the new password ( minimum of 5, maximum of 8 characters)
Please use a combination of upper and lower case letters and numbers.
Enter new password:
Bad password: too short .

Warning: weak password ( continuing) .
Re- enter new password:
passwd[ 820] : password for `boa' changed by user `root'
Password changed.
[ root@~ ] #

2、ScriptAlias的修改

修改 ScriptAlias /cgi-bin/  /usr/lib/cgi-bin/
爲 ScriptAlias /cgi-bin/  /var/www/cgi-bin/

這是在設置CGI的目錄,你也可以設置成別的目錄。比如用戶文件夾下的某個目錄。

3、ServerName的設置

修改 #ServerName www.your.org.here
爲 ServerName www.your.org.here

注意:該項默認爲未打開,執行Boa會異常退出,提示“gethostbyname::No such file or directory”,所以必須打開。其它默認設置即可。你也可以設置爲你自己想要的名字。比如我設置爲: ServerName tekkaman2440

此外,還需要:

mime.types 文件複製/etc 目錄下,通常可以從linux主機的 /etc目錄下直接複製即可。

(以下配置和boa.conf 的配置有關)

創建日誌文件所在目錄/var/log/boa

創建HTML文檔的主目錄/var/www

創建CGI腳本所在錄 /var/www/cgi-bin

[ tekkamanninja@Tekkaman- Ninja log ] $ mkdir - m 777 boa
[ tekkamanninja@Tekkaman- Ninja log ] $ cd . .
[ tekkamanninja@Tekkaman- Ninja var] $ mkdir - m 777 www
[ tekkamanninja@Tekkaman- Ninja var] $ mkdir - m 777 www/ cgi- bin
[ tekkamanninja@Tekkaman- Ninja var] $ cd . .
[ tekkamanninja@Tekkaman- Ninja rootfs] $ cp / etc/ mime. types etc/

三、運行Boa

開發板操作:

[root@~]# boa

如果發現boa沒有運行,則可以在開發板的/var/log/boa/error_log文件中找原因。

比如端口已被其他程序佔用:

[ root@~ ] # cat / var/ log / boa/ error_log
[ 20/ Feb/ 2008: 21: 21: 57 + 0000] boa. c: 194 - unable to bind : Address already in use

或是用戶設置錯誤等等,都可以查到。


四、功能測試

靜態網頁測試

將靜態網頁存入根文件系統的/var/www 目錄下(可以將主機 /usr/share/doc/HTML/目錄下的index.html、homepage.css和img、stylesheet-images目錄複製到/var/www目錄下)

我參考《嵌入式Web服務器移植 》 的做法如下:

在根文件系統的/var 目錄下

[ tekkamanninja@Tekkaman- Ninja var] $ cp / usr/ share/ doc/ HTML/ index. html www/
[ tekkamanninja@Tekkaman- Ninja var] $ cp - r / usr/ share/ doc/ HTML/ img www/
[ tekkamanninja@Tekkaman- Ninja var] $ cp / usr/ share/ doc/ HTML/ homepage. css www/
[ tekkamanninja@Tekkaman- Ninja var] $ cp - r / usr/ share/ doc/ HTML/ stylesheet- images www/

直接在瀏覽器中輸入開發板的IP地址(比如我的是http://192.168.1.2 ) ,出現fedora的歡迎網頁。靜態HTML調試成功。

CGI功能測試

1、編寫HelloworldCGI.c程序

[tekkamanninja@Tekkaman-Ninja source]$ vi helloworldCGI.c

(主程序的程序開頭一定要用Tab,而不是空格,不然編譯可能不通過)

# include < stdio. h>
# include < stdlib. h>
int main( void )
{
        printf ( "Content-type: text/html/n/n" ) ;
        printf ( "<html>/n" ) ;
        printf ( "<head><title>CGI Output</title></head>/n" ) ;
        printf ( "<body>/n" ) ;
        printf ( "<h1>Hello,world.</h1>/n" ) ;
        printf ( "<body>/n" ) ;
        printf ( "</html>/n" ) ;
        exit ( 0) ;
}

2.交叉編譯生成CGI程序

[ tekkamanninja@Tekkaman- Ninja source] $ / home/ tekkamanninja/ working/ gcc4. 1. 1/ gcc- 4. 1. 1- glibc- 2. 3. 2/ arm- 9tdmi- linux- gnu/ bin/ arm- 9tdmi- linux- gnu- gcc - o helloworldCGI helloworldCGI. c

將helloworldCGI 拷貝至根文件系統的/var/www/cgi-bin/下

[ tekkamanninja@Tekkaman- Ninja source] $ cp helloworldCGI . . / nfs/ rootfs/ var/ www/ cgi- bin/

3.測試

瀏覽器輸入
   http://192.168.1.2/cgi-bin/helloworldCGI

網頁出現 Hello,world. 調試成功!

 

我遇到的問題:

1、Could not chdir to "/etc/boa": aborting

因爲板子上 /etc 不可寫 ,所以就改文件了

修改boa-0.94.13/src/defines.h  第30行:將/etc/boa 改爲你自己的目錄 我的是 /mnt/yaffs/boa。

2、log.c:73 - unable to dup2 the error log: Bad file

修改boa-0.94.13/src/log.c 第72-74行:將 該if 語句註釋掉

3、boa.c:226 - icky Linux kernel bug!: No such file o...

修改boa-0.94.13/src/boa.c 第225-227行:將該 if 語句註釋掉

這樣編譯、修改、編譯了n次之後終於搞定!

 

另外:

關於boa.conf 文件的問題直接貼出我的:

Port 80
User root
Group root
ErrorLog /var/log/boa/error_log
ServerName 10.10.19.123
DocumentRoot /mnt/yaffs/boa/www
UserDir public_html
DirectoryIndex index.html
DirectoryMaker /mnt/yaffs/boa/boa_indexer
KeepAliveMax 1000
KeepAliveTimeout 10
MimeTypes /mnt/yaffs/boa/mime.types
DefaultType text/plain
CGIPath /bin:/usr/bin:/usr/local/bin
Alias /doc /usr/doc
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

 

由於板子重啓之後,boa.conf的內容開頭就變了,boa無法運行, 我在開頭和末尾都加了很多行無用的註釋,這個問題就解決了!

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章