日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

嵌入式linux python移植过程_嵌入式linux项目开发(一)——BOA移植

發布時間:2024/7/23 linux 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 嵌入式linux python移植过程_嵌入式linux项目开发(一)——BOA移植 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

嵌入式linux項目開發(一)——BOA移植

項目目標:使用BOA、CGIC、SQLite搭建嵌入式web服務器

一、嵌入式web服務器BOA簡介

在嵌入式設備的管理與交互中,基于Web方式的應用成為目前的主流,即在嵌入式設備上運行一個支持腳本或CGI功能的Web服務器,能夠生成動態頁面,在用戶端只需要通過Web瀏覽器就可以對嵌入式設備進行管理和監控,使用極為方便。

目前嵌入式設備中所使用的web服務器主要有:boa、thttpd、mini_httpd、shttpd、lighttpd、goaheand、appweb和apache等。

BOA是Paul Philips在1991年開發的開源的嵌入式web服務器,BOA功能強大,支持認證,CGI等,應用廣泛,特別適合于嵌入式設備。與傳統的web服務器為每個訪問連接開啟一個進程不同,BOA是一個單任務的web服務器,不會為多個連接開啟多個任務進程。BOA對所有的活動的http連接在內部進行處理,而且只為每個CGI連接(獨立的進程)開啟新的進程。因此,BOA在同等硬件條件下顯示出更快的速度。測試表明boa在Pentium 300MHZ下能夠每秒鐘處理幾千次點擊,在20 MHz 386/SX下能夠每秒鐘處理幾十次點擊訪問。

BOA與apache等高性能web服務器主要區別是,BOA是單進程的服務器,只有在完成一個用戶請求后才能響應另一個用戶的請求,無法并發響應,在嵌入式設備的應用場合里已經足夠。

BOA是一個非常小巧的Web服務器,可執行代碼只有約60KB,是一個單任務Web服務器,只能依次完成用戶的請求,而不會fork出新的進程來處理并發連接請求;但BOA支持CGI,能夠為CGI程序fork出一個進程來執行。

BOA的設計目標是速度和安全,是指不被惡意用戶暗中破壞,而不是指它有很好的訪問控制和通信加密。可以添加SSL來保證數據傳輸中的保密和安全。在其站點公布的性能測試中,BOA的性能要好于Apache服務器。

二、嵌入式BOA服務器編譯

1、下載BOA源碼

從www.boa.org下載boa-0.94.13.tar.gz源碼

2、生成配置文件

在BOA頂層目錄src下運行./configure

3、修改Makefile文件

修改Makefile文件中的交叉編譯工具選項

CC = arm-linux-gcc

CPP = arm-linux-gcc–E

LDFLAGS = -static

4、修改boa.c文件

將boa.c文件中的一下內容注釋

if ( setuid ( 0 ) != - 1 ) {

DIE ( "icky Linux kernel bug!" );

}

5、修改compat.h文件

#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff

修改成

#define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff

6、修改config.c文件

將if(!server_name){..........}內容注釋,位于266-286行

不注釋會報錯:gethostbyname:: Resource temporarily unavailable

7、修改log.c文件

注釋掉以下內容

if (dup2(error_log, STDERR_FILENO) == -1) {

DIE("unable to dup2 the error log");

}

不注釋會報錯:unable to dup2 the error log:bad file descriptor

8、編譯

make

9、去除調試信息

arm-linux-strip boa

10、修改執行權限

chmod 777 boa

三、BOA服務器配置

1、boa.conf文件解析

#監聽的端口

Port 80

#服務器綁定的IP地址,注釋掉表示綁定到INADDR_ANY,適配服務器所有的IP

#Listen 192.68.0.5

#服務器運行的用戶和組

#User o

User 0

#Group o

Group 0

#當服務器發生問題時發送報警的email地址

#ServerAdmin root@localhost

#錯誤日志文件

ErrorLog /var/log/boa/error_log

#訪問日志文件

AccessLog /var/log/boa/access_log

#是否使用本地時間。如果沒注釋掉,則使用本地時間。注釋掉則使用UTC時間

#UseLocaltime

#是否記錄CGI運行信息

#VerboseCGILogs

#服務器名字

#是否啟動虛擬主機功能,即設備可以有多個網絡接口,每個接口都可以擁有一個虛擬的Web服務器

#VirtualHost

#非常重要,HTML文檔的主目錄

DocumentRoot /var/www

#如果收到一個用戶請求的話,在用戶主目錄后再增加的目錄名

UserDir public_html

#HTML目錄索引的文件名

DirectoryIndex index.html

#一個連接所允許的HTTP持續作用請求最大數目

KeepAliveMax 1000

#HTTP持續作用中服務器在兩次請求之間等待的時間數,以秒為單位,超時將關閉連接

KeepAliveTimeout 10

#指明mime.types文件位置

MimeTypes /etc/mime.types

#文件擴展名沒有或未知的話,使用的缺省MIME類型

DefaultType text/plain

#提供CGI程序的PATH環境變量值

CGIPath /bin:/usr/bin:/usr/local/bin

#為路徑加上別名

Alias /doc /usr/doc

#指明CGI腳本的虛擬路徑對應的實際路徑

ScriptAlias /cgi-bin/ /var/www/cgi-bin/

2、其他文件移植

從linux的etc目錄拷貝mime.types、passwd、group文件到開發板系統的etc目錄

創建web服務器HTML文檔的主目錄/var/www

創建CGI腳本所在目錄/var/www/cgi-bin/

四、BOA移植過程中錯誤的解決方案

1、gethostbyname:: No such file or directory

解決辦法:修改boa.conf去掉ServerName www.your.org.here前的注釋符號(#)

2、util.c:100:1: error: pasting "t" and "->"does not give a valid preprocessing token make: *** [util.o]

解決辦法:

修改src/compat.h

#defineTIMEZONE_OFFSET(foo) foo##->tm_gmtoff

修改成

#defineTIMEZONE_OFFSET(foo) (foo)->tm_gmtoff

3、boa.c:211 - getpwuid: No such file or directory

解決辦法:修改src/boa.c

注釋掉下面這段程序:

if (passwdbuf == NULL) {

DIE(”getpwuid”);

}

if(initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {

DIE(”initgroups”);

}

即修改為:

#if 0

if (passwdbuf == NULL) {

DIE(”getpwuid”);

}

if(initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {

DIE(”initgroups”);

}

#endif

4、boa.c:228 - icky Linux kernel bug!: No such file or directory

解決辦法:

修改src/boa.c,注釋掉下面語句:

if(setuid(0) != -1) {

DIE(”icky Linux kernel bug!”);

}

即修改為:

#if 0

if(setuid(0) != -1) {

DIE(”icky Linux kernel bug!”);

}

#endif

5、log.c:73 unable to dup2 the error log:bad file descriptor

解決方法:

修改src/log.c

注釋掉

if(dup2(error_log, STDERR_FILENO) == -1) {

DIE("unableto dup2 the error log");

}

即修改為:

#if 0

if (dup2(error_log, STDERR_FILENO) == -1) {

DIE("unable to dup2 the error log");

}

#endif

6、執行boa程序報錯not found

解決方法:

修改Makefile

LDFLAGS = -static

總結

以上是生活随笔為你收集整理的嵌入式linux python移植过程_嵌入式linux项目开发(一)——BOA移植的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。