嵌入式Web開發——Boa伺服器移植
百度百科上關於 Boa 的說明:
BOA 伺服器是一個小巧高效的 web 伺服器,是一個運行於 unix 或 linux 下的,支援 CGI 的、適合於嵌入式系統的單任務的http伺服器。
原始碼開放、效能高。由於它是一個單任務的 Web 伺服器,只能一次完成使用者的請求,而不會 fork 出新的程序來處理併發的連結請求。但是 Boa 支援 Cgi,能夠為 Cgi 程式 fork 出一個程序來執行相應的客戶請求。
Boa 是一個單任務的 HTTP Web 伺服器,支援認證、CGI 指令碼等,功能比較全,效能比較高。它和傳統 Web 伺服器的主要區別是:它是單程序的,在接到新的 HTTP 請求時並不 fork 出一個新的程序來響應,不能同時處理多個到來的連線,而且不能將自己複製多個副本來處理多連線。它在內部處理所有正在進行的 HTTP 連線請求,只對單獨的 CGI 程式、自動檔案的產生、自動檔案的解壓等請求 fork 出新程序。它的優點是程式碼簡單、速度快、適合於嵌入式應用
值得一提的是,Boa 是一款完全開放原始碼的免費軟體,使用者可以隨時從官方網站上獲取 Boa 的最新版本並編譯運行於不同的作業系統平臺。
(1) 從 Boa 的官方網站(http://www.boa.org)上獲取最新版的軟體原始碼。
(2) 解壓下載的原始碼壓縮包。
(3) 進入解壓目錄的 src/ 目錄下,輸入 ./configure 命令,生成 Makefile 檔案。
(4) 修改 src/compat.h 檔案,將
#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff
修改為
#define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff
(5) 執行 make 命令,即可生成運行於 x86 Linux 平臺的 Boa 二進位制檔案。
(6) 修改 boa.c 檔案,註釋掉
if (passwdbuf == NULL) {
DIE(”getpwuid”);
}
if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {
DIE(”initgroups”);
}
和
if (setuid(0) != -1) {
DIE(”icky Linux kernel bug!”);
}
(7) 修改 Makefile 檔案,將
CC=gcc
CPP=gcc -E
改為實際使用的編譯工具鏈,如
CC=arm-linux-gcc
CPP=$(CC) -E
(8) 執行 make clean,再執行 make 命令,即可生成運行於 ARM Linux 平臺的 Boa 二進位制檔案。
Boa 配置
完成上面步驟後還無法啟動 Boa 服務,因為還未對 Boa 進行配置,需要對 boa.conf 檔案進行相應的配置才行。