在嵌入式Linux系統(OK6410)中移植Boa伺服器
阿新 • • 發佈:2019-02-05
OK6410的Boa伺服器移植:
<一> 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資料夾,對原始檔進行如下修改
由於arm-linux-gcc 編譯器版本過高,對語法的支援有一些改變,所以需要修改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
將boa.c 檔案225-227三行的檔案註釋掉
if (setuid(0) != -1) {
DIE(”icky Linux kernel bug!”);
}
為
/*
if (setuid(0) != -1) {
DIE(”icky Linux kernel bug!”);
}
*/
,否則以root許可權啟動boa伺服器的時候,會出現以下錯誤:boa.c:226 - icky Linux kernel bug!:
4. 然後生成Makefile:./configure
5. 修改生成的Makefile:預設生成的Makefile針對x86平臺,我們的目標是針對嵌入式平臺,所以需要修改編譯器.
更改Makefile的31行和32行:
CC = gcc
CPP = gcc -E
更改為
CC = arm-linux-gcc
CPP = arm-linux-gcc -E
更改Makefile
6. 在當前目錄下編譯Boa原始檔: make
7. 將生成好的boa可執行檔案去掉冗餘資訊: arm-linux-strip boa. 如下圖為strip 前後boa的大小對比。
<二> 將Boa移植到OK6410中
1. 修改boa.conf配置檔案:
(1) 修改25行的port埠,用來設定伺服器監聽的埠: # Port: The port Boa runs on. The default port for http servers is 80. # If it is less than 1024, the server must be started as root. Port 80 (2) 註釋43行的監聽IP地址:預設監聽該主機上的所有IP地址 #Listen 192.68.0.5 (3) 修改53、54行的user和Group 啟動的UID和GID,使其以root身份啟動 # User: The name or UID the server should run as. # Group: The group name or GID the server should run as. User root Group root (4) 修改116行的DocumentRoot地址,即客戶端要顯示的HTML頁面存放位置 # DocumentRoot: The root directory of the HTML documents. # Comment out to disable server non user files. DocumentRoot /usr/local/boa (5) 修改輸入網頁輸入主機IP時要顯示的頁面:這裡設為index.html # DirectoryIndex: Name of the file to use as a pre-written HTML # directory index. Please MAKE AND USE THESE FILES. On the # fly creation of directory indexes can be _slow_. # Comment out to always use DirectoryMaker DirectoryIndex index.html (6) 修改CGI程式存放的位置:以http://IP/cgi-bin/cginame 的方式執行cgi 程式時將在/usr/local/boa/cgi-bin 目錄下尋找該程式 # ScriptAlias: Maps a virtual path to a directory for serving scripts # Example: ScriptAlias /htbin/ /www/htbin/ ScriptAlias /cgi-bin/ /usr/local/boa/cgi-bin/
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伺服器並不能隨系統啟動,執行 /sbin/boa 命令會提示:
gethostbyname:: Success
這種情況下要修改boa.conf 檔案
將
#ServerName www.your.org.here
改為
ServerName www.your.org.here
即去掉註釋即可
<三> 測試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;
}
至此,Boa伺服器移植完成。