亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1805 | 回復: 0
打印 上一主題 下一主題

thttpd [復制鏈接]

論壇徽章:
0
跳轉到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2009-06-10 15:28 |只看該作者 |倒序瀏覽
1 引言
    隨著微處理器技術、計算機網(wǎng)絡技術的進步,基于
嵌入式
WEB的網(wǎng)絡數(shù)字視頻監(jiān)控系統(tǒng)逐漸得到了人們的廣泛關注。把圖像采集、視頻壓縮和WEB功能集中到一個體積很小的設備內(nèi),可以直接連入局域網(wǎng)和Internet,達到即插即用,省掉多種復雜的電纜,安裝方便,用戶也無須安裝任何硬件設備即可觀看,這使得由
嵌入式
網(wǎng)絡視頻監(jiān)控
服務器
組成的監(jiān)控網(wǎng)絡組網(wǎng)和擴展都極為靈活方便。
    2  WEB
服務器
所在系統(tǒng)工作原理
    如圖1所示,系統(tǒng)有兩種網(wǎng)絡接入方式:通過PPPOE自動撥號,動態(tài)獲取IP聯(lián)入Internet;自定義靜態(tài)IP連入局域網(wǎng)。

    之后,系統(tǒng)的整個工作流程包括兩條主線:1.通過HTTP/TCP/IP方式,解析來自監(jiān)控端的網(wǎng)頁請求,包括:攝像機控制(云臺上下左右、鏡頭光圈、縮放等等),數(shù)據(jù)庫讀寫(視頻參數(shù)如分辨率、亮色度、碼流,畫質(zhì)),視頻調(diào)度與傳輸(多個用戶之間視頻數(shù)據(jù)的發(fā)送停止及其相互協(xié)調(diào),系統(tǒng)參數(shù)也放在這里)。
    2.通過RTP/UDP/IP方式,為監(jiān)控端提供所需的實時視頻信息。RTP/UDP/IP的方式兼顧了視頻傳輸?shù)膶崟r性與QoS保證。
    3  WEB服務器的選擇
    根據(jù)工作原理的描述,WEB服務器處于整個系統(tǒng)核心的位置,需要解決的幾個難點包括:
    1.
安全
性。只有授權登陸用戶才能進行系統(tǒng)配置(網(wǎng)絡參數(shù)、視頻特性等等)。普通用戶只能簡單監(jiān)控。
    2.流量控制。視頻數(shù)據(jù)連續(xù)且大量,服務器應該具備一定的協(xié)調(diào)各路監(jiān)控數(shù)據(jù)的能力。
    3.實時性。對于監(jiān)控端的web請求指令響應速度,特別是在高負荷的情況下。
    4.性能。在多路監(jiān)控請求同時存在的情況下,系統(tǒng)的響應速度。
    5.支持串口命令。云臺控制指令需要串口支持。
    6.數(shù)據(jù)庫交互。包括用戶數(shù)據(jù)庫,系統(tǒng)配置參數(shù)等等,都需要實現(xiàn)脫機保存。
    uCLinux下,主要有3個Web Server:Httpd、Thttpd和BOA.Httpd是最簡單的一個Web Server,它的功能最弱,不支持認證,不支持CGI(Common Gateway Interface,通用網(wǎng)關接口)。Thttpd和BOA都支持認證、CGI等,功能都比較全。BOA源代碼開放、性能可靠、穩(wěn)定性好,但是是一個單任務的Web服務器。所以,我們選擇簡單、小巧、易移植、快速和
安全
的Thttpd. Thttpd在默認的狀況下,僅運行于普通用戶模式下,從而能夠有效地杜絕非授權的系統(tǒng)資源和數(shù)據(jù)的訪問,同時Thttpd全面支持HTTP基本驗證(RFC2617),可有效解決安全性的問題。
    另外,Thttpd對于并發(fā)請求不使用fork()來派生子進程處理,而是采用多路復用(Multiplex)技術來實現(xiàn),因此效能很高,可以有效提高系統(tǒng)的性能。
    最后,Thttpd基于URL的文件流量限制,對于連續(xù)的視頻流量控制而言是非常方便的,象Apache就必須使用插件實現(xiàn),效率較Thttpd低。在Thttpd的官方網(wǎng)站上有一個與其他web server的對比圖Benchmark.
    綜上所述,Thttpd在安全性、性能、流量控制等方面有效的滿足系統(tǒng)需要,當然,實時性也得到很好的保證。下面,結合源碼,首先實現(xiàn)Thttpd的基本功能,然后將視頻數(shù)據(jù)轉發(fā)、安全性、支持串口命令、數(shù)據(jù)庫交互的實現(xiàn)完善起來。
    4  Thttpd基本功能的實現(xiàn)
    首先,確保在編譯uCLinux內(nèi)核的make menuconfig這一步,選中busybox中的Thttpd.
    然后,根據(jù)需要,修改源碼/user/thttpd下的config.h:#define DEFAULT_PORT   80 //服務器監(jiān)聽端口#define DEFAULT_DIR   /home/httpd //設定服務器根目錄#define INDEX_NAME   index.html //設定訪問服務器時的默認主頁#define AUTH_FILE     passwd //授權用戶數(shù)據(jù)庫文件#define CGI_PATTERN   /cgi-bin/*.cgi //CGI的文件名格式#define CGI_PATH       /home/httpd/cgi-bin //CGI的所在目錄
    接下來,建立服務器根目錄和文件目錄:
    由于uCLinux的根文件系統(tǒng)為ROM FS, 只讀, 因此要在生成文件系統(tǒng)映像之前建立好其中的目錄和文件。首先是Web服務器根目錄, 再是根目錄下的子目錄:文件根目錄和CGI程序目錄。修改/vendor/Samsung/4510B/makefile文件, 在ROMFS_DIRS 列出的目錄中增加home/httpd ( 服務器根目錄和文件根目錄),home/httpd/cgi-bin(CGI程序目錄) .
    最后,將監(jiān)控系統(tǒng)相關的網(wǎng)頁和CGI程序分別放在/vendor/Generic/httpd和/vendor/Generic/httpd/cgi-bin中,就可以隨內(nèi)核編譯過程時自動復制到image的相關目錄下。在/vendor/Samsung/4510B/rc中添加thttpd實現(xiàn)上電自動執(zhí)行。
    5  HTTP基本驗證(RFC2617)的實現(xiàn)
    首先必須生成存放用戶及其密碼的數(shù)據(jù)庫文件:由于Thttpd 在http驗證的實現(xiàn)上基于b64_decode_table解密,因此需要提供相對應b64加密而成的數(shù)據(jù)庫文件。然后,編譯/user/ htpasswd.c,切換到相應目錄下,執(zhí)行。/htpasswd -c passwd root Adding password for root. New password:Re-type new password:
    其中,-c表示創(chuàng)建一個名字為passwd的新的用戶數(shù)據(jù)加密文件,同時第一個用戶名為root.
    之后,將passwd文件復制到/vendor/Generic/httpd下面,并且注意在thttpd/config.h中define的AUTH_FILE與passwd同名。至此,thttpd的http驗證功能就順利添加完成。
    6  視頻調(diào)度與傳輸
    在本系統(tǒng)中,模擬視頻數(shù)據(jù)經(jīng)過AD,采樣等預處理進入支持MPEG4編碼的ASIC芯片壓縮后,打包發(fā)送的任務由Thttpd完成。
    在多個監(jiān)控端請求同時存在的情況下,指令響應本身Thttpd已經(jīng)完成,所以我們只需要實現(xiàn)數(shù)據(jù)傳輸。
    在main函數(shù)里Main loop開始之前依次執(zhí)行get_device,driver_init,device_init和alloc_resource,interrupt_enable,device_start,視頻流的編碼壓縮就開始了。添加定時器響應函數(shù),(void) tmr_create((struct timeval*) 0, transfer_bitstream, (ClientData) mpeg4_fd, 0, 1 );其中mpeg4_fd,是編碼芯片的設備描述符,transfer_bitstream為響應函數(shù)(內(nèi)容略)。
    然后,根據(jù)Thttpd連接請求的變化,在handle_read與handle_send中添加簡單相應連接有效性判斷的代碼即可完成數(shù)據(jù)調(diào)度與傳輸?shù)墓δ堋?br /> 7  串口命令支持
    云臺控制指令的發(fā)送需要RS485的支持。
    在thttpd.c的main函數(shù)里添加設備支持: 打開串口設備。
    int com1fd = open(/dev/ttyS1,O_RDWR|O_NOCTTY);傳輸波特率的設定:tcgetattr(com1fd,&oldtio);cfmakeraw(&oldtio);cfsetispeed(&oldtio,B9600);cfsetospeed(&oldtio,B9600);tcsetattr(com1fd,TCSANOW,&oldtio);在libhttpd.c里包含定義云臺信令的頭文件后,在httpd_parse_request中添加如下代碼,memcpy(cmd,YT_FOCUS_IN,YT_CMD_NUM);將web請求轉換為對應的云臺信令
存儲
在cmd數(shù)組中,最后,由于uc
linux
把所有設備作為文件操作,所以可以通過write(com1fd,cmd,YT_CMD_NUM);將云臺信令正確發(fā)出去。
    8  配置信息的保存(MTD驅(qū)動的實現(xiàn))
    uCLinux在
arm
上移植過程中,一般不采用FLASH文件系統(tǒng),它是在Bootloader初始化系統(tǒng)并重映射內(nèi)存后,由Bootloader將Kernel和根文件系統(tǒng)的映像從FLASH上直接復制到RAM uCLinux系統(tǒng)起始地址(0x8000),然后通過設定PC值將控制權交給uCLinux.
    這種方式采用的是ROMFS文件系統(tǒng),系統(tǒng)結構簡單,實現(xiàn)方便,但ROMFS是只讀文件系統(tǒng)。RAM盤雖可寫但一旦掉電就會丟失內(nèi)容。若想長久保存應用程序的配置文件可采用兩種方法:一種是將FLASH 上劃出幾個固定的扇區(qū)可讀可寫,用以專門存放所有要用到的配置文件;另一種是建立可寫的JFFS2 文件系統(tǒng)。前一種方法代碼簡單、靈活, 適用于不太頻繁的文件寫入。后一種實現(xiàn)起來也比較簡單,但時間、空間等方面的代價要高于前一種,適用于非常頻繁的文件寫入(比如一分鐘超過十次);诒鞠到y(tǒng)中對配置數(shù)據(jù)
存儲
的實時性要求不高,而嵌入式資源又十分寶貴,因此考慮采用第一種方法,這就是MTD(memory technology device內(nèi)存技術設備)。MTD是用于訪問memory設備(ROM、flash)的Linux的子系統(tǒng)。其所有源代碼在/drivers/mtd子目錄下。
    由于MTD的主要目的是為了使新的memory設備的驅(qū)動更加簡單,因為它介于特定的閃存設備和文件系統(tǒng)之間,可以理解為它在硬件和上層之間提供了一個抽象的接口。 所以硬件驅(qū)動程序不需要知道象JFFS2和FTL那樣的用戶模塊使用的方法。所有它們真正需要提供的就是一組對底層閃存進行read、write和erase操作的簡單例程,即/mtd目錄下mtd-utils.c相應函數(shù)。將mtd-utils.c繼承過來,另外,加上手工添加的flash分區(qū)表即可達到配置文件保存的目的。
    本系統(tǒng)只有一片F(xiàn)LASH, 大小為2M.擬分區(qū)如下:name: bootloader (128KB),
    size: 0x20000,
    offset: 0x0,
    mask_flags: MTD_WRITEABLE   // 只讀分區(qū)
    name: kernel & rootfs (1856KB),
    size: 0x1D0000,
    offset: 0x20000
    name: system config (64KB),
    size: 0x10000,
    offset: 0x1F0000
    將包含本分區(qū)表的文件放在drivers/mtd/map下,并修改相應的makefile使之編譯時有效。
    然后,選擇適當?shù)?MTD用戶模塊,啟用對閃存的訪問:MTD_CHAR和MTD_BLOCK.MTD_CHAR提供對閃存的原始字符訪問,而MTD_BLOCK將閃存設計為可以在上面創(chuàng)建文件系統(tǒng)的常規(guī)塊設備(象IDE磁盤)。與MTD_CHAR關聯(lián)的設備是在/vendor/Samsung/4510B/makefile的DEVICES中添加mtd0,c,90,0、mtd1,c,90,2、mtd2,c,90,4,而與 MTD_BLOCK關聯(lián)的設備是添加mtdblock0,b,30,0、mtdblock1,b,30,1、mtdblock2,b,30,2.
    最后,需要將 MTD 子系統(tǒng)編譯到內(nèi)核中,即打開make menuconfig里MTD相關的選項。
    因為要使用當中涉及多個配置文件,而讀寫FLASH 的速度較慢,故每次配置完成后不立即寫入flash,而是先把配置文件存在thttpd代碼開辟的臨時數(shù)組里,然后一次性(比如重啟前)寫入指定的FLASH分區(qū)。
    9 配置信息的管理
    系統(tǒng)第一次啟動會加載一組默認配置,這是通過判斷flash最后一個system config (64KB)分區(qū)是否未被初始化(全為1或0)來實現(xiàn)的。在thttpd.c的main函數(shù),加入open(/dev/mtd2,O_RDWR)可打開mtdblock2.將drivers/mtd下mtd-utils.c復制到user/thttpd目錄下,即可使用其中的一些函數(shù)方便的實現(xiàn)flash的read和write操作。
    10 結語
    嵌入式系統(tǒng)Web server與CGI 技術結合使得對嵌入式系統(tǒng)的管理和使用更為簡便直接;赪eb的視頻監(jiān)控系統(tǒng)是目前監(jiān)控領域發(fā)展的主流和方向。本文根據(jù)監(jiān)控系統(tǒng)對數(shù)據(jù)吞吐量和安全可靠性等各方面的實際要求,結合相關研究的新進展,深入討論了web服務器在監(jiān)控系統(tǒng)設計中的應用技巧,并詳細做了實現(xiàn)上的闡述。對所有基于嵌入式web技術的監(jiān)控系統(tǒng)的設計具有非常實際的指導作用。讀者可在本文研究的基礎上做進一步的完善。
               
               
               
               

本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u2/79955/showart_1960994.html
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP