歡迎您光臨本站 登入註冊首頁

概述

   隨著嵌入式技術的發展和高速寬頻網路的普及,利用網路實現遠程監控已為人們廣泛接受,嵌入式網路監控技術正是在此條件下逐步發展成熟起來的.用戶使用Web瀏覽器,通過乙太網……

    隨著嵌入式技術的發展和高速寬頻網路的普及, 利用網路實現遠程監控已為人們廣泛接受, 嵌入式網路監控技術正是在此條件下逐步發展成熟起來的. 用戶使用Web 瀏覽器, 通過乙太網遠程訪問內置Web 伺服器的監控攝像機, 不但可以實現對現場的遠程視頻監控, 而且可以向監控現場發送指令. 在整個系統的實現過程中, 嵌入式Web 伺服器起著十分重要的作用, 因此, 在嵌入式網路視頻監控系統中,Web 伺服器的設計對監控系統的整體性能具有直接的影響, 只有有了高效率的Web 伺服器, 監控系統的性能才能得到充分的發揮.

1 嵌入式Web 伺服器Boa 的特點
    Boa 是一款單任務的HTTP 伺服器, 與其他傳統的Web 伺服器不同的是當有連接請求到來時, 它並不為每個連接單獨創建進程, 也不通過複製自身進程來處理多鏈接, 而是通過建立HTTP 請求列表來處理多路HTTP 連接請求, 同時它只為CGI 程序創建新的進程, 這樣就在最大程度上節省了系統資源, 這對嵌入式系統來說至關重要. 同時它還具有自動生成目錄、自動解壓文件等功能, 因此, Boa 具有很高的HTTP 請求處理速度和效率, 在嵌入式系統中具有很高的應用價值.

2 Boa 的功能實現
    嵌入式Web 伺服器Boa 和普通Web 伺服器一樣, 能夠完成接收客戶端請求、分析請求、響應請求、向客
戶端返回請求結果等任務. 它的工作過程主要包括:
( a) 完成Web 伺服器的初始化工作, 如創建環境變數、創建TCP 套接字、綁定埠、開始偵聽、進入循環結構, 以及等待接收客戶瀏覽器的連接請求;
( b) 當有客戶端連接請求時,Web 伺服器負責接收客戶端請求, 並保存相關請求信息;
( c) 在接收到客戶端的連接請求之後,分析客戶端請求, 解析出請求的方法、URL 目標、可選的查詢信息及表單信息, 同時根據請求做出相應的處理;
( d)Web 伺服器完成相應處理后, 向客戶端瀏覽器發送響應信息, 關閉與客戶機的TCP 連接.
    嵌入式Web 伺服器Boa 根據請求方法的不同, 做出不同的響應. 如果請求方法為HEAD, 則直接向瀏覽器返迴響應首部; 如果請求方法為GET, 則在返迴響應首部的同時, 將客戶端請求的URL 目標文件從伺服器上讀出, 並且發送給客戶端瀏覽器; 如果請求方法為POST, 則將客戶發送過來的表單信息傳送給相應的CGI 程序, 作為CGI 的參數來執行CGI 程序, 並將執行結果發送給客戶端瀏覽器. Boa 的功能實現也是通過建立連接、綁定埠、進行偵聽、請求處理等來實現的. 其初始化部分的源代碼如下:
int server_s;
server_s = socket( SERVER_PF,SOCK_STREAM,IPPROTO_TCP) ;
if( server_s == - 1) {
DIE( "unable to create socket") ;
}
if( set_nonblock_fd( server_s) == - 1) {
DIE( "unable to set server socket to nonblocking") ;
}
if( fcntl( server_s,F_SETFD,1) == - 1) {
DIE( "can′t set close! on! exec on server socket! ") ;
}
if( ( setsockopt( server_s, SOL_SOCKET,SO_REUSEADDR,( void*)&sock_opt,
sizeof( sock_opt) ) ) == - 1) {
DIE( "setsockopt") ;
}
if( bind_server( server_s, server_ip, server_port) == - 1) {
DIE( "unable to bind") ;
}
if( listen( server_s, backlog) == - 1) {
DIE( "unable to listen") ;
}
    上述代碼主要用於打開一個有效的socket 描述符, 然後將其轉換為無阻塞套接字. 函數bind( ) 用於建立套接字描述符與指定埠間的關聯, 並通過函數listen( ) 在該指定埠偵聽, 等待遠程連接請求.當偵聽到連接請求時, Boa 調用函數get_request( int server_sock) 獲取請求信息, 通過調用函數accept( ) 為該請求建立一個連接. 在建立連接之後, 接收請求信息, 同時對請求進行分析. 當有CGI 請求時, 為CGI 程序創建進程, 並將結果通過管道發送輸出. Boa 的整體工作流程如圖1 所示.
 

3 Boa 在ARM 上的移植
3.1 修改Web 伺服器Boa
    為進一步提高系統性能, 應根據嵌入式網路視頻監控系統的特點, 對Web 伺服器作適當的修改. 修改內容主要包括:
( a) 定義常數BUFFER_SIZE 為8192, 通過增大BUFFER_SIZE 的值來增加輸入輸出緩存,以提高圖像傳輸速度, 從而加快系統的響應速度;
( b) 修改請求列表參數, 根據可能出現的請求數量修改伺服器可以處理的HTTP 連接數量;
( c) 為適應嵌入式系統資源較少的情況, 精簡uClinux 操作系統中的庫函數,使用uClibc 進行編譯, 因此要使Boa 在嵌入式系統上正常運行, 用戶必須自己實現一些函數功能, 如字元串查找函數strstr( ) 和字元串複製函數strdup( ) 等.

3.2 交叉編譯Boa
    為了建立嵌入式交叉編譯環境, 首先必須安裝arm 交叉編譯工具arm-elf-gcc, 然後使用交叉編譯工具arm-elf-gcc 編譯Boa 源程序, 通過執行:
. / configure -target = arm-elf -host = i686-pc-linux-gnu  -build = arm-elf
Make
    便可生成elf 格式的可執行文件boa.
    通過arm-elf-strip -g boa 指令去除附帶的編譯信息, 以減少所佔用的空間. uClinux 系統採用的romfs 文件系統相對於一般的ext2 文件系統需要的空間較少, 因此需要採用elf2flt 工具將生成的boa 的可執行文件由elf 格式轉換成flat 格式, 並將其添加到romdisk 中.

3.3 配置Web 伺服器Boa
    為了能夠在ARM上運行Web 伺服器Boa, 需要對其運行環境、參數等進行設置, 並將最終的配置文件Boa.conf 置於適當位置. 通過修改配置文件Boa.conf 可實現對Web 伺服器的配置, 部分配置為: 偵聽埠使用80 埠, 訪問日誌AccessLog 存放於/var/log/boa/access_log, 錯誤日誌ErrorLog 位於/var/log/boa/error_log, 文件的根目錄DocumentRoot 設在/home/httpd/, KeepAliveMax 的值修改為50,KeepAliveTimeout 的值修改為10, 設置CGIPath 為/cgi-bin/ 等; 在Boa.conf 的最後加上ServerNameEmServer, 即將EmServer 作為伺服器名稱, 當然也可用其他名稱作為伺服器名; 最後將修改好的配置文件Boa.conf 存放於嵌入式系統根文件/etc/boa 目錄下. 通過鏡像製作工具執行命令genromfs-fromfs.img -d romdisk 生成romdisk 的鏡像文件romfs.img, 將romfs.img 通過bootloader 下載到flash 存儲器.

3.4 測試Boa 的運行
    為了確保Boa 的正常運行, 利用簡單的測試程序測試Boa 的運行情況. 在目錄/home/httpd/ 下建立index.html 文檔, 其內容為:
<HTML>
<BODY>
This is boa
< / BODY>
< / HTML>
    通過IE 瀏覽器連接到運行Boa 的嵌入式系統http://192.168.0.26/ , 若頁面顯示This is boa, 說明Boa可以正常獲取頁面.
    在/cgi-bin/ 路徑下建立test 文件, 其內容為:
#!/bin/sh
echo Content- type: text/html
echo
echo "<html><body><pre>"
echo "This is cgi test"
echo "< / body>< / html>"
    在IE 瀏覽器輸入地址http: //192.168.0.26/cgi-bin/ test, 若頁面顯示This is cgi test, 說明伺服器可以正常執行CGI 程序.

4 Boa 在網路監控系統中的應用
    將Boa 移植到運行uClinux 操作系統的ARM 處理器上, 建立嵌入式Web 伺服器, 為用戶提供基於HTTP 協議的網路接入方式, 這樣的設計方案可以很好地運用到網路監控系統中. 由於Boa 只支持基於CGI 的動態網頁, 因此需要編寫適當的CGI 程序來實現對視頻數據的發送和對控制指令的處理. Web 伺服器通過調用CGI 程序實現網路視頻監控, 同時向監控現場發送各種指令. 作者根據監控領域的實際需求, 按上述方案設計了一個網路視頻監控系統, 該系統可以實現多路視頻數據接入, 8 個方向的雲台控制等功能.目前系統已經在樓宇監控中獲得應用, 性能良好, 實時性強, 其監控界面如圖2 所示.
 
圖2 網路視頻監控界面

5 結束語
    Web 伺服器是各種網路應用系統的有機組成部分, 直接影響網路應用系統的運行質量與效率. Boa 本身是為嵌入式系統所設計, 它特有的連接處理方式以及直接調用操作系統的文件讀取方式, 大大提高了系統的性能. 它與Linux 系統上的Web 伺服器Aparch 相比佔用系統資源少, 連接處理速度快. 在網路監控系統中使用這種嵌入式Web 伺服器, 可以節省系統資源, 提高系統運行效率, 充分發揮了網路的優勢.


[admin via 研發互助社區 ] 嵌入式Web 伺服器Boa 的移植及其應用已經有2970次圍觀

http://cocdig.com/docs/show-post-42255.html