飛凌OK6410板boa移植 同時還有cgi程序測試

大家都知道飛凌自帶的移植的boa不是很好用,需要自己重新編譯才能運行cgi程序,通過幾天的努力,嘗試網上的一些方法,今天終於能運行cgi程序了。現在把我的配置方法和大家分享。在嘗試的過程中,其中的兩篇博客,給我起到了很好的指引作用。如下:

3、http://blog.csdn.net/tianmohust/article/details/6595996

<一> Boa的編譯

1. 從 www.boa.org 下載 Boa 服務器的最新版:boa-0.94.13.tar.gz。

2. 解壓:tar xzf boa-0.94.13.tar.gz

3. 進入解壓後的文件夾 boa-0.94.13內部的 src文件夾,對源文件進行如下修改

複製代碼
1     由於arm-linux-gcc 編譯器版本過高,對語法的支持有一些改變,所以需要修改compat.h中的
2      #define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff
3 爲:
4 
5      #define TIMEZONE_OFFSET(foo) foo->tm_gmtoff
6 不然在編譯的時候會提示如下錯誤:
7     util.c: 100: 1: pasting “t” and “->” does not give a valid preprocessing token make: [util.o] Error1
複製代碼
複製代碼
 1 將boa.c 文件225-227三行的文件註釋掉
 2  if (setuid(0) != -1) {
 3                         DIE(”icky Linux kernel bug!”);
 4         }
 5  6 /*
 7          if (setuid(0) != -1) {
 8                         DIE(”icky Linux kernel bug!”);
 9                 }
10 */
11 
12 ,否則,但以root權限啓動boa服務器的時候,會出現以下錯誤:boa.c:226 - icky Linux kernel bug!: 
複製代碼

4. 然後生成Makefile:./configure

5. 修改生成的Makefile:默認生成的Makefile針對x86平臺,我們的目標是針對嵌入式平臺,所以需要修改編譯器.

1 更改Makefile的31行和32行:
2 CC = gcc 
3 CPP = gcc -E
4 更改爲
5 CC = arm-linux-gcc
6 CPP = arm-linux-gcc -E

6. 在當前目錄下編譯Boa源文件: make

7. 將生成好的boa可執行文件去掉冗餘信息: arm-linux-strip boa.

<二> 將Boa移植到OK6410中

1. 修改boa.conf配置文件:

我的配置文件如下:

(1)Port 80

(2)User root
    Group root

(3)ServerName 192.168.0.232 (把前面的#去掉,這個ip是自己開發板的ip)

(4)

DocumentRoot /usr/local/boa(這裏放置要顯示的頁面index.html)
(5)AddType application/x-httpd-cgi cgi 
(6)
ScriptAlias /cgi-bin/ /usr/local/boa/cgi-bin/
(這裏放置編譯好的cgi程序)

2. 將配置文件boa.conf 移動到OK6410的 /etc/boa/ 目錄下。

3. 創建/var/log/boa/ 目錄,這樣Boa服務器啓動時會在該目錄下創建日誌文件。

4. 將Linux系統上/etc/mime.types 文件複製到OK6410的/etc 目錄下,否則Boa服務器啓動不起來。

5. 將生成的boa文件移植到嵌入式板中的/sbin目錄下並更改腳本文件 /etc/init.d/rcS, 新增一行: /sbin/boa ,確保boa服務器隨系統上電自啓動。

<三> 測試Boa服務器:

1. 靜態頁面測試:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Boa 靜態網頁測試</title> </head> <body>     <h1>  Welcome to Boa sever! </h1> </body> </html>

2. CGI  程序測試:
#include <stdio.h>
int  main()
{
    printf("Content-type: text/html\n\n");
    printf("<html>\n");
    printf("<head>\n");
    printf("<title>CGI Output</title>\n");
    printf("</head>\n");


    printf("<body>");
    printf("<h1> Hello, world. </h1>");
    printf("</body>");
    printf("</html>\n");
   return 0;
}
一定要經交叉編譯後,再把生產的可執行程序放到cgi-bin文件夾的下面。

上面代碼執行時,可能會出現錯誤提示:

502 Bad Gateway

The CGI was not CGI/1.1 compliant.

可能出現的原因:

1.測試下看是否能瀏覽靜態網頁,以保證網絡是正確的。

在上面“第三步的 2.測試操作”後局域網的PC的IE上輸入http://嵌入式板子的IP地址,如果能顯示RedHat9的歡迎主頁,說明靜態訪問是正確的了。

2.將.cgi文件拷貝至目標板上後,必須改變其權限

chmod 755 test.cgi

否則,上位機瀏覽時會提示上面錯誤

3.最有可能是CGI程序本身的問題。

我們已經看到test.c的打印開頭有使用MIME頭信息″Content type :text/html ″來表示輸出HTML源代碼給Web服務器。請注意任何MIME頭信息後必須有一個空行,就是加了 ,

所以這點必須保證。

4.Test.c的原文件是在文本模式下編輯的,在linux下不能執行

可以改動:dos2unix test.c 改動後再進行編譯

5.還有一種可能,test.cgi被編譯成了動態形式,然而程序執行時在嵌入式中找不到動態庫文件,所以在編譯程序時加上-static,編譯成靜態的形式,但是這樣編譯出來的文件很大,在嵌入式中不適宜採用這種方式。

不再上圖;

至此,boa服務器移植完成。

發佈了4 篇原創文章 · 獲贊 5 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章