基于嵌入式Linux的網(wǎng)絡視頻監(jiān)控系統(tǒng)的研究_第1頁
基于嵌入式Linux的網(wǎng)絡視頻監(jiān)控系統(tǒng)的研究_第2頁
基于嵌入式Linux的網(wǎng)絡視頻監(jiān)控系統(tǒng)的研究_第3頁
基于嵌入式Linux的網(wǎng)絡視頻監(jiān)控系統(tǒng)的研究_第4頁
基于嵌入式Linux的網(wǎng)絡視頻監(jiān)控系統(tǒng)的研究_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、摘要隨著電子技術(shù)和多媒體及網(wǎng)絡技術(shù)的快速發(fā)展,視頻監(jiān)控系統(tǒng)正向嵌入式,數(shù)字化,網(wǎng)絡化方向發(fā)展。嵌入式視頻監(jiān)控系統(tǒng)利用大規(guī)模集成電路和網(wǎng)絡的科技成果。實現(xiàn)體積小,性能穩(wěn)定,通訊便利的監(jiān)控設備。本項目提出了在arm微處理器平臺上移植嵌入式linux操作系統(tǒng),并完成視頻采集、壓縮、控制等任務。系統(tǒng)硬件設備選擇采用實驗室配備的arm9微處理器s3c2410作為主處理器,利用usb接口的攝像頭作為視頻采集設備。為降低產(chǎn)品成本,在此基礎上,借助linux下的開源軟件,構(gòu)建了整個嵌入式視頻監(jiān)控系統(tǒng)。關(guān)鍵詞:視頻監(jiān)控 嵌入式系統(tǒng) arm9 linux v4l視頻采集abstract with the rapi

2、d development of the electronic technology, multimedia technology and network technology, video surveillance system is going to the embedded, digital, networked direction. taking full advantage of lsi and networks of scientific and technological achievements, the embedded video surveillance system a

3、chieves delicate volume, stable performance, facilitates the communication of the surveillance equipment.the project is in arm microprocessor platform, and porting embedded linux system in it. it completes video capturing, compression, transmission and control tasks. the hard devices select the arm9

4、 (s3c2410) as the main processor in the system; and the usb camera as the device of video capture. in order to reduce the cost of the product, based on the architecture and with the open source software in linux, the whole embedded video surveillance system is implemented.keywords: video surveillanc

5、e embedded system arm9 linux video for linux 摘要11緒論41.1項目背景41.2視頻監(jiān)控系統(tǒng)的發(fā)展41.3論文的主要研究工作52視頻監(jiān)控系統(tǒng)方案設計52.1系統(tǒng)硬件設計方案52.2軟件設計方案63軟件開發(fā)環(huán)境的建立72.1嵌入式linux操作系統(tǒng)72.2建立交叉編譯環(huán)境92.3 bootloader的移植93.4 linux內(nèi)核編譯與移植103.5文件系統(tǒng)的移植114設備驅(qū)動程序開發(fā)簡介124.1 linux的驅(qū)動程序?qū)哟谓Y(jié)構(gòu)124.2字符型設備驅(qū)動程序144.3linux下驅(qū)動程序的實現(xiàn)144.4usb攝像頭選擇以及驅(qū)動設計155 linux下視

6、頻采集165.1視頻采集模塊的設計165.2 基于v4l的編程175.2.1video4linux中主要的數(shù)據(jù)結(jié)構(gòu)175.2.2視頻數(shù)據(jù)的讀取185.3在lcd上顯示視頻圖像196 視頻網(wǎng)絡傳輸模塊研究與實現(xiàn)206.1 tcpip協(xié)議簡介206.2基于webserver的視頻網(wǎng)絡傳輸模塊226.3播放視頻流231緒論1.1項目背景隨著電子技術(shù)和多媒體技術(shù)的飛速發(fā)展,利用嵌入式設備進行數(shù)字處理傳送成為可能。嵌入式設備具有體積小、功耗低、數(shù)字化、安裝方便、價格低廉等優(yōu)點,因此基于嵌入式的視頻采集和監(jiān)控成為了當前嵌入式應用開發(fā)領(lǐng)域的一個熱門課題。相比較傳統(tǒng)的視頻采集監(jiān)控系統(tǒng),它具有高可靠性、組網(wǎng)方便

7、、可遠程監(jiān)控等優(yōu)點,因而更適用于工業(yè)控制、銀行、政府部門的安防系統(tǒng)中。本文通過建立一個適用于家庭安保、學校等應用場合的嵌入式網(wǎng)絡視頻監(jiān)控系統(tǒng),在實驗室環(huán)境下針對網(wǎng)絡視頻監(jiān)控系統(tǒng)的各項關(guān)鍵技術(shù)進行研究,包括嵌入式linux技術(shù)、視頻采集、視頻圖像網(wǎng)絡化傳輸和運動目標檢測等。論文工作也將為網(wǎng)絡視頻監(jiān)控系統(tǒng)在其它領(lǐng)域的應用起到一定的作用。如環(huán)境與安保集中監(jiān)控系統(tǒng)、移動監(jiān)控系統(tǒng)等領(lǐng)域以及智能小區(qū)、銀行、商場等場所。同時為了更好的學習linux,熟悉linux移植中的難點、要點。所以選擇以linux作為項目所需的操作系統(tǒng)。通過此項目,可以更深入的了解linux,熟悉驅(qū)動程序的編寫等。1.2視頻監(jiān)控系統(tǒng)的

8、發(fā)展隨著圖像(視頻)處理、網(wǎng)絡通信和微電子技術(shù)的快速發(fā)展,視頻以其直觀、方便和內(nèi)容豐富等特點,日益受到人們的青睞。然而在很多應用領(lǐng)域。智能視頻監(jiān)控是計算機視覺領(lǐng)域一個新興的應用方向和備受關(guān)注的前沿課題。伴隨網(wǎng)絡技術(shù)和數(shù)字視頻技術(shù)的飛速發(fā)展,監(jiān)控技術(shù)正向著數(shù)字化、智能化、網(wǎng)絡化的方向不斷前進。智能視頻監(jiān)控系統(tǒng)的需求主要來自那些對安全要求敏感的場合,如銀行、停車場、無人值守的變電站等。比如通過傳統(tǒng)的多媒體監(jiān)控系統(tǒng)雖然也可實現(xiàn)變電站的無人值守,但它只能獲取變電站的電氣參數(shù),并不能反映變電站運行的其它方面的情況,如防火防盜,變壓器、開關(guān)等設備表面檢查等。另外,對于異常入侵及各類故障缺乏足夠的事后分析手

9、段,所以要實現(xiàn)變電站綜合全面的自動化管理,就需要一個功能完備的遠程智能視頻監(jiān)控系統(tǒng)。智能監(jiān)控技術(shù)包括運動目標檢測、跟蹤、目標分類和行為理解等方面。其中,處于整個視覺系統(tǒng)底層的運動目標檢測與跟蹤是各種后續(xù)高級處理如目標分類、行為理解的基礎和關(guān)鍵,在自動導航、機器人目標捕獲等研究方向上都具有舉足輕重的作用,從而更受到廣泛的研究和探討。視頻監(jiān)控系統(tǒng)大致經(jīng)歷了以下幾個階段,第一代模擬監(jiān)控系統(tǒng)、第二代數(shù)字化視頻監(jiān)控系統(tǒng)、第三代網(wǎng)絡視頻監(jiān)控系統(tǒng)三個階段。其中,第三代視頻監(jiān)控系統(tǒng)以網(wǎng)絡為依托,以數(shù)字視頻的壓縮、傳輸、存儲和播放為核心,以智能實用的圖像分析為特色,引發(fā)了視頻監(jiān)控行業(yè)的技術(shù)革命,受到了學術(shù)界、產(chǎn)

10、業(yè)界和使用部門的高度重視。1.3論文的主要研究工作論文基于中國科學技術(shù)大學軟件學院研究生的工程實踐項目,在深入研究了嵌入式linux操作系統(tǒng)、視頻數(shù)據(jù)的采集、壓縮與流媒體實時傳輸技術(shù)的基礎上,將上述三者有機結(jié)合起來設計了一套基于嵌入式linux操作系統(tǒng)的網(wǎng)絡視頻監(jiān)控系統(tǒng)。論文的研究工作主要集中在以下幾個方面:(1) 系統(tǒng)軟硬件平臺的搭建;(2) linux系統(tǒng)的裁剪配置以及移植;(3) usb攝像頭的選擇以及l(fā)inux平臺上驅(qū)動程序的開發(fā);(4) 基于vidoo4linux的視頻采集程序的研究與實現(xiàn);(5) 基于webserver的視頻網(wǎng)絡傳輸模塊研究與實現(xiàn);(6) 客戶端視頻接收模塊的選擇與

11、設計實現(xiàn);2視頻監(jiān)控系統(tǒng)方案設計2.1系統(tǒng)硬件設計方案系統(tǒng)在總體布置上分為遠程視頻監(jiān)測、現(xiàn)場視頻采集、本地lcd顯示三個部分。遠程監(jiān)測端運行于控制中心,它實時接收和顯示圖像數(shù)據(jù),采用普通pc即可,關(guān)鍵要能連入以太網(wǎng)。現(xiàn)場視頻采集采用ov511的網(wǎng)眼攝像頭,處理器采用基于三星s3c2410處理器的arm開發(fā)系統(tǒng),這里我們用了博創(chuàng)up-net arm2410-s試驗箱。該試驗箱提供了眾多的外設接口,特別是開發(fā)平臺上的10/l00m自適應網(wǎng)絡接口和usb接口,特別適合本項目的使用環(huán)境。本系統(tǒng)硬件平臺集成了arm cpu、sdram以及flash,外設接口:rs-232串口 (com1),usb ho

12、st接口,自適應以太網(wǎng)接口,tftlcd接口,一個觸摸屏接口。通過rs-232接口連接到宿主機上;通過在usb接口上外接一個usb口的攝像頭,將采集到的視頻圖像數(shù)據(jù)輸入緩沖區(qū)中,在本地lcd 上顯示,或是通過以太網(wǎng)傳到遠端。系統(tǒng)硬件平臺如圖2-1所示用戶終端監(jiān)控終端數(shù)據(jù)壓縮數(shù)據(jù)傳輸層usb攝像頭s3c2410xsram電源及復位電路控制臺nand flash存儲設備sdramjtag接口圖2-1 系統(tǒng)硬件平臺結(jié)構(gòu)圖2.2軟件設計方案通過對嵌入式操作系統(tǒng)linux體系結(jié)構(gòu)的分析,結(jié)合arm處理器及其外圍設備的的特性,本系統(tǒng)中將軟件的體系結(jié)構(gòu)分為兩層:內(nèi)核空間和用戶空間。內(nèi)核空間:linux內(nèi)核以

13、及視頻采集、以及相關(guān)協(xié)議棧的移植。操作系統(tǒng)內(nèi)核的主要功能是管理任務、任務排序、提供中斷、系統(tǒng)時鐘管理以及實現(xiàn)硬件抽象層和視頻編碼內(nèi)核間的通信;為了使系統(tǒng)具有網(wǎng)絡傳輸功能,必須用到嵌入式操作系統(tǒng)中網(wǎng)絡協(xié)議如tcp/ip協(xié)議。應用程序的接口由api來實現(xiàn),api的實現(xiàn)包括二個部分:一部分api作為庫來實現(xiàn)與應用程序間的連接,一部分在socket中實現(xiàn)。用戶空間:即應用層軟件,當usb攝像頭驅(qū)動加載之后,視頻采集模塊采集攝像頭的視頻數(shù)據(jù),然后通過網(wǎng)絡傳送到遠程客戶端。如圖2-2所示為系統(tǒng)的整體軟件設計架構(gòu)圖。視頻采集模塊usb攝像頭驅(qū)動程序bootloader網(wǎng)絡視頻流服務模塊以太網(wǎng)遠程網(wǎng)絡監(jiān)控端圖

14、2-2 軟件系統(tǒng)架構(gòu)3軟件開發(fā)環(huán)境的建立基于嵌入式linux開發(fā)環(huán)境一般由目標系統(tǒng)硬件開發(fā)板和裝有l(wèi)inux桌面版的主機平臺pc組成。linux主機上操作系統(tǒng)采用redhat9.0版本。目標系統(tǒng)硬件開發(fā)板用來運行嵌入式linux操作系統(tǒng)、用戶系統(tǒng)應用程序等,而主機平臺用來進行嵌入式操作系統(tǒng)內(nèi)核編譯,文件系統(tǒng)的制作和系統(tǒng)應用程序開發(fā)和調(diào)試等。雙方通過串口、并口或者以太網(wǎng)口等建立連接。2.1嵌入式linux操作系統(tǒng)linux類似于unix,是免費的,源代碼開放的,符合posix標準規(guī)范的操作系統(tǒng)。近幾年linux在嵌入式領(lǐng)域獲得了飛速發(fā)展,選擇linux作為嵌入式操作系統(tǒng)的嵌入式系統(tǒng)占很大比例。l

15、inux之所以有能在嵌入式系統(tǒng)市場上取得如此迅速的發(fā)展,與自身的優(yōu)點有著不可分割的關(guān)系。linux作為嵌入式操作系統(tǒng)的優(yōu)勢:linux正在嵌入式開發(fā)領(lǐng)域穩(wěn)步發(fā)展,是由于其自身具有非常適合于作為嵌入式操作系優(yōu)點,主要表現(xiàn)在:使用成本低幾乎所有的商業(yè)用操作系統(tǒng)如microsoft公司的windows系列,都需要為每一個拷貝支付數(shù)量的費用。但是limix是免費軟件,只要遵守gpl的規(guī)定,就可以免費獲得拷貝。linux同樣遵循gpl規(guī)定的c、c+、java等等一系列的軟件工具開發(fā)包,同時可以極大的降低開發(fā)成本。這點優(yōu)勢是其他商用操作系統(tǒng)無法比擬的。源代碼公開linux可以隨意地配置不需要任何的許可證或

16、商家的合作關(guān)系,任何人可修改并在linux下發(fā)行。linux帶有unix用戶熟悉的完善的開發(fā)工具,幾乎所有的unix系統(tǒng)的應用軟件都己移植到了linux上。其強大的語言編譯器gcc、g+等也是開源的,可以很容易得到,并在不斷完善與成熟。支持多種硬件平臺linux擁有了一個龐大的支持者群體,其中許多人都編寫驅(qū)動程序和其它的更新程序并且免費的通過intenet網(wǎng)絡進行分發(fā)?,F(xiàn)在linux已經(jīng)被移植到多種硬件平臺,支持包括x86、alpha、sparc、mips、powerpc、arm等現(xiàn)有的絕大部分微處理器體系結(jié)構(gòu)中。這對受開銷和時間限制的研究與開發(fā)項目是很有吸引力的,原型可以在標準平臺上開發(fā)然后

17、移植到具體的硬件上,加快了軟件與硬件的開發(fā)過程。強大的網(wǎng)絡功能linux操作系統(tǒng)最突出的是網(wǎng)絡部分,基本上所有的網(wǎng)絡協(xié)議和網(wǎng)絡接口都可以在linux上找到,linux內(nèi)核比標準的unix能夠更加高效地處理網(wǎng)絡協(xié)議,系統(tǒng)的網(wǎng)絡吞吐性能非常好,這也是為什么linux在網(wǎng)絡服務器市場上占據(jù)越來越大市場份額的一個原因。微內(nèi)核模塊化體系結(jié)構(gòu)linux操作系統(tǒng)本身的微內(nèi)核體系結(jié)構(gòu)相當簡單,網(wǎng)絡和文件系統(tǒng)以模塊形式置于微內(nèi)核的上層,驅(qū)動程序和其它部件可在運行時作為可加載模塊編譯到或者是添加到內(nèi)核,這為構(gòu)造定制的可嵌入系統(tǒng)提供了高度模塊化的構(gòu)件方法,使添加部件非常容易。系統(tǒng)小巧一個功能完備的linux內(nèi)核要求

18、大約imb內(nèi)存。而linux微內(nèi)核只占用其中很小一部分內(nèi)存,包括虛擬內(nèi)存和所有核心的操作系統(tǒng)功能在內(nèi),只需占用系統(tǒng)的100k內(nèi)存。2.2建立交叉編譯環(huán)境交叉編譯是嵌入式開發(fā)過程中的一項重要技術(shù),主要特征是某機器中執(zhí)行的程序代碼不是在本機編譯生成,而是由另一臺機器編譯生成。采用交叉編譯的主要原因在于,多數(shù)嵌入式目標系統(tǒng)不能提供足夠的資源供編譯過程使用,因而只好將編譯工程轉(zhuǎn)移到pc中進行。 當前交叉編譯器有多種版本,本設計中使用2.95.3版的arm-linux-gcc。在網(wǎng)上下載該版本的交叉編譯器包:arm-linux-gcc2.95.3.tar.gz,將arm-linux-gcc2.95.3.

19、tar.gz拷貝到某個目錄下,然后進入該目錄,執(zhí)行解包命令tar zxv arm-linux-gcc2.95.3.tar.gz ,然后編輯/etc/bash.rc文件,修改環(huán)境變量。以后編譯內(nèi)核或其他應用程序均可用arm-linux-的前綴來指定交叉編譯器。2.3 bootloader的移植圖是一個典型的嵌入式應用系統(tǒng)固態(tài)存儲設備的空間分配示意圖。bootloader是系統(tǒng)一加電所執(zhí)行的第一個程序,在操作系統(tǒng)內(nèi)核或用戶應用程序運行之前運行。通過這段小程序,可以初始化硬件設備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個合適的狀態(tài),為最終調(diào)用操作系統(tǒng)內(nèi)核或用戶應用程序準備好正確的環(huán)境。b

20、ootloader 啟動參數(shù) 內(nèi)核 文件系統(tǒng)圖2-1bootloader及系統(tǒng)各個部分所處的層次bootloader是依賴于硬件而實現(xiàn)的,特別是在嵌入式系統(tǒng)中建立一個通用的bootloader幾乎是不可能的,不同的體系結(jié)構(gòu)需求的bootloader是不同的。除了體系結(jié)構(gòu),bootloader還依賴于具體的嵌入式板級設備的配置。也就是說,對于兩塊不同的嵌入式板而言,即使它們基于相同的cpu構(gòu)建,運行在其中一塊電路板上的bootloader,未必能夠運行在另一塊電路開發(fā)板上,因此我們必須對其進行移植,這也是我們開發(fā)的第一步。通常都是對己有的bootloader進行移植工作,如vivi和uboot等

21、。本系統(tǒng)中,采用vivi作為armg處理器的bootloader。vivi是韓國的而mizi公司開發(fā)的bootloader,適用于arm9處理器。vivi有兩種工作模式:啟動加載模式和下載模式。啟動加載模式可以在一段時間后(這個時間可更改)自行啟動linux內(nèi)核,這時vivi的默認模式。在下載模式下,vivi為用戶提供一個命令行接口,通過接口可以使用vivi提供的一些命令。在vivi代碼的頭文件公共目錄 /include中,s3c2440.h文件定義了該處理器的一些寄存器,platform/smdk2440.h定義了與開發(fā)板相關(guān)的資源配置參數(shù),我們只需要修改這些文件就可以配置目標板的參數(shù),如波

22、特率、引導參數(shù)、物理內(nèi)存映射等。vivi的嵌入式移植過程主要有以下六個步驟:(l)從mizi公司網(wǎng)站獲得vivi源文件,進入vivi根目錄執(zhí)行vi命令修改makefile文件。(2)修改三個宏定義。liniuxincludedir:更改為交叉編譯器的include文件夾crosscompile:更改為交叉編譯器的可執(zhí)行文件的路徑armgcclibs:更改為交叉編譯器的lib庫文件的路徑(3)修改arch/s3c2440/smdk.c,主要是修改 nandflash的分區(qū)信息。(4)修改內(nèi)核啟動時使用的命令行初始參數(shù)。(5)#makemenucofig配置vivi。(6)#make vivi命令

23、編譯vivi源文件。可以獲得編譯成功的vivi二進制代碼。 我們這里采用的是博創(chuàng)公司提供的已經(jīng)編譯好的適合于博創(chuàng)試驗箱的vivi的二進制文件。將vivi通過jtag燒寫在nandflash的地址ox00處,即完成了vivi的編譯和移植。3.4 linux內(nèi)核編譯與移植在對內(nèi)核移植前,需要根據(jù)系統(tǒng)硬件資源對linux內(nèi)核進行配置和裁剪,以便在實現(xiàn)功能的前提下盡量減小內(nèi)核,充分利用嵌入式系統(tǒng)有限的資源。在宿主機linux系統(tǒng)終端下,進入內(nèi)核源代碼的目錄,輸入 makemenucoonfig可以對內(nèi)核進行配置,如圖所示。本系統(tǒng)中主要需要對一下參數(shù)進行配置:處理器結(jié)構(gòu)、網(wǎng)絡功能、設備驅(qū)動、可執(zhí)行文件格

24、式等。內(nèi)核配置完畢后,即可通過以下命令對內(nèi)核進行編譯: (1)makeclean:清除之前編譯生成的文件。 (2)makedep:建立內(nèi)核文件之間的聯(lián)系和依賴關(guān)系。 (3)makezlmage:生成最終所需要的映像文件。運行以上三個命令之后,即可在二 /arch/arm/boot目錄下生成所需要的zimage映像文件。之后利用終端仿真程序minicom和bootloader引導程序通過串口就可以把linux內(nèi)核映像移植到目標系統(tǒng)板的flash存儲中了,這兒我們用的是tftp工具:tftp flash kernel zimage3.5文件系統(tǒng)的移植在嵌入式系統(tǒng)中,一般采用 nandflash作為

25、代碼和數(shù)據(jù)存儲器。引導程序、內(nèi)核以及需要保存的數(shù)據(jù)等都要放在flash中,而且操作系統(tǒng)一般都需要在存儲器上建立文件系統(tǒng)才能對存儲器進行操作,因此需要在flash上建立文件系統(tǒng)以滿足嵌入式操作系統(tǒng)和實際的需要。在linux里,系統(tǒng)對獨立的文件系統(tǒng)不是用設備標示符來存取(比如驅(qū)動器編號或驅(qū)動器名稱),而是連接成為一個樹型結(jié)構(gòu)。linux在安裝新的文件系統(tǒng)時,把它安裝到指定的安裝目錄,從而合并到這個單一的文件系統(tǒng)樹上。linux的一個重要特征是它支持多種不同的文件系統(tǒng),文件系統(tǒng)將存放在系統(tǒng)硬盤上的文件和目錄用可以理解的統(tǒng)一形式提供給用戶,讓用戶不必考慮文件系統(tǒng)的類型或底層物理設備的特性。在嵌入式系統(tǒng)

26、中,常用的文件系統(tǒng)有ramfs、jffs2、cramfs等。cramfs是針對linux2.4內(nèi)核之后的版本所設計的一種新型文件系統(tǒng),也是壓縮和只讀格式的。它主要優(yōu)點是將文件數(shù)據(jù)以壓縮形式存儲,在需要運行的時候進行解壓縮。由于它存儲的文件形式是壓縮的格式,所以文件系統(tǒng)不能直接在flash上運行。雖然這樣可以節(jié)約很多flash存儲空間,但是文件系統(tǒng)運行需要將大量的數(shù)據(jù)拷貝進ram中,消耗了ram空間。cramfs的移植過程如下:首先生成image:在kernel/script/cramfs有生成image程序的源代碼,編譯之后生成mkcramfs。建立一個目錄,將需要放到文件系統(tǒng)的文件復制到這個

27、目錄。如果目錄名為/mnt,要生成的image文件名為root.cramfs,則命令語句為:./mkcramfs /mnt root.cramfs然后,讓內(nèi)核支持cramfs:在kemel目錄執(zhí)行命令make menuconfig配置內(nèi)核需求,選中mtd(memorytechnologydeviee)設備,選擇直接編譯到內(nèi)核中去,這樣就不用insmod了。選中其中的相關(guān)選項,可以根據(jù)自己的使用情況定制,多選中一些只是使啟動變得慢一些,內(nèi)核大一點,沒有什么其他壞處。如果cramfs文件系統(tǒng)不是作為系統(tǒng)的根文件系統(tǒng),要改mtdblock0的主設備號從31改為30,這個修改在文件kernel/inc

28、lude/linux/mtd/mtd.h中。然后重新編譯內(nèi)核,重新燒寫內(nèi)核和文件系統(tǒng)的映像。系統(tǒng)啟動以后,就可以移植cramfs文件系統(tǒng)了,燒寫如下:tftp flash root root.cramfs至此本系統(tǒng)開發(fā)環(huán)境己經(jīng)建立起來。4設備驅(qū)動程序開發(fā)簡介4.1 linux的驅(qū)動程序?qū)哟谓Y(jié)構(gòu)在嵌入式系統(tǒng)中,操作系統(tǒng)是介于應用程序與硬件之間的一個系統(tǒng)軟件,其作用是為用戶提供統(tǒng)一的api接口。操作系統(tǒng)所面對的硬件設備種類非常多,不同型號不同廠家的設備又具有各自不同的特點,因此,要支持某種設備就必須提供這種設備的控制代碼,然后把它加載進內(nèi)核,內(nèi)核才能使用該設備。從內(nèi)核的角度來看,驅(qū)動程序是一個設備

29、的代表。當內(nèi)核需要與某個設備交互時,就找到該設備的驅(qū)動程序,而后通過標準的接口調(diào)用驅(qū)動程序的相應函數(shù),控制設備,而內(nèi)核并不需要知道驅(qū)動程序如何工作,也不需要了解設備的細節(jié),設備的細節(jié)由驅(qū)動程序掌握。驅(qū)動程序可以動態(tài)地加載和卸載,內(nèi)核只包含必需設備的驅(qū)動程序。設備驅(qū)動程序一般需要完成以下功能:(1)對設備初始化和釋放;(2)把數(shù)據(jù)從內(nèi)核傳送到硬件和從硬件讀取數(shù)據(jù);(3)讀取應用程序傳送給設備文件的數(shù)據(jù)和回送應用程序的請求數(shù)據(jù);(4)檢測和處理設備出現(xiàn)的錯誤。在linux操作系統(tǒng)下有三類主要設備文件類型:塊設備、字符設備和網(wǎng)絡設備。用戶進程正是通過設備文件來與硬件打交道。每個設備文件都有其文件屬性

30、(cb),表示是字符設備還是塊設備。另外每個文件都有2個設備號,第一個是主設備號,標識驅(qū)動程序;第二個是從設備號,標識使用同一個設備驅(qū)動程序的不同硬件設備。設備文件的主設備號必須與設備驅(qū)動程序在登記時申請的設備號一致,否則用戶進程將無法訪問驅(qū)動程序。linux的設備驅(qū)動程序可分為三個主要部分:(1) 自動配置和仞始化子程序,負責檢測所要驅(qū)動的硬件設備是否存在和能否正常工作。如果該設備正常,則對這個設備及其他必需的條件(如中斷、dma通道)進行申請并初始化。這部分驅(qū)動程序僅在初始化時被調(diào)用一次。(2) 服務于io請求的子程序,又稱為驅(qū)動程序的上半部分。調(diào)用這部分程序是由于系統(tǒng)調(diào)用的結(jié)果。這部分程

31、序在執(zhí)行時,系統(tǒng)仍認為是與進行調(diào)用的進程屬于同一個進程,只是由用戶態(tài)變成了核心態(tài),但仍具有進行此系統(tǒng)調(diào)用的用戶程序的運行環(huán)境,因而可以在其中調(diào)用與進程運行環(huán)境相關(guān)的函數(shù)。(3) 中斷服務子程序,又稱為驅(qū)動程序的下半部分。在linux操作系統(tǒng)中,并不是直接從中斷向量表中調(diào)用設備驅(qū)動程序的中斷服務子程序,而是由linux系統(tǒng)束接收硬件中斷,再由系統(tǒng)調(diào)用中斷服務子程序。中斷可以在任何一個進程運行時產(chǎn)生,因而在中斷服務子程序被調(diào)用時,不能依賴于任何進程的狀態(tài),也就不能調(diào)用任何與進程運行環(huán)境有關(guān)的函數(shù)。因為設備驅(qū)動程序一般支持同一類型的若干設備,所以一般在系統(tǒng)調(diào)用中斷服務子程序時,都帶有一個或多個參數(shù),

32、以唯一標識請求服務的設備。4.2字符型設備驅(qū)動程序在系統(tǒng)內(nèi)部,i/o設備的存取通過設備驅(qū)動程序提供的一組固定的入口點來進行,這組入口點在驅(qū)動程序初始化時向系統(tǒng)進行登記,以便在系統(tǒng)適當?shù)臅r候調(diào)用。一般來說,字符型設備驅(qū)動程序能夠提供如下幾個入口點:(1) open入口點:打開設備準備io操作,對字符特別設備進行打丌操作,都會調(diào)用設備的open入口點。open子程序必須對將要進行的io操作做好必要的準備工作,如清除緩沖區(qū)等。如果設備是獨占的,即同一時刻只能有一個程序訪問此設備,則open子程序必須設置一些標志以表示設備的狀態(tài)。函數(shù)原型:int (*open)(struct innod*,struc

33、t file* ) (2)close入口點:關(guān)閉一個設備,當最后一次使用設備結(jié)束后,調(diào)用close子程序。獨占設備必須標記設備可再次使用。函數(shù)原型:int (*release)(struct innod*,struct file* )(3)read入口點:讀取設備,對于有緩沖區(qū)的io操作,一般從緩沖區(qū)罩讀取設備數(shù)據(jù)。函數(shù)原型:ssize_t(*read)(struet flle*,char*,size_st,loff_t*):(4)write入口點:向設備寫數(shù)據(jù),對于有緩沖區(qū)的io操作,一般向緩沖區(qū)里寫入數(shù)據(jù)。函數(shù)原型:ssize_t(*write)(struet flle*,const ch

34、ar*,size_st,loff_t*):(5)ioctl入口點:執(zhí)行讀寫之外的操作。函數(shù)原型:int (*ioctl)(struct inode*,struct file*,unsighed int,unsighed long)4.3linux下驅(qū)動程序的實現(xiàn)linux對一個硬件設備的驅(qū)動有兩種方式:一種是直接加載到內(nèi)核代碼中,啟動內(nèi)核時就會驅(qū)動此硬件設備;另一種是以模塊方式,編譯生成一個.o文件。模塊(module)是在內(nèi)核空間運行的程序,實際上是一種目標對象文件,沒有鏈接,不能獨立運行,但是可以裝載到系統(tǒng)中作為內(nèi)核的一部分運行,從而可以動態(tài)擴充內(nèi)核的功能。模塊最主要的用處就是用來實現(xiàn)設備

35、驅(qū)動程序,當應用程序需要它時再加載進內(nèi)核空間運行。通常一個硬件的驅(qū)動程序就是指一個驅(qū)動模塊。對于任何一個硬件設備,它在/dev下面存在一個對應的邏輯設備節(jié)點,即通常所說的設備文件。這個節(jié)點是通過mknod命令建立的,其中指定了主設備號和次設備號。主設備號表明了某一類設備,一般對應確定的驅(qū)動程序;次設備號一般用于區(qū)分不同屬性,例如不同的使用方法,不同的位置,不同的操作。這個設備號是從/proc/devices文件中獲得的,所以一般是先有驅(qū)動程序在內(nèi)核中,才有設備節(jié)點在目錄中。圖4-1表明了驅(qū)動程序與系統(tǒng)之間的關(guān)系。通過模塊的read writ操作mknod通過主次設備號相連返回主設備號insmo

36、d向系統(tǒng)注冊open read write操作應用程序硬件設備文件驅(qū)動模塊/etc/modules.conf文件內(nèi)核圖4-1 驅(qū)動程序與系統(tǒng)的關(guān)系4.4usb攝像頭選擇以及驅(qū)動設計目前比較流行的攝像頭是基于ov511芯片和zc301芯片的,已有很多關(guān)于zc301芯片的開發(fā)文檔之類,ov511可能比較陳舊,可參考的資料不是很多,我們攝像頭的選擇取決于實驗室配置的開發(fā)板三星s3c2410的開發(fā)板,選擇網(wǎng)眼的ov511攝像頭。攝像頭屬于視頻設備,在linux內(nèi)核中,video for linux(簡稱v4l)是關(guān)于視頻設備的驅(qū)動標準。這個標準為應用程序定義了一系列的接口函數(shù),內(nèi)核、驅(qū)動和應用程序都是

37、依靠這個標準來進行交流。本系統(tǒng)所使用的usb攝像頭正是基于該標準來編寫驅(qū)動和應用程序的。linux內(nèi)核是依據(jù)設備號來操作設備文件的,在內(nèi)核中,攝像頭對應的設備文件名為/dev/video0,主設備號是81,次設備號根據(jù)攝像頭數(shù)目來確定,本系統(tǒng)中僅使用一個攝像頭,所以可以通過mknod /dev/video0 c 81 0末創(chuàng)建節(jié)點。如下圖4-2攝像頭驅(qū)動的實現(xiàn)原理用戶進程系統(tǒng)調(diào)用接收緩沖區(qū)|發(fā)送緩沖區(qū)文件操作接口終端服務程序攝像頭圖4-2 攝像頭驅(qū)動的實現(xiàn)5 linux下視頻采集5.1視頻采集模塊的設計視頻采集模塊的任務是從usb攝像頭設備中讀取視頻幀數(shù)據(jù),并將獲取的視頻數(shù)據(jù)壓縮成一定格式保存

38、。它是后邊圖像處理,視頻監(jiān)測的基礎。linux系統(tǒng)中的視頻采集子系統(tǒng)video4linux為視頻應用程序提供了一套統(tǒng)一的api,視頻應用程序通過標準的系統(tǒng)調(diào)用即可操作各種不同的視頻捕獲設備。video4linux向虛擬文件系統(tǒng)注冊視頻設備文件,應用程序通過操作視頻設備文件實現(xiàn)對視頻設備的訪問。在嵌入式linux的內(nèi)核定制和編譯階段,已經(jīng)加入了對v4l模塊以及ov511設備的支持,運行l(wèi)inux下的視頻圖像采集程序,可以通過v4l提供的編程接口(api)從ov5n設備中獲取圖像幀。linux下與video4linux相關(guān)設備及用途如表所示設備名稱minor range功能/dev/video0-

39、63視頻捕捉接口/dev/radio64-127am/fm音頻接口/dev/vtx193-224文字電視廣播/dev/vbi224-239原始vbi數(shù)據(jù)這里主要針對設備文件/dev/video進行視頻捕捉方面的程序設計。將一個usb hub接到開發(fā)平臺的usb host上,運行cat/proc/devices可以知道video capture device的主設備號是81,再運行l(wèi)s -l/dev看到video0的次設備號是0。為攝像頭建立設備號,mknod /dev/video0 c 81 0。v4l模塊的視頻采集接口設備為/dev/video,而usb攝像頭加載后生成的設備文件為/dev/

40、v4l/video0,為了和v4l模塊相協(xié)調(diào),使用in -s/dev/v4l/video0 /dev/video0為v4l模塊的默認設備video與物理設備video0建立連接。采集程序打開該接口并掃描以尋找需要的數(shù)據(jù)。5.2 基于v4l的編程5.2.1video4linux中主要的數(shù)據(jù)結(jié)構(gòu)video4linux支持的數(shù)據(jù)結(jié)構(gòu)及其用途(1) video_capability 包含設備的基本信息(設備名稱、支持的最大最小分辨率、信號源信息等)包含的分量:name32 /設備名稱maxwidth ,maxheight,minwidth,minheightchannels /信號源個數(shù)type /是

41、否能capture,彩色還是黑白,是否能裁剪等等。值如vid_type_capture等具體實現(xiàn)函數(shù)如下:int camere_get_capability(camera_device*vd)if(ioctl(vdfd,vidiocgcap,&(vdcapability)0)permr(“camer_get_cability:”):return -1;return 0; (2)video_picture 讀 video-picnire中信息,成功后可讀取圖像的屬性,包括視頻圖像的亮度、色度、對比度等。 int camere_get_picture(camere_device*vd)if(ioe

42、tl(vdfd,vidiocgpict,&(vdpicture)0)perror(“camera _get_picture:”)return -1;return 0;(3) 設置video-picture中分量的值,先為分量賦新值,再調(diào)用vidiocgpict。vdpicture.colour=65535;if(ioctl(vdfd,vidiocgpict,&(vdpicture)0)perror(“camere_get_picture:”):return -1;(4) 初始化channel。必須先得到vdc即ability中的信息。實現(xiàn)過程如下:for(i=0 :i vdcapability

43、.channels: i+)vdchanneli.channel=i:if(ioetl(vdfd,vidiocgchan,&(vdchanneli)videombuf),0,sizeof(vd-videombuf)來清零緩沖區(qū)。然后使用函數(shù)vd-map=(unsigned char*)mmap(0,vd-mbuf.size,prot_read|prot_write,mapshared,vd-fd,ff_t offset)使設備內(nèi)容映射到內(nèi)存區(qū),其中第一個參數(shù)為共享內(nèi)存的起始地址,一般設為0,表示由系統(tǒng)分配;第二個參數(shù)為映射到調(diào)用進程地址空間的字節(jié)數(shù),它從被映射文件開頭offset個字節(jié)丌始算起

44、;第三個參數(shù)指定共享內(nèi)存的訪問權(quán)限(prot_read(可讀),prot_write(可寫),prot_exec(可執(zhí)行);第四個參數(shù)可以是map_shared或者map_private;第五個參數(shù)為設備描述符。mmap()成功調(diào)用后返回系統(tǒng)實際分配的起始地址。內(nèi)存映射方式下真正進行視頻截取的是ioctl系統(tǒng)調(diào)用的vidiocmcapture命令,若函數(shù)成功調(diào)用,再用vidiocsync命令來判斷圖像截耿是否已經(jīng)完畢,若該函數(shù)調(diào)用成功,則表明一幀圖像的截取己完成,便丌始下一幀圖像數(shù)據(jù)的截取,并將當前截耿的幀號按緩沖區(qū)總幀數(shù)的模加上1。5.3在lcd上顯示視頻圖像在usb攝像頭被驅(qū)動后,只需要再

45、編寫一個對視頻流采集的應用程序就可以了。根據(jù)嵌入式系統(tǒng)開發(fā)特征,先在宿主機上編寫應用程序,再使用交叉編譯器進行編譯鏈接,生成在目標平臺的可執(zhí)行文件。宿主機與目標板通信采用打印終端的方式進行交叉調(diào)試,成功后移植到目標平臺。首先打開視頻設備,攝像頭在系統(tǒng)中對應的設備文件為/dev/video0。在類初始化里面完成,其調(diào)用函數(shù)fd = open (/dev/video0, o_ rdwr); fd是設備打開后返回的文件描述符(打開錯誤返回一1)。以后的系統(tǒng)調(diào)用函數(shù)就可使用它來對設備文件進行操作了。接著,利用ioct1 ( fd, vidiocgcap, & vid_caps)函數(shù)讀取struct v

46、ideo capability中有關(guān)攝像頭的信息。該函數(shù)成功返回后,這些信息從內(nèi)核空間拷貝到用戶程序空間vid_caps各成員分量中。用ioctl(fd, vidiocgpict, & vid_tic)函數(shù)讀取攝像頭緩沖中voideo_picture信息,在用戶空間程序中可以改變這些信息。完成以上初始化設備工作后,就可以對視頻圖像截取了。在lcd上的顯示如圖所示6 視頻網(wǎng)絡傳輸模塊研究與實現(xiàn)要實現(xiàn)監(jiān)控現(xiàn)場,除了完成視頻采集的編程,還需要把視頻圖像數(shù)據(jù)通過網(wǎng)絡傳輸出去,因此需要在完成視頻采集的基礎上建立網(wǎng)絡服務器,實現(xiàn)客戶端和服務器之間的數(shù)據(jù)通信。本系統(tǒng)視頻的網(wǎng)絡傳輸是基于tcp協(xié)議來實現(xiàn),前端

47、嵌入式機作為視頻服務器負責視頻采集并建立好tcp服務器,等待客戶端的連接;客戶端做好一系列初始化工作后,主動連接服務器,得到應答后建立連接接收壓縮視頻數(shù)據(jù)并實時顯示,同時可以根據(jù)用戶的要求進行實時或定時保存圖像或者視頻文件。6.1 tcpip協(xié)議簡介tcpip協(xié)議是針對ni司njt-發(fā)的體系結(jié)構(gòu)和協(xié)議標準,廣泛地應用于組建網(wǎng)絡中。它雖不是國際標準,但卻是用戶可獲得的“既成事實”的標準。tcpip傳輸層有兩個并列的協(xié)議:tcp協(xié)議和udp協(xié)議。其中tcp是面向連接的,而udp是面向無連接的。它們都是建立在ip協(xié)議之上。tcp提供應用程序的服務與udp提供的服務是不同的。(1)面向連接tcp協(xié)議是面向連接,客戶程序要與服務程序建立一個連接才能通過這個連接傳輸數(shù)據(jù),并在結(jié)束時斷開這個連接。(2)可靠性tcp協(xié)議提供了可靠性,發(fā)送的數(shù)據(jù)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論