嵌入式web伺服器boa的編譯移植
Linux下Boa伺服器移植,交叉編譯boa併成功移植到FL2440開發板上,並且CGI程式執行正常。
主機環境:redhat9
交叉編譯器:arm-linux-gcc 3.4.1
BOA版本:0.94.13
平臺:s3c2440
一:下載原始碼:從http://www.boa.org/官方網站下載原始碼,並將原始碼放置在/src 目錄下。
[[email protected] EmbedSky ~]# cd /usr/src進入原始碼目錄
[[email protected] EmbedSky src]# tar zxvf boa-0.94.13.tar.tar解壓原始碼壓縮包
[[email protected]
[[email protected] EmbedSkyboa-0.94.13]# cd src
[[email protected] EmbedSky src]# ./configure生成makefile
二:編譯前修改的檔案:
1. 修改Makefile檔案,找到CC=gcc和CPP=gcc -E,分別將其改為交叉編譯器安裝的路徑:
CC=/usr/local/arm/2.95.3/bin/arm-linux-gcc
CPP=/usr/local/arm/2.95.3/bin/arm-linux-g++
儲存退出。
2. 修改編譯方式
LDFLAGS = -g –static
注: 使用靜態編譯可以讓目標檔案自動的包含所需要的
庫檔案,而動態編譯需要手工拷貝庫檔案。
3.修改/src/defines.h檔案:
#define SERVER_ROOT "/etc/boa"
4 修改boa-0.94/src/ util.c檔案
修改char *get_commonlog_time(void)函式。
time_offset = 0;
5. 修改src/config.c:加Current_uid=1
6. 修改compat.h:把第120 行的
#define
TIMEZONE_OFFSET(foo)foo##->tm_gmtoff
修改為:
#define
TIMEZONE_OFFSET(foo)foo->tm_gmtoff
7.修改/src/boa.c,註釋掉下面兩行:
/* if (setuid(0) != -1) {
DIE("icky Linux kernel bug!")} */
/*if (passwdbuf == NULL) {
DIE("getpwuid");}*/
8 gethostbyname:: Resource temporarily unavailable
這個問題我也遇到過,我只是把src資料夾下的config.c裡的if(!server_name){..........}(大概在266行到286行之間)註釋掉,就能執行在板子上執行boa。
解決:config.c
/*if (!server_name) {
struct hostent *he;
char temp_name[100];
if (gethostname(temp_name, 100) == -1) {
perror("gethostname:");
exit(1);}
he = gethostbyname(temp_name);
if (he == NULL) {
perror("gethostbyname:");
exit(1);}
server_name = strdup(he->h_name);
if (server_name == NULL) {
perror("strdup:");
exit(1);}}*/
9. /src/log.c中的修改:註釋掉:
/*if (dup2(error_log, STDERR_FILENO) == -1) {
DIE("unable to dup2 the error log");
} */
10. 在boa.conf中的修改:
(1) ServerName的設定
修改#ServerName www.your.org.here
為 ServerName www.your.org.here
注意:該項預設為未開啟,執行Boa會異常退出,提示“gethostbyname::No such file or directory”,所以必須開啟。其它預設設定即可。
注意:以下是為改為下面這樣的:
(2)User與Group的修改:
User 0
Group 0
(3)ErrorLog /var/log/boa/error_log
AccessLog /var/log/boa/access_log
(4)DocumentRoot /var/www
(5)DirectoryIndex index.html
(6)KeepAliveMax 1000
KeepAliveTimeout 10
(7)MimeTypes /etc/mime.types
(8)ScriptAlias /cgi-bin//var/www/cgi-bin/
11. 此外,還需要將mime.types檔案複製目標板根檔案系統/etc目錄下,通常可以從linux主機的 /etc目錄下直接複製即可。
三:執行make進行編譯,得到可執行的程式boa
[[email protected] EmbedSky boa-0.94.13]# cd /usr/src/boa-0.94.13/src
[[email protected] EmbedSky src]# make clean
rm -f y.tab.o lex.yy.o alias.o boa.o buffer.o cgi.o cgi_header.o config.o escape.o get.o hash.o ip.o log.o mmap_cache.o pipe.o queue.o read.o request.o response.o select.o signals.o util.o sublog.o timestamp.o boa core lex.yy.c y.tab.c y.tab.h *~ boa_indexer index_dir.o
[[email protected] src]# make
去掉除錯資訊: # /usr/src/usr/local/arm/3.4.1/bin/arm-linux-strip boa
四:安裝Boa及配置檔案的修改:
利用超級終端經串列埠向arm板傳送配置檔案。
1. 將編譯得出的可執行檔案/boa-0.94.13/src中的boa檔案,拷到/sbin目錄下。
2. 在/var下新建log和www目錄:
#cd /var
# mkdir log// 建立日誌檔案所在目錄
# mkdir www//建立HTML文件的主目錄
#cd log
# mkdir boa
#cd /var/www
# mkdir cgi-bin//建立CGI指令碼所在錄
#mkdir img//建立圖片所在目錄
將index.html檔案拷到/var/www下
# chmod 777 /var/log/* //檔案許可權設定777表示所有人都可讀、可寫、可執行
# chmod 777 /var/www/*
3. 在/etc下新建目錄boa
# mkdir /etc/boa
將/boa-0.94.13中的boa.conf檔案拷到/etc/boa下
# chmod 777 /etc/boa/*
4.arm板的ip地址的配置:
# ifconfig eth0 172.20.182.92 netmask 255.255.255.0
5.pc機的ip地址設定:
ip address 172.20.182.82
subnet mask255.255.255.0
default gateway172.20.182.254
dns servers61.138.125.65
(pc機的ip網路設定可以直接連上校園網路,只需換上網線即可,方便快捷);
五:執行及功能測試:
# boa&
# [01/Jan/1970:06:59:44 +0000] boa: server version Boa/0.94.13 //版本號
[01/Jan/1970:06:59:44 +0000] foa: server built Dec 12 2011 at 16:54:43. //啟動時間
[01/Jan/1970:06:59:44 +0000] boa: starting server pid=573, port 80 //程序號573 埠80
[1] + Doneboa
# ps//顯示所有程序
PIDUidVSZ Stat Command
1 root1816 SWinit
2 rootSWN [ksoftirqd/0]
3 rootSW< [events/0]
4 rootSW< [khelper]
5 rootSW< [kthread]
21 rootSW< [kblockd/0]
24 rootSW[khubd]
77 rootSW[pdflush]
78 rootSW[pdflush]
80 rootSW< [aio/0]
79 rootSW[kswapd0]
286 root SW[kseriod]
340 rootSW[mtdblockd]
376 rootSW< [krfcommd]
396 root19844 SW./qpe
397 root$1828 SW-sh
398 root1816 SWinit
414 root9008 SW< /usr/bin/qss
456 root1820 SW/bin/sh
538 root13096 SWN /usr/bin/quicklauncher
573 root2116 SWboa// boa伺服器移植執行成功!!!
574 root1820 RWps
網線接入:
# eth0: link up, 100Mbps, full-duplex, lpa 0xCDE1
[01/Jan/1970:07:00:37 +0000] request from 172.20.182.82 "GET /images/bg01.gif HTTP/1.5" ("/var/www/images/bg01.gif"): document open: No such file or directory
[01/Jan/1970:07:00:42 +0000] request from 172.20.182.82 "GET /favicon.ico HTTP/1.1" ("/var/www/favicon.ico"): document open: No such file or directory
[01/Jan/1970:07:01:50 +0000] request from 172.20.182.82 "GET /images/bg01.gif HTTP/1.1" ("/var/www/images/bg01.gif"): document open: No such file or director}
[01/Jan/1970:07:01:53 +0000] request from 172.20.182.82 "GET /favicon.ico HTTP/1.1" ("/var/www/favicon.ico"): document open: No such file or directory
[01/Jan/1970:07:03:10 +0000] request from 172.20.182.82 "GET /favicon.ico HTTP/1
.1" ("/var/www/favicon.ico"): document open: No such file or directory
靜態網頁測試:將靜態網頁存入根檔案系統的/var/www目錄下
開啟IE瀏覽器,輸入網址: http://172.20.182.91/pengtiegang.html
重新輸入網址: http://172.20.182.92/index.html
CGI功能測試:將交叉編譯好的cgictest.cgi測試程式存入根檔案系統的/var/www/cgi-bin/下
再次輸入:http://172.20.182.92/cgi-bin/cgictest.cgi
結果如下所示:
PC機上可以看到/var/www目錄下的網頁和執行/var/www/cgi-bin/目錄下的CGI程式順暢。
中途出現的問題:出現記憶體錯誤的有下列幾種
1.檔案系統中的庫不全,有人用開發板自帶的庫就可以,後來調整自己檔案系統的庫
2.函式指標錯誤,修改原始碼過程造成
3.交叉編譯器問題,就如這個。
重新編譯:
[[email protected] src]# make clean
[[email protected] src]# make
bison -y -d boa_grammar.y
/usr/local/arm/3.4.1/bin/arm-linux-gcc -g -O2 -pipe -Wall -I.-c -o y.tab.o y.tab.c
y.tab.c: In function `yyparse':
y.tab.c:1295: warning: implicit declaration of function `yylex'
flex boa_lexer.l
/usr/local/arm/3.4.1/bin/arm-linux-gcc -g -O2 -pipe -Wall -I.-c -o lex.yy.o lex.yy.c
..............................
lex.yy.c:1246: warning: 'yyunput' defined but not used
/usr/local/arm/3.4.1/bin/arm-linux-gcc -g -O2 -pipe -Wall -I.-c -o alias.o alias.c
/usr/local/arm/3.4.1/bin/arm-linux-gcc -g -O2 -pipe -Wall -I.-c -o boa.o boa.c
/usr/local/arm/3.4.1/bin/arm-linux-gcc -g -O2 -pipe -Wall -I.-c -o buffer.o buffer.c
/usr/local/arm/3.4.1/bin/arm-linux-gcc -g -O2 -pipe -Wall -I.-c -o cgi.o cgi.c
/usr/local/arm/3.4.1/bin/arm-linux-gcc -g -O2 -pipe -Wall -I.-c -o cgi_header.o cgi_header.c
/usr/local/arm/3.4.1/bin/arm-linux-gcc -g -O2 -pipe -Wall -I.-c -o config.o config.c
................
/usr/local/arm/3.4.1/bin/arm-linux-gcc -g -O2 -pipe -Wall -I.-c -o index_dir.o index_dir.c
/usr/local/arm/3.4.1/bin/arm-linux-gcc -o boa_indexer index_dir.o escape.o -g -static
六:將重新編譯的可執行檔案拷到共享目錄/home/boa下,執行:
# ./boa
eth0: Transmit buffer not free!
eth0: Transmit buffer not free!
eth0: Transmit buffer not free!
eth0: Transmit buffer not free!
[01/Jan/1970:00:38:05 +0000] boa: server version Boa/0.94.13
[01/Jan/1970:00:38:05 +0000] boa: server built May 11 2009 at 18:21:02.
[01/Jan/1970:00:38:05 +0000] boa: starting server pid=343, port 80
[[email protected](none) boa]# [01/Jan/1970:00:39:43 +0000] request from 10.10.205.154 "GETy
[01/Jan/1970:00:39:43 +0000] request from 10.10.205.154 "GET /stylesheet-imagesy
Boa伺服器目錄:
小結:
Boa伺服器在此係統中負責的是接收來自網頁的HTTP請求,根據請求呼叫相關的串列埠傳送應用程式。同時接收servfox傳來的現場截圖,通過無線網路一幀一幀再傳送回瀏覽器端。在瀏覽器端形成連續的視訊畫面。Boa的移植主要工作是對原始碼的修改交叉編譯再除錯。配置相關的指令碼,使其在Linux系統中正常工作。
相關推薦
嵌入式WEB伺服器BOA的移植方法(一)
作者:李駒光、鄭耿 本文摘自作者《嵌入式Linux系統開發詳解-基於EP93XX系列ARM》一書的相關章節。 隨著Internet技術的興起,在嵌入式裝置的管理與互動中,基於Web方式的應用成為目前的主流,這種程式結構也就是大家非常熟悉的B/S結構,即在 嵌入式裝置上
嵌入式web伺服器boa的編譯移植
Linux下Boa伺服器移植,交叉編譯boa併成功移植到FL2440開發板上,並且CGI程式執行正常。 主機環境:redhat9交叉編譯器:arm-linux-gcc 3.4.1 BOA版本:0.94.13平臺:s3c2440一:下載原始碼:從http://www.boa.org/官方網站下載原始碼,並將原
嵌入式web伺服器boa移植全過程(含圖解過程)
移植平臺:mini2440(arm9 s3c2440)開發板 ,核心2.6.29 一、boa下載和安裝: 1、修改編譯安裝檔案: 1)在www.boa.org下載boa-0.94.13.tar.gz 並解壓 2)在src目錄下執行./configure生成Ma
嵌入式web伺服器boa -- html網頁設計總結
嵌入式web伺服器boa – html網頁設計總結 (一)頁面分割的實現 四個HTML頁面:index.html(主介面)、top.html、left.html、right.html; 實現在主頁面顯示其餘三個頁面的拼接頁面,也即實現頁面分割; 程式碼實現:
嵌入式Web開發——Boa伺服器移植
百度百科上關於 Boa 的說明: BOA 伺服器是一個小巧高效的 web 伺服器,是一個運行於 unix 或 linux 下的,支援 CGI 的、適合於嵌入式系統的單任務的http伺服器。 原始碼開放、效能高。由於它是一個單任務的 Web 伺服器,只
嵌入式web伺服器移植
文章目錄 嵌入式web伺服器移植 1.移植環境搭建 2.Lighttpd移植 2.1 下載原始碼並解壓 2.2 編譯配置 2.3 編譯安裝 2.4 Lighttpd配置
嵌入式Http伺服器BOA移植經驗總結(…
經過2 天的時間,終於將BOA 伺服器移植到了我的DM365 的IPCam 上了!現將個人經驗於大家一起分享! 環境: 主機:ubuntu9.10 交叉編譯工具:arm_v5t_le 目標板:TI 公司的DM365 詳細過程如下: 1. 下載Boa 原始碼 下載地址: http://www.boa.
Java Web 學習筆記之八:嵌入式web伺服器Jetty的基本使用
Jetty 是一個開源的servlet容器,具有易用性,可擴充套件性,易嵌入性等特點。通過少量的程式碼,開發者就可以在程式中以嵌入的方式執行一個web伺服器。 下面介紹一些Jetty使用的方式:
高效能嵌入式web伺服器
Undertow 是一個採用 Java 開發的靈活的高效能 Web 伺服器,提供包括阻塞和基於 NIO 的非堵塞機制。Undertow 是紅帽公司的開源產品,是 Wildfly 預設的 Web 伺服器。 Undertow 提供一個基礎的架構用來構建 Web 伺服器,這
mongoose:嵌入式Web伺服器
mongoose是一個理想的嵌入式環境,專為裝置互聯而設計。自2004年以來,就被大量的開源產品或者商業產品所使用,它甚至已經執行在了空間站的裝置中。Mongoose使嵌入式網路程式設計更為快速、穩健和簡單。 特性 跨平臺:支援 Linux/UNIX、MacOS、QNX、eCos、Windows、An
嵌入式boa伺服器搭建和移植
2.tar -xvf boa-0.94.13.tar.g 3./configure 4.修改Makefile CC =or32-linux-gcc CPP = or32-linux-gcc–E 5.修改boa.c,註釋下面幾行 if (setuid(0) !
樹莓派WEB伺服器(Boa)CGI程式設計入門
通過上一個課程“Boa基本設定與使用”的學習,大家在樹莓派上應已經會安裝、配置、執行Boa伺服器,並且訪問到伺服器上的一個靜態網頁。 這不是執行Web伺服器最終的目的,最終應是通過B/S(瀏覽器/伺服器)模式實現兩端的相互。 下面通過一個CGI程式設計
物聯網倉儲系統(四)—環境搭建—BOA 伺服器和 SQLite3 移植
一、專案環境介紹:1、Ubuntu 12.04 發行版2、GCC 交叉編譯工具鏈(版本 4.5.1)3、U-boot-2010.034、FS4412 開發板(ARM Cortex-A9 核心)5、FS_
boa伺服器搭建及移植
1、解壓 將下載的原始碼壓縮包放到某目錄下,然後執行: tar –xvzf boa-0.94.13.tar.tar sudo apt-get install bison flex 否則會出現如下錯誤 make: yacc:命令未找到 make
Android上web伺服器i-jetty搭建(原始碼編譯)
一. Jetty簡介 Jetty是一個用Java實現的開源的Http和Web伺服器,包括HTTPserver, HTTP client和javax.servlet container。 Jetty的應用非常廣泛,包括: 二. i-Jetty原始碼編譯 1. maven
STM32移植lwip之建立web伺服器
本篇目標:在之前能ping通pc機的工程基礎上搭建web伺服器,借鑑官方web伺服器的程式與網頁,能夠用pc機瀏覽器訪問web伺服器,並返回設定的網頁 材料準備: 除錯工具:用來除錯tcp連線下的資料接收(網路除錯助手) 測試瀏覽器:這裡使用的是Chr
[ZedBoard移植嵌入式Linux教程(8)]編譯Linux核心
在前面提到的地址下載linux核心原始碼並放到ubuntu中,我將linux-digilent-master壓縮檔案放到/home/dc/Desktop/xilinx/中。與編譯uboot過程一樣,linux核心也有預設配置digilent_zed_defconfig,在目錄
pf_ring 編譯移植
oca ffi -s projects man org -i -shared sep 下載地址: http://sourceforge.net/projects/ntop/files/PF_RING/ 編譯模塊: cd kernel/ pf_ring.ko 編譯li
跟濤哥一起學嵌入式 第03集:嵌入式要從u-boot移植學起?
得到 芯片 嵌入 生涯 開啟 自己的 trac 時間 直接 大家好,我是濤哥,歡迎閱讀《跟濤哥一起學嵌入式》第3集。俄羅斯仲夏夜,世界杯依舊如火如萘。球場上,夕陽下,梅西沒落的身影、C羅的黯淡離場,並沒有打擊大家太多的熱情。戰火依舊,老兵不死,梅羅時代是否快要終結?然而新一
基於ARM和Linux的嵌入式Web Server設計與實現_愛學術——免費下載
重要 image 平臺 服務 linu amp 設計與實現 體系 www. 【摘要】介紹了嵌入式ARM處理器的特點和硬件平臺的設計、嵌入式操作系統的設計,構建了基於嵌入式Web Server的遠程監測系統結構,重點分析了嵌入式TCP/IP協議棧的體系結構、嵌入式Web服務器