1. 程式人生 > >嵌入式web伺服器boa的編譯移植

嵌入式web伺服器boa的編譯移植

LinuxBoa伺服器移植,交叉編譯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]

EmbedSky src]# cd boa-0.94.13進入原始碼解壓包

[[email protected] EmbedSkyboa-0.94.13]# cd src

[[email protected] EmbedSky src]# ./configure生成makefile

二:編譯前修改的檔案:

1. 修改Makefile檔案,找到CC=gccCPP=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.cCurrent_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,所以必須開啟。其它預設設定即可。

注意:以下是為改為下面這樣的:

2UserGroup的修改:

User 0

Group 0

3ErrorLog /var/log/boa/error_log

AccessLog /var/log/boa/access_log

4DocumentRoot /var/www

5DirectoryIndex index.html

6KeepAliveMax 1000

KeepAliveTimeout 10

7MimeTypes /etc/mime.types

8ScriptAlias /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下新建logwww目錄:

#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

結果如下所示:

 26748719_13484139560oJ7.jpg

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服務器