郭 琦,王志剛,牛寶超,公衍雨,王憲臻
(河北工業(yè)大學(xué) 信息工程學(xué)院,天津 300400)
隨著網(wǎng)絡(luò)技術(shù)與多媒體技術(shù)的迅猛發(fā)展和普及,人們對信息產(chǎn)品的使用越來越廣泛。WiFi技術(shù)的出現(xiàn),憑借著其靈活易用、擴(kuò)展能力強(qiáng)等優(yōu)點(diǎn),已經(jīng)在金融、商業(yè)、制造業(yè)等領(lǐng)域有了廣泛的應(yīng)用。
文中以ARM9處理器為核心,利用其體積小、功耗低、成本低、性能高的特點(diǎn),與WiFi技術(shù)相結(jié)合,實(shí)現(xiàn)無線數(shù)據(jù)傳輸,本系統(tǒng)采用的是FriendlyARMmini2440開發(fā)平臺(tái),為了滿足實(shí)時(shí)性與采集速率的的需求,視頻采集模塊使用USB攝像頭,利用Arm-Linux系統(tǒng)實(shí)現(xiàn)視頻采集。在嵌入式Linux中構(gòu)建Web服務(wù)器實(shí)現(xiàn)終端顯示。
系統(tǒng)硬件部分主要包括S3C2440A核心處理器、WiFi無線模塊、LCD顯示、存儲(chǔ)器、USB攝像頭等部分,其硬件結(jié)構(gòu)設(shè)計(jì)如圖1所示。
核心處理器才用的是三星公司推出的16/32位RISC處理器S3C2440A,S3C2440A采用了ARM920T的內(nèi)核,0.13 μm的COMS標(biāo)準(zhǔn)宏單元和存儲(chǔ)器單元。其低功耗,簡單且全靜態(tài)設(shè)計(jì)特別適合于對成本和功率敏感型設(shè)計(jì)的應(yīng)用。ARM920T實(shí)現(xiàn)了MMU,AMBA BUS和 Harvard高速緩沖體系結(jié)構(gòu),這一結(jié)構(gòu)具有獨(dú)立的16 KB指令Cache和16 KB數(shù)據(jù)Cache。通過提供一套完整的通用系統(tǒng)外設(shè),S3C2440A減少整體系統(tǒng)成本和無需配置額外的組件。
圖1 整體結(jié)構(gòu)圖Fig.1 Overall structure chart
S3C2440A的片上功能主要有:外部存儲(chǔ)控制器(SDRAM和片選邏輯);一個(gè)LCD控制器 (最大支持4K色STN和256K色 TFT),并且提供一通道 LCD專用 DMA;4通道DMA,有外部請求引腳;3通道 UART;2通道 SPA;1通道IIC-BUS接口 (多主支持);1通道IIS-BUS音頻編解碼器接口;2端口USB主機(jī)與1端口USB設(shè)備;4通道PWM定時(shí)器和1通道內(nèi)部定時(shí)器;8通道10比特ADC和觸摸屏接口;130個(gè)通用I/O口和24通道外部中斷源,還兼容SD主接口協(xié)議1.0版和MMC卡協(xié)議2.11兼容版等,并且具有普通,慢速,空閑和掉電多種模式。加強(qiáng)的ARM體系結(jié)構(gòu)MMU用于支持WinCE,EPOC32和Linux??梢哉fS3C2440A的資源已經(jīng)極其豐富,以其強(qiáng)大的指令處理能力,使S3C2440能夠滿足多種場合的復(fù)雜需求。
本系統(tǒng)采用的視頻攝像裝置是目前應(yīng)用較為廣泛的USB輸出的數(shù)字?jǐn)z像頭,以O(shè)V511芯片為核心的網(wǎng)眼V2000攝像頭。網(wǎng)眼V2000使用CMOS感光元件,35萬象素,最大分辨率為640(水平)x 480(垂直)像素。內(nèi)置專用的DSP芯片,可對原始視頻信號做前期壓縮編碼處理,從而減少系統(tǒng)中內(nèi)存控制單元時(shí)間占用與程序編寫的工作量。
WiFi(Wireless Fidelity),俗稱無線局域網(wǎng),是由電氣電子工程協(xié)會(huì)(IEEE)802標(biāo)準(zhǔn)化委員會(huì)制定的IEEE 802.11系列標(biāo)準(zhǔn),系統(tǒng)采用無線網(wǎng)卡是TP-Link的TL-MN321G無線網(wǎng)卡,支持標(biāo)準(zhǔn)有IEEE 802.11b和IEEE 802.11g,IEEE 802.11b最高傳輸速率為 11 Mbps,IEEE 802.11 g最高速率可達(dá)54 Mbps,在信號較弱或者有干擾的情況下,可實(shí)現(xiàn)自動(dòng)調(diào)整帶寬,有效地保障了網(wǎng)絡(luò)的可靠性和穩(wěn)定性。接口類型為USB 2.0接口,覆蓋范圍在室內(nèi)最遠(yuǎn)可達(dá)100 m,室外最遠(yuǎn)300 米,工作頻段為 2.4~2.483 5 GHz。
Linux操作系統(tǒng)具有開放性,設(shè)備獨(dú)立性,豐富的網(wǎng)絡(luò)功能,可靠的安全性以及良好的移植性等良好的特性使得Linux使用者越來越多,并且Linux源代碼開放的特點(diǎn)也使其本身逐漸發(fā)展壯大起來。這也是本系統(tǒng)采用Linux的主要元因。
一個(gè)完整的可執(zhí)行的Linux操作系統(tǒng)包括系統(tǒng)引導(dǎo)加載程序Bootloader,Linux內(nèi)核,根文件系統(tǒng)。
Bootloader是系統(tǒng)加電之后運(yùn)行的第一段軟件代碼。它是整個(gè)系統(tǒng)執(zhí)行的第一步,類似于PC及系統(tǒng)中的BIOS。Bootloader的主要任務(wù)就是將內(nèi)核映像從硬盤上讀到RAM中,然后引導(dǎo)啟動(dòng)操作系統(tǒng)內(nèi)核,并且完成硬件檢測和資源分配工作,從而將系統(tǒng)的軟硬件設(shè)定在一個(gè)合適的狀態(tài),為最終調(diào)用操作系統(tǒng)內(nèi)核,運(yùn)行用戶程序準(zhǔn)備好正確的環(huán)境。Bootloader依賴于具體的嵌入式板級設(shè)備的配置。本系統(tǒng)采用的supervivi是由友善之臂公司基于vivi改進(jìn)的一個(gè)簡單易用的bootloader,具有很多實(shí)用功能:USB下載,以太網(wǎng)和豐富的設(shè)備驅(qū)動(dòng)代碼等。
通過建立好的arm-linux-gcc交叉編譯環(huán)境結(jié)合S3C2440硬件電路對Linux內(nèi)核代碼裁剪和編譯,得到符合本系統(tǒng)的壓縮內(nèi)核映像文件zImage。本系統(tǒng)的Linux移植主要涉及到USB攝像頭驅(qū)動(dòng)移植,USB無線網(wǎng)卡驅(qū)動(dòng)移植等。在linux2.6.32內(nèi)核源碼目錄下使用make menuconfig配置內(nèi)核,需要注意的是:1)加載USB驅(qū)動(dòng),依次選擇Device Drivers->USB support-->Suport for Host-side USB S3C2440 2USB HOST;2)加載V4L驅(qū)動(dòng)和攝像頭驅(qū)動(dòng),進(jìn)入Multimedia device 依 次 選 擇 Video for Linux,<*>USB OV511 Camera suport;配置完成后執(zhí)行make clean命令刪除生成的模塊和目標(biāo)文件;再使用make zImage命令編譯內(nèi)核生成壓縮的映像文件;最后使用make moduls將模塊編譯出來。最終生成的壓縮內(nèi)核映像路徑為arch/arm/boot/zImage。
根文件系統(tǒng)使用YAFFS文件系統(tǒng),通過Busybox完成文件系統(tǒng)的制作,主要完成工作有,建立文件結(jié)構(gòu)框架,添加庫文件,創(chuàng)建配置文件等,最后通過mkyaffs命令生成文件系統(tǒng)的影像。
Video For Linux是Linux中關(guān)于視頻設(shè)備的內(nèi)核驅(qū)動(dòng)程序,是一種應(yīng)用程序與視頻設(shè)備之間的一個(gè)接口函數(shù)集[2]。Linux中,視頻設(shè)備和其他許多設(shè)備一樣都是以設(shè)備文件的形式被訪問和讀寫的。V4L下的視頻軟件的實(shí)現(xiàn)流程如圖2所示。
圖2 視頻采集流程圖Fig.2 Video acquisition flow chart
V4L的驅(qū)動(dòng)程序?yàn)関ideodev.c,其包含于內(nèi)核存在的目錄drivers/media/video文件中。依賴的頭文件videodev.h在include/linux目錄下。主要用到的詩句結(jié)構(gòu)有:包含攝像頭基本信息的結(jié)構(gòu)體struct video_capability;包含設(shè)備采集窗口信息的struct video_windows;視頻信息通道的結(jié)構(gòu)體struct video_channel;包含設(shè)備圖像采集屬性的struct video_picture;用于內(nèi)存映像的struct video_mmap以及利用mmap進(jìn)行映射的幀信息結(jié)構(gòu)體video_mbuf等。
1)打開視頻設(shè)備使用 open()函數(shù):gqfd=open(“/dev/video”,O_RDWR);以讀寫的方式打開文件。
2)ioctl(gqfd,VIDIOCGCAP,&(vd->picture))函 數(shù) 讀 取設(shè)備的一些基本信息,包括設(shè)備名稱、支持的最大最小分辨率等。
3)video_picture中包含所采集圖像的各種分量信息,包含調(diào)色板、對比度、色度、亮度、白度、色深、顏色等信息。使用函數(shù) ioctl(gqfd,VIDIOCGPICT,&(VD->picture))得到圖像分量值信息,再使用VIDIOCSPICT為分量賦新值。
4)視頻圖像的獲取采用內(nèi)存映射(mmap)的方式實(shí)現(xiàn),mmap通過把設(shè)備文件映射到系統(tǒng)內(nèi)存中,用戶可以直接對設(shè)備文件訪問從而繞過內(nèi)核緩沖區(qū),提高了信息讀取速度。內(nèi)存映射方式的具體操作為:①先使用ioctl(gqfd,VIDIOCGMBUF,&gq_buf)函數(shù)得到攝像頭緩沖區(qū)的幀信息。
②然后修改video_mmap中的設(shè)置,即
gqvd.width=320;
gqvd.high=240;
gqvd.format=VIDEO_PALETTE_YUV420P;
③將設(shè)備文件的內(nèi)容映射到內(nèi)存區(qū),通過unsignedchar*gq_data=mmap (0,gq_buf.size,PROT_READ|PORT_WRITE,MAP_SHARED,gqfd,0)來操作實(shí)現(xiàn)。
④通過調(diào)用 ioctl(gqfd,VIDIECMCAPTURE,&gq_data)實(shí)現(xiàn)對內(nèi)存映射區(qū)圖像數(shù)據(jù)的單幀采集。
⑤調(diào)用 ioctl(gqfd, VIDIOCSYNC, &gq_data)實(shí)現(xiàn)連續(xù)幀的采集,若調(diào)用該函數(shù)成功,側(cè)說明前一幀采集完畢,否則結(jié)束程序。
本設(shè)計(jì)采用的無線網(wǎng)卡為TP-Link的TL-MN321G,并且已經(jīng)有了在linux下針對此網(wǎng)卡的驅(qū)動(dòng)代碼。下載驅(qū)動(dòng)程序代碼 usb-kits-mini2440-linux-2.6.32.2.tar.gz,使用 #tar xvzf解壓。
代碼包中還包括了3個(gè)工具命令行程序:用scan-wifi可掃描附近無線網(wǎng)絡(luò),用star-wifi可連接無線網(wǎng)絡(luò),用stop-wifi可停止當(dāng)前網(wǎng)絡(luò)連接。
當(dāng)接收到USB攝像頭傳來的數(shù)據(jù)后,為了能夠使其成功的傳輸并且顯示在終端上,還需要建立一個(gè)WEB視頻服務(wù)器完成這一步工作。
WEB服務(wù)器與終端之間使用TCP/IP協(xié)議完成通信,linux中使用套接字socket進(jìn)行網(wǎng)絡(luò)通信,socket是網(wǎng)絡(luò)通信應(yīng)用程序之間的接口。實(shí)現(xiàn)網(wǎng)絡(luò)傳輸?shù)倪^程中,要完成套接字的創(chuàng)建、綁定、初始化服務(wù)器IP、監(jiān)聽套接字等工作。
Web服務(wù)器啟動(dòng)后,客戶端便可使用了。用戶只需要通過局域網(wǎng)內(nèi)的計(jì)算機(jī)使用瀏覽器即可訪問視頻服務(wù)器,觀看視頻圖像。
本設(shè)計(jì)控制系統(tǒng)以S3C2440處理器為核心,操作系統(tǒng)選用嵌入式linux系統(tǒng),系統(tǒng)通過連接攝像頭模塊,獲取圖像信息,實(shí)現(xiàn)圖像數(shù)據(jù)的采集;然后通過CPU對圖像的處理,經(jīng)過無線網(wǎng)卡上傳至局域網(wǎng),局域網(wǎng)內(nèi)的計(jì)算機(jī)機(jī)可通過瀏覽器的訪問服務(wù)器。本系統(tǒng)具有成本低、便于安裝、可移動(dòng)性強(qiáng)等優(yōu)點(diǎn),方便遠(yuǎn)端進(jìn)行實(shí)時(shí)監(jiān)控,有良好的發(fā)展前景。
圖3 通信流程圖Fig.3 Communication flow chart
[1]馬資道,張正炳.基于ARM-Linux的網(wǎng)絡(luò)視頻監(jiān)控終端的軟件設(shè)計(jì)[J].軟件工程技術(shù),2011,19(2):456-458.
MA Zi-dao,ZHANG Zheng-bing,Software design of network video monitoring terminal based on the ARM-Linux[J].Software engineering technology,2011,19(2):456-458.
[2]王娜.基于WiFi的無線遠(yuǎn)程視頻監(jiān)控系統(tǒng)[J].安防科技,2010(1):16-18.
WANG Na.Wireless remote video monitoring system based on WiFi[J].Security Science and Technology,2010(1):16-18.
[3]Schimek M H,Verkuil H,Rubli M.Video for Linux Two API Specification Revision[E B/OL].[2010-1-15].http://v4l2spec.bytesex.org/spec/book1.htm.
[4]鄒意然,王永威,趙龍.嵌入式系統(tǒng)中USB攝像頭的圖像采集[J].微計(jì)算機(jī)信息,2010(12):24-28.
ZOU Yi-ran,WANG Yong-wei,ZHAO Long.USB camera image acquisition in embedded systems[J].Micro computer information,2010(12):24-28.
[5]淦克亮.基于ARM嵌入式的圖像采集與顯示系統(tǒng)設(shè)計(jì)[J].工業(yè)控制計(jì)算機(jī),2011(12):10-12.
GAN Ke-liang.Image acquisition and display system design based on the ARM embedded system[J].Industrial control computer,2011(12):10-12.
[6]高美娟,李凱,田景文.基于ARM的網(wǎng)絡(luò)遠(yuǎn)程家居視頻監(jiān)控系統(tǒng)[J].微計(jì)算機(jī)信息,2008:86-88.
GAO Mei-juan,LI Kai,TIAN Jing-wen.Network remote video monitoring system of household based on the ARM[J].Micro computer information,2008:86-88.