版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 長(zhǎng)春理工大學(xué) 摘要(zhiyo) 近年來隨著國民經(jīng)濟(jì)的持續(xù)快速發(fā)展,在工業(yè)、民用等諸多領(lǐng)域,視頻信息無線傳輸?shù)男枨笤谌找嬖鲩L(zhǎng)。比如在電力系統(tǒng)中,隨著輸電電壓等級(jí)的不斷提高,電網(wǎng)的分布也越來越廣,實(shí)時(shí)遠(yuǎn)程視頻傳輸成為必要。本文(bnwn)在對(duì)嵌入式系統(tǒng)和3G網(wǎng)絡(luò)大量研究的基礎(chǔ)上提出了一套無線視頻(shpn)傳輸系統(tǒng)架構(gòu),該系統(tǒng)基于ARM技術(shù)進(jìn)行了視頻采集,視頻傳輸?shù)挠布娐泛蛙浖绦虻脑O(shè)計(jì),使得通過攝像頭采集的視頻數(shù)據(jù)能夠從局域網(wǎng)傳到客戶機(jī)上,實(shí)現(xiàn)了實(shí)時(shí)的視頻監(jiān)控。該設(shè)計(jì)中基于ARM系統(tǒng)的主要單元完成了實(shí)驗(yàn)室模擬仿真。驗(yàn)證了設(shè)計(jì)的正確性。為3G網(wǎng)絡(luò)應(yīng)用于電力系統(tǒng)及其他領(lǐng)域的遠(yuǎn)程無線視頻監(jiān)控奠定
2、了基礎(chǔ)。 關(guān)鍵詞:圖像,視頻,3G,ARM,嵌入式系統(tǒng),Linux ABSTRACT Recent years, with sustained rapid growth in the industrial, civil and other areas, the demand for wireless transmission of video information in ever-increasing.In power system, with the continuous improvement of the transmission voltage levels, more and mo
3、re extensive distribution network, real-time remote video transmission become necessary.In this paper, in the embedded system and a large number of 3G networks based on a set of wireless video transmission system architecture, which is based on ARM technology, video capture, video transmission hardw
4、are and softwaredesign, makes the adoption of camera can capture video data transmitted from the LAN client to achieve the real-time video surveillance.The ARM system design based on the completion of the main unit of the laboratory simulation.Verify the correctness of the design.For the 3G network
5、to other areas of power systems and remote wireless video surveillance basis. Keywords: Video,Photo, 3G, ARM, embedded system, Linux摘要(zhiyo)I第一章. 緒論(xln)3 1.1 課題(kt)的背景 1.2 課題的研究意義 1.3 論文的主要工作內(nèi)容第二章.3G網(wǎng)絡(luò)及視頻傳輸?shù)难芯颗c介紹8 2.1 第三代移動(dòng)通信系統(tǒng)(3G) 2.2主要圖象壓縮方法和視頻壓縮標(biāo)準(zhǔn)介紹第三章.基于ARM的圖像采集和基于3G傳輸模塊的硬件設(shè)計(jì)11 3.1 S3C2410存儲(chǔ)器控
6、制器與存儲(chǔ)器接口電路 3.2處理器S3C2410網(wǎng)絡(luò)接口擴(kuò)展的電路設(shè)計(jì) 3.3 USB控制器及USB電路 3.4 S3C2410的UART端口及由其擴(kuò)展的串口電路第四章.基于ARM的圖象采集模塊的軟件設(shè)計(jì)15 4.1嵌入式LINUX系統(tǒng)的移植簡(jiǎn)介及調(diào)試方法 4.2基于USB接口的視頻圖象采集的軟件實(shí)現(xiàn) 4.3圖像數(shù)據(jù)的M-JPEG壓縮編碼第五章系統(tǒng)通信功能實(shí)驗(yàn)室仿真及調(diào)試結(jié)果30 5.1 C/S模式下網(wǎng)絡(luò)通信程序的設(shè)計(jì) 5.2具體各個(gè)應(yīng)用程序和在圖象傳輸系統(tǒng)中程序集成后的運(yùn)行結(jié)果致謝34參考文獻(xiàn)35 第一章 緒 論 圖像的獲取是由視頻采集部分來完成的,采集的視頻可以分成模擬視頻和數(shù)字視頻兩種。
7、圖像的轉(zhuǎn)換和播放是由終端的計(jì)算機(jī)或者其他嵌入式產(chǎn)品程序完成,屬于對(duì)圖像的應(yīng)用范疇。很顯然,視頻的采集與對(duì)視頻展開的應(yīng)用常常不是在同一個(gè)地方完成的,因此有一個(gè)通信過程:負(fù)責(zé)將前端采集的模擬或者數(shù)字視頻進(jìn)行有效、可靠地傳輸。特別是針對(duì)圖像應(yīng)用而進(jìn)行的通信研究被稱為(chn wi)圖像通信。隨著3G技術(shù)(jsh)的日漸成熟和Internet網(wǎng)絡(luò)的普及,隨時(shí)隨地查看需要的視頻資料或者監(jiān)控圖像成為一個(gè)趨勢(shì),有著極其廣泛的市場(chǎng)和應(yīng)用。而計(jì)算機(jī)技術(shù)是通信技術(shù)發(fā)展的強(qiáng)大技術(shù)支撐,信息社會(huì)是這兩大技術(shù)完美融合的產(chǎn)物(chnw)。計(jì)算機(jī)的硬件系統(tǒng)有朝著面向應(yīng)用的片上系統(tǒng)(SOC:System On Chip)發(fā)展
8、的趨勢(shì):片上系統(tǒng)就是指將某類應(yīng)用有關(guān)的常用外設(shè)與計(jì)算機(jī)的CPU集成在一個(gè)芯片上,做到系統(tǒng)與其它外設(shè)的無縫銜接。計(jì)算機(jī)操作系統(tǒng)也有朝著面向應(yīng)用的嵌入式操作系統(tǒng)發(fā)展的趨勢(shì):嵌入式操作系統(tǒng)是指可以由用戶根據(jù)應(yīng)用的變化而自行裁減的操作系統(tǒng)。圖像通信與嵌入式硬件系統(tǒng)相結(jié)合,將能夠給人們提供一個(gè)靈活的、便攜的、功能豐富的應(yīng)用終端,能夠開展豐富的圖像應(yīng)用服務(wù),因此對(duì)基于嵌入式的傳輸系統(tǒng)展開研究將是非常有意義的。本文的工作正基于此,對(duì)嵌入式圖像視頻傳輸系統(tǒng)在實(shí)現(xiàn)上的若干關(guān)鍵問題展開深入研究,給出了系統(tǒng)的構(gòu)成框圖,并最終完成了整個(gè)系統(tǒng)的實(shí)驗(yàn)室下的仿真。1.1課題的背景 圖像視頻傳輸概念廣泛,包括多種用途:可視通
9、話、視頻點(diǎn)播,視頻監(jiān)控等等,基于安防需求的實(shí)時(shí)遠(yuǎn)距離視頻監(jiān)控系統(tǒng)有著很廣泛的應(yīng)用價(jià)值,是圖像視頻傳輸?shù)牡湫瓦\(yùn)用,本課題的提出是針對(duì)視頻監(jiān)控的新需求,采用ARM微處理器設(shè)計(jì)實(shí)現(xiàn)的對(duì)設(shè)備的遠(yuǎn)程監(jiān)控系統(tǒng)。本章將主要介紹視頻監(jiān)控系統(tǒng)的發(fā)展現(xiàn)狀以及所用到的嵌入式系統(tǒng)和微處理器ARM的發(fā)展現(xiàn)狀。1.1.1嵌入式系統(tǒng)的發(fā)展現(xiàn)狀 嵌入式系統(tǒng)是指操作系統(tǒng)和功能軟件集成于計(jì)算機(jī)硬件系統(tǒng)之中。簡(jiǎn)單的說就是系統(tǒng)的應(yīng)用軟件與系統(tǒng)的硬件一體化,類似與BIOS的工作方式。具有軟件代碼小,高度自動(dòng)化,響應(yīng)速度快等特點(diǎn)。特別適合于要求實(shí)時(shí)的和多任務(wù)的體系。從功能應(yīng)用特征上定義,嵌入式系統(tǒng)則是以應(yīng)用為中心、以計(jì)算機(jī)技術(shù)為基礎(chǔ)、軟
10、件硬件可裁剪、適應(yīng)應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)。嵌入式系統(tǒng)已經(jīng)在家庭和工業(yè)的各個(gè)領(lǐng)域得到了應(yīng)用,因?yàn)橛?jì)算機(jī)芯片是嵌入在有關(guān)的設(shè)備中的,所以沒有自己獨(dú)立的外殼。目前大多數(shù)嵌入式系統(tǒng)還處于單獨(dú)應(yīng)用的階段,以MCU為核心,與一些監(jiān)測(cè)、伺服、指示設(shè)備配合實(shí)現(xiàn)一定的功能。在一些工業(yè)和汽車應(yīng)用中,為了實(shí)現(xiàn)多個(gè)MCU之間的信息交流,利用CAN,RS-232,RS-485等總線將MCU組網(wǎng),但這種網(wǎng)絡(luò)的有效半徑比較有限,并且一般是孤立于Internet以外的。二十一世紀(jì)無疑是一個(gè)Internet時(shí)代,這一時(shí)代的到來正在不可避免地逐步改變?nèi)藗內(nèi)粘5墓ぷ?、學(xué)習(xí)和生活習(xí)慣,以手持
11、電腦、機(jī)頂盒、網(wǎng)絡(luò)電話、住宅網(wǎng)間連接器等為代表的移動(dòng)辦公設(shè)各和家庭網(wǎng)絡(luò)產(chǎn)品將在不久的將來形成時(shí)尚,在未來的信息社會(huì)中扮演重要的角色。嵌入式系統(tǒng)接入Internet是一種必然的發(fā)展趨勢(shì)。嵌入式系統(tǒng)連接到Internet上面,可以方便、低廉地將信息傳送到幾乎世界上的任何一個(gè)地方。利用該技術(shù),能夠?qū)nternet延伸到嵌入式系統(tǒng),并實(shí)現(xiàn)基于Internet的遠(yuǎn)程數(shù)據(jù)采集、遠(yuǎn)程控制、自動(dòng)報(bào)警、上傳/下載數(shù)據(jù)文件、自動(dòng)發(fā)送e-Mail等功能,為IST(Internet Sensor Technology)網(wǎng)絡(luò)傳感器技術(shù))、HVAC(家庭環(huán)境自動(dòng)控制)、信息家電、工業(yè)自動(dòng)化(制藥土業(yè)過程控制、電力系統(tǒng)、
12、電網(wǎng)安全、電網(wǎng)設(shè)備監(jiān)測(cè)、石油化工系統(tǒng))、局部環(huán)境自動(dòng)監(jiān)測(cè)、智能小區(qū)管理、網(wǎng)絡(luò)自動(dòng)抄表、高速公路出入口管理、POS網(wǎng)絡(luò)及電子商務(wù)等技術(shù)的應(yīng)用與發(fā)展提供了技術(shù)保證。將嵌入式系統(tǒng)與Internet結(jié)合起來的想法其實(shí)很早以前就有了,主要的困難在于,Internet上面的各種通信協(xié)議對(duì)于計(jì)算機(jī)存儲(chǔ)器、運(yùn)算速度等的要求比較高,而嵌入式系統(tǒng)中除部分32位處理器以外,大量存在的是8位和16位MCU,若支持TCP/IP等Internet協(xié)議將占用大量系統(tǒng)資源,或根本不可能。因而采用高性能的嵌入式處理器成為設(shè)計(jì)嵌入式Internet系統(tǒng)的關(guān)鍵。隨著技術(shù)的小斷發(fā)展,高性能的嵌入式處理器不斷涌現(xiàn),如IBM Power
13、PC,Motorola PowerPC.Intel x86,MIPS,ARM等系列。因此采用高性能的嵌入式處理器設(shè)計(jì)嵌入式Internet成為可能。1.2課題(kt)的研究意義 近年來隨著國民經(jīng)濟(jì)的持續(xù)快速發(fā)展,輸電電壓等級(jí)不斷提高,電網(wǎng)的分布也越來越廣,電力安全問題也表現(xiàn)得尤為突出。輸電線路具有分散性大、距離長(zhǎng)、難以(nny)維護(hù)等特點(diǎn),近年來事故逐年上升,傳統(tǒng)的巡視方式已不能滿足現(xiàn)有的安全需求。因此,急需一種有力的監(jiān)控、監(jiān)測(cè)手段對(duì)輸電線路上的重要設(shè)備和周邊狀況進(jìn)行全天候監(jiān)測(cè),使輸電線路運(yùn)行于可視可控之中。本課題利用嵌入式系統(tǒng)、視頻壓縮及3G網(wǎng)絡(luò)可進(jìn)行隨時(shí)隨地的將視頻監(jiān)控圖象傳送到遠(yuǎn)程(yu
14、nchng)監(jiān)控中心和用戶的PDA手機(jī)中,完成實(shí)時(shí)的視頻采集和瀏覽,并可以利用本系統(tǒng)進(jìn)行多種基于3G無線網(wǎng)絡(luò)的視頻擴(kuò)展,最終可以達(dá)到移動(dòng)終端對(duì)移動(dòng)終端、移動(dòng)終端對(duì)Internet網(wǎng)絡(luò)之間的相互實(shí)時(shí)和預(yù)存視頻傳送。整個(gè)系統(tǒng)(xtng)的框圖如圖1.1所示: 圖1.1基于(jy)3G網(wǎng)絡(luò)的視頻(shpn)傳輸系統(tǒng) 系統(tǒng)主要分為四個(gè)部分:視頻采集端、視頻發(fā)送模塊、流媒體服務(wù)器端,用戶終端。1.視頻采集端(圖中的藍(lán)框部分)為對(duì)模擬的監(jiān)控?cái)z像頭進(jìn)行A/D轉(zhuǎn)化,并通過DSP進(jìn)行H.264視頻編碼,在后一章將會(huì)介紹H.264視頻壓縮編碼是目前最適合無線網(wǎng)絡(luò)傳輸?shù)囊环N編碼格式。將視頻數(shù)據(jù)通過USB接口傳給AR
15、M處理器。2.視頻發(fā)送端(圖中的紅框部分)將讀取進(jìn)來的已壓縮好的視頻數(shù)據(jù)對(duì)其進(jìn)行TCP/IP協(xié)議的打包,并通過3G的無線模塊進(jìn)行發(fā)送到遠(yuǎn)程的流媒體視頻服務(wù)器上。3.流媒體視頻服務(wù)器(圖中紫框部分包含)進(jìn)行對(duì)各個(gè)端點(diǎn)的視頻接收和回應(yīng)用戶的需求,建立一個(gè)用戶同遠(yuǎn)程監(jiān)控端的橋梁,并保證視頻數(shù)據(jù)隨時(shí)復(fù)制備份。用戶終端(圖中黑框部分),用戶可以分為PDA手機(jī)和接入Internet網(wǎng)絡(luò)的計(jì)算機(jī)用戶,通過C/S構(gòu)架和B/S構(gòu)架兩種方式經(jīng)流煤體服務(wù)器瀏覽所需實(shí)時(shí)視頻內(nèi)容。而在本文(bnwn)中,由于3G網(wǎng)絡(luò)還未成熟,目前(mqin)也沒有3G模塊,而在視頻采集端的設(shè)計(jì)(shj)部分還有待完善,所以在本論文主要
16、進(jìn)行了基于ARM核心系統(tǒng)的研究與設(shè)計(jì),將原本設(shè)計(jì)中的1、3、4部分都進(jìn)行了有效的替代,主要對(duì)第1,2部分也就是核心的ARM處理器進(jìn)行了系統(tǒng)的研究和軟硬件的設(shè)計(jì)和實(shí)現(xiàn)。如圖1.2所示。視頻采集端由USB數(shù)碼攝像頭代替對(duì)模擬攝像頭的轉(zhuǎn)換和編碼,用ARM實(shí)現(xiàn)M-JPEG壓縮代替原有的DSP中H.264的編碼。4.視頻發(fā)送模塊,利用ARM處理器連接DM9000芯片與局域網(wǎng)連接傳輸代替原3G模塊。利用實(shí)驗(yàn)室局域網(wǎng)的傳輸代替原來的通過無線網(wǎng)絡(luò)和INTERNET的傳輸路徑。用局域網(wǎng)電腦終端代替原有的手機(jī)用戶和INTERNET網(wǎng)絡(luò)用戶。 圖1.2實(shí)驗(yàn)室模擬結(jié)構(gòu)圖1.3論文的主要工作內(nèi)容 系統(tǒng)在經(jīng)過對(duì)3G網(wǎng)絡(luò)的
17、學(xué)習(xí)和深刻理解后,對(duì)于嵌入式系統(tǒng)的整體架構(gòu)進(jìn)行了設(shè)計(jì),并進(jìn)行了可實(shí)現(xiàn)性的分析和調(diào)研,對(duì)于整體工作架構(gòu)進(jìn)行了完整的設(shè)計(jì)和分工,并對(duì)其中的核心部分(基于嵌入式Linux系統(tǒng)的ARM控制器)進(jìn)行了電路設(shè)計(jì)和軟件設(shè)計(jì),并對(duì)3G網(wǎng)絡(luò)和視頻壓縮系統(tǒng)進(jìn)行了有效的替代和模擬,不僅完成了視頻數(shù)據(jù)在網(wǎng)絡(luò)中的傳輸,而且對(duì)于一些細(xì)節(jié)問題在實(shí)際的實(shí)驗(yàn)中對(duì)一些原有的東西進(jìn)行了改進(jìn)。由局域網(wǎng)代替模擬,而在進(jìn)行DSP視頻壓縮的時(shí)候,由于這個(gè)也是比較大的工程,實(shí)驗(yàn)室目前條件有限,所以我們由USB數(shù)碼攝像頭代替模擬攝像頭和A/D轉(zhuǎn)換,在ARM處理器里用相對(duì)簡(jiǎn)單的M-JPEG壓縮算法代替原本需要DSP中進(jìn)行的H.264視頻壓縮,因
18、為在局域網(wǎng)中面對(duì)的網(wǎng)絡(luò)環(huán)境和帶寬都比較好,所以這樣的實(shí)驗(yàn)是完全可行的。本課題的主要工作1.熟悉嵌入式Linux開發(fā)環(huán)境。2.研究了3G網(wǎng)絡(luò)的業(yè)務(wù)特點(diǎn),主要對(duì)其中的關(guān)于視頻傳輸?shù)臉I(yè)務(wù)進(jìn)行了解。3.對(duì)圖像壓縮的相關(guān)技術(shù)進(jìn)行了研究。4.研究并了解視頻監(jiān)控和視頻傳輸系統(tǒng)。5.研究USB的驅(qū)動(dòng)開發(fā),特別是針對(duì)USB攝像頭驅(qū)動(dòng),研究Video4Linux編程。6.研究(ynji)對(duì)USB攝像頭操作(cozu)的上層應(yīng)用程序開發(fā)。7.研究(ynji)Linux下Socket通信編程。 第二章3G網(wǎng)絡(luò)及視頻傳輸?shù)难芯颗c介紹 本章首先對(duì)3G網(wǎng)絡(luò)進(jìn)行了詳細(xì)的研究,并結(jié)合多種視頻壓縮技術(shù)和視頻傳輸技術(shù),最終結(jié)合3G
19、網(wǎng)絡(luò)、視頻壓縮標(biāo)準(zhǔn)及視頻傳輸方法得出,利用H.264視頻編碼標(biāo)準(zhǔn),利用流媒體視頻傳輸技術(shù)在3G無線網(wǎng)絡(luò)上傳輸遠(yuǎn)程視頻的系統(tǒng)。2.1 3G網(wǎng)絡(luò)及其多媒體業(yè)務(wù)簡(jiǎn)介2.1.1第三代移動(dòng)通信系統(tǒng)(3G) 20世紀(jì)90年代以來,隨著數(shù)字技術(shù)的發(fā)展,以數(shù)字傳輸、時(shí)分多址/頻分雙工、碼分多址/頻分雙工為主體的第二代數(shù)字移動(dòng)通信系統(tǒng)(2G)逐漸代替了第一代模擬移動(dòng)通信系統(tǒng)。其技術(shù)進(jìn)步表現(xiàn)在以下幾個(gè)方面:完善了呼叫處理和網(wǎng)絡(luò)管理功能、頻譜效率提高、系統(tǒng)容量增大、保密性好、標(biāo)準(zhǔn)化程度高。第二代數(shù)字移動(dòng)系統(tǒng)的成功不僅體現(xiàn)在技術(shù)上,在商業(yè)上也取得很大的成就,國際上商用的2G系統(tǒng)有歐洲的GSM系統(tǒng)、日本的PDC和美國的
20、CDMA(IS-95)等。國內(nèi)目前2G系統(tǒng)有兩大運(yùn)營商,中國移動(dòng)采用GPRS系統(tǒng)(GSM升級(jí)版),而中國聯(lián)通采用CDMA系統(tǒng)。1998年起,ITU-T綜合標(biāo)準(zhǔn)化組織綜合各國標(biāo)準(zhǔn)化組織提出的建議,開始制定和不斷完善第三代移動(dòng)通信標(biāo)準(zhǔn)IMT-2000。第一、二代蜂窩移動(dòng)通信系統(tǒng)主要針對(duì)傳統(tǒng)的語音和低速率數(shù)據(jù)業(yè)務(wù),而第三代移動(dòng)通信系統(tǒng)(3G)主要面向高速率數(shù)據(jù)業(yè)務(wù)。3G有更大的系統(tǒng)容量和更靈活的高速率、多速率數(shù)據(jù)傳輸,除了語音和數(shù)據(jù)傳輸業(yè)務(wù),還能提供高達(dá)2Mbps的高質(zhì)量多媒體業(yè)務(wù)。根據(jù)無線空中接口技術(shù)的不同,現(xiàn)有3G技術(shù)大致可以分為3類:由歐洲和日本提出的WCDMA系統(tǒng)、由美國提出的CDMA200
21、0系統(tǒng)和由中國提出的TD-SCDMA系統(tǒng)。其中WCDMA-FDD系統(tǒng)采用碼分多址、頻分雙工的工作方式,上下行頻率間隔為95MHz,采用直接序列(DS)作為信息擴(kuò)頻方式。而WCDMA-TDD系統(tǒng)和TD-SCMDA系統(tǒng)都采用碼分多址/時(shí)分多址、時(shí)分雙工的工作方式,兩者的區(qū)別在于擴(kuò)頻碼的速率不同,前者采用高碼片速率3.84Mcps,而后者采用地碼片速率1.28Mcps。CDMA2000采用碼分多址、頻分雙工的工作方式,在下行鏈路傳輸中,定義了直擴(kuò)和多載波兩種工作方式,碼片速率分別為3.6864Mcps和1.22Mcps。而在歐洲,采用WCDMA作為無線空中接口技術(shù)的3G系統(tǒng)又被稱為通用移動(dòng)通信系統(tǒng)U
22、MTS(Universal Mobile Telecommunications System)?,F(xiàn)有支持IMT-2000的標(biāo)準(zhǔn)化組織主要是3GPP和3GPP2。其中3GPP稱為3G合作伙伴項(xiàng)目,負(fù)責(zé)制定以原有GSM核心網(wǎng)絡(luò)演變的3G標(biāo)準(zhǔn),以WCDMA,TD-SCDMA為空中接口技術(shù)。3GPP稱為3G合作伙伴項(xiàng)目,負(fù)責(zé)制定ANSII-41核心網(wǎng)為基礎(chǔ),CDMA2000為無線空中接口的3G技術(shù)規(guī)范?,F(xiàn)在成熟的3GPP2版本主要有CDMA2000-1X和CDMA2000-1XE,其中后者是前者的增強(qiáng)技術(shù)。我們有理由相信,3G網(wǎng)絡(luò)的到來代表著視頻傳輸?shù)男聲r(shí)代到來。2.2主要(zhyo)圖象壓縮方法和視
23、頻壓縮標(biāo)準(zhǔn)介紹 視頻傳輸應(yīng)用系統(tǒng)(xtng)多以數(shù)字視頻處理技術(shù)為基礎(chǔ),利用圖像數(shù)據(jù)壓縮的國際標(biāo)準(zhǔn)(M-JPEG,MPEG-1或MPEG-4,H.264等),綜合利用圖像傳感器、計(jì)算機(jī)網(wǎng)絡(luò)、自動(dòng)控制和人工智能等技術(shù)的流媒體傳輸系統(tǒng)。這類應(yīng)用(yngyng)系統(tǒng)將視頻捕捉設(shè)備獲得的模擬視頻信號(hào)轉(zhuǎn)變?yōu)閿?shù)字視頻信號(hào)以便于計(jì)算機(jī)處理,或者由數(shù)字?jǐn)z像機(jī)直接輸出數(shù)字視頻信號(hào),經(jīng)過壓縮處理,再通過網(wǎng)絡(luò)將數(shù)據(jù)傳輸?shù)綄?duì)方。數(shù)字視頻信號(hào)具有頻譜效率高、抗干擾能力強(qiáng)、失真少等模擬信號(hào)無法比擬的特點(diǎn),同時(shí)也具有信號(hào)處理數(shù)據(jù)量大、占用資源多的問題,正由于這個(gè)原因,造成數(shù)字視頻傳輸應(yīng)用系統(tǒng)雖然具有很多的優(yōu)點(diǎn),但其實(shí)際應(yīng)用
24、范圍不能得到更大的擴(kuò)展。只有對(duì)數(shù)字視頻信號(hào)實(shí)現(xiàn)更有效地壓縮,使之在通信和存儲(chǔ)方面的開銷降到最低,它的優(yōu)點(diǎn)才能表現(xiàn)出來,數(shù)字視頻應(yīng)用才有可能全面發(fā)展起來。將模擬視頻信號(hào)轉(zhuǎn)化為數(shù)字視頻信號(hào)包括不少技術(shù)問題。模擬視頻的數(shù)字化主要包括色彩空間的轉(zhuǎn)換、光柵掃描的轉(zhuǎn)換以及分辨率的統(tǒng)一。模擬視頻一般采用分量數(shù)字化方式,先把復(fù)合視頻信號(hào)中的亮度和色度分離,得到Y(jié)UV或YIQ分量,然后用三個(gè)模數(shù)轉(zhuǎn)換器對(duì)三個(gè)分量分別進(jìn)行數(shù)字化,最后轉(zhuǎn)換成RGB(Red,Breen,Blue,三原色)空間。根據(jù)電信號(hào)的特征,亮度信號(hào)的寬度是色度信號(hào)帶寬的兩倍。因此其數(shù)字化時(shí)可采用幅色采樣法,即信號(hào)的色差分量的采樣率低于對(duì)亮度分量的
25、采樣率。用Y:U:V來表示YUV三分量的采樣比例,則數(shù)字視頻的采樣格式分別有4:1:1,4:2:2和4:4:4三種。電視圖像既是空間的函數(shù),也是時(shí)間的函數(shù),而且又是隔行掃描式,所以其采樣方式比掃描儀圖像的方式要復(fù)雜的多。分量采樣時(shí)采集到的隔行樣本點(diǎn),要把隔行樣本組合成逐行樣本,然后進(jìn)行樣本采樣點(diǎn)的量化,YUV到RGB色彩空間的轉(zhuǎn)換等等,最后才能得到數(shù)字視頻數(shù)據(jù)。2.2.1圖象壓縮的主要基本方法(fngf)簡(jiǎn)介 數(shù)據(jù)之所以能夠壓縮是基于原始信源的數(shù)據(jù)存在(cnzi)著很大的冗余度。隨著數(shù)字通信技術(shù)和計(jì)算機(jī)技術(shù)的發(fā)展,數(shù)據(jù)壓縮技術(shù)日臻完善,適合各種應(yīng)用場(chǎng)合的編碼方法不斷產(chǎn)生。目前常用的壓縮編碼方法
26、可以分為兩大類:一類是無損壓縮法,也稱冗余壓縮法或嫡編碼法;另一類是有損壓縮,也稱嫡壓縮法。1.幀內(nèi)和幀間壓縮(y su)幀內(nèi)數(shù)據(jù)是指一幀畫面內(nèi)水平和垂直方向取樣點(diǎn)的集合,或稱圖像空間。把只利用空間冗余度的技術(shù)歸類為幀內(nèi)編碼技術(shù)。幀內(nèi)編碼的例子有幀內(nèi)預(yù)測(cè)編碼(DPCM)、二維離散余弦變換(DCT)、矢量量化(VQ)、子帶編碼和塔形編碼等。由于幀內(nèi)編碼不涉及時(shí)間維的信息量,不能獲得如幀間編碼那樣高的壓縮水平。在幀間方法中,需要同時(shí)考慮空間和時(shí)間的冗余度。然而,幀內(nèi)編碼的實(shí)現(xiàn)相對(duì)而言比較簡(jiǎn)單,編碼器中不需要用以處理相鄰幀數(shù)據(jù)的存儲(chǔ)器,不需要在1個(gè)幀的間隔時(shí)間內(nèi)處理來自多幀的信息。2.預(yù)測(cè)編碼預(yù)測(cè)編
27、碼的原理是由鄰近的像素值預(yù)測(cè)當(dāng)前的像素值,然后對(duì)當(dāng)前的像素和預(yù)測(cè)像素的差值進(jìn)行量化和編碼??紤]到在高性能和復(fù)雜性之間的折衷,通常用于幀內(nèi)預(yù)測(cè)的鄰近像素的個(gè)數(shù)并不多(不超過4個(gè)),使用更多的像素并不會(huì)顯著改進(jìn)預(yù)測(cè)性能。對(duì)于幀間預(yù)測(cè),一般只用相鄰幀的對(duì)應(yīng)像素進(jìn)行預(yù)測(cè)。圖像的相關(guān)性越大,預(yù)測(cè)誤差就越小,取得的壓縮比也就越大。相對(duì)說來,DPCM是一種比較容易實(shí)現(xiàn)的壓縮方法,但在較低的速率時(shí),其壓縮能力一般不如變換編碼好。3.變換編碼正交變換的理論證明,通過某種正交變換,可以把數(shù)據(jù)從圖像域映射到變換域中去,總能量不變,但其分布則發(fā)生改變,集中分布在少數(shù)區(qū)域(qy),形成一種更緊湊的形式。這使得圖像在變換
28、域中可以用更少的比特?cái)?shù)表示,以此獲得壓縮。盡管正交變換有許多種,但實(shí)用中大都選用二維DCT(離散余弦(yxin)變換)進(jìn)行變換編碼。這是因?yàn)槠湫阅軆?yōu)越,接近最佳的K-L變換。將一幅圖像分割(fng)為多個(gè)相鄰小方塊,對(duì)每個(gè)單獨(dú)的圖像方塊進(jìn)行DCT變換。圖像塊尺寸的選擇是在圖像質(zhì)量、壓縮效率和實(shí)現(xiàn)難度之間進(jìn)行折衷而決定的。在實(shí)際應(yīng)用中,常選8X8或16X16的圖像塊。4.變長(zhǎng)編碼它包括2部分,即一維游程編碼和霍夫曼編碼。圖像經(jīng)DCT(離散余弦變換),變換和量化后形成為數(shù)眾多的零系數(shù),而且這些系數(shù)大部分集中在高頻部分。為了充分利用這一點(diǎn),在進(jìn)行游程編碼時(shí),對(duì)8X8圖像塊的DCT系數(shù)采用曲折掃描順序
29、處理,以期獲得較長(zhǎng)的連零值,有利于其后的游程編碼。游程編碼將曲折掃描后的系數(shù)變成若干對(duì)(游程一幅值)數(shù)據(jù)這里,游程是指連零的個(gè)數(shù),幅值是指非零系數(shù)的值。 第三章 基于ARM的圖像采集和傳輸模塊的硬件設(shè)計(jì) 本系統(tǒng)以基于ARM9的嵌入式處理器三星S3C2410芯片為核心,S3C2410芯片的功能很強(qiáng)大,集成了各種常用的重要接口,如USB接口、UART、SPI、I2C、SD卡、ADC通道和觸摸屏接口等。接口應(yīng)用范圍很廣,適用于信息家電、智能電話、工業(yè)控制、手持設(shè)備、移動(dòng)終端等領(lǐng)域15。利用S3C2410強(qiáng)大的擴(kuò)展功能,根據(jù)本項(xiàng)目的實(shí)際需要設(shè)計(jì)了如圖3.1中的硬件系統(tǒng),其中USB接口數(shù)碼攝像頭、串口、
30、網(wǎng)口作為輸入輸出設(shè)備,F(xiàn)LASH和SDRAM作為存儲(chǔ)器設(shè)備,JTAG口是用來把嵌入式Linux操作系統(tǒng)和應(yīng)用程序燒寫進(jìn)FLASH存儲(chǔ)器的,下面具體介紹各部分的設(shè)計(jì)。其中RS232接口是從PC機(jī)的串口下載編譯的內(nèi)核和軟件,F(xiàn)LASH和SDRAM則相當(dāng)與PC機(jī)上的硬盤和內(nèi)存,JTAG接口為調(diào)試所使用,數(shù)碼攝像頭和DM9000芯片為實(shí)驗(yàn)室下的視頻數(shù)據(jù)采集和發(fā)送端。數(shù)碼攝像頭和S3C2410芯片共同構(gòu)成了視頻數(shù)據(jù)采集端,通過以太網(wǎng)控制芯片DM9000構(gòu)成數(shù)據(jù)發(fā)送端,完成了數(shù)據(jù)的采集和發(fā)送的任務(wù)。 圖3.1系統(tǒng)硬件(yn jin)結(jié)構(gòu)框圖3.1 S3C2410存儲(chǔ)器控制器與存儲(chǔ)器接口(ji ku)電路
31、S3C2410存儲(chǔ)器控制器提供外部存儲(chǔ)器存取的控制信號(hào),它具有如下特性:數(shù)據(jù)(shj)存儲(chǔ)在存儲(chǔ)器的方式可以通過軟件設(shè)置成大端和小端兩種方式,系統(tǒng)的存儲(chǔ)空間分成8個(gè)bank,每個(gè)bank的大小是128M字節(jié),共1G字節(jié),采用nGCS7:08個(gè)通用片選線信號(hào)選擇8個(gè)bank區(qū),圖3.2是S3C2410復(fù)位后的存儲(chǔ)空間分布圖;bank0到bank5的開始地址是固定的,用于ROM或SRAM;bank6和bank7用于ROM、SRAM或SDRAM,bank6地址也是固定的,bank7的開始地址是bank6的結(jié)束地址,起始地址和大小編程可變;所有內(nèi)存塊的訪問周期都可編程,外部Wait擴(kuò)展了訪問周期;除了
32、bank0,其余的存儲(chǔ)段可以通過程序控制存取的位數(shù)8/16/32;支持SDRAM的自動(dòng)刷新和電源關(guān)模式等。從上可知S3C2410存儲(chǔ)器控制器支持多種類型的存儲(chǔ)器,針對(duì)本項(xiàng)目需求,下面討論一下存儲(chǔ)器的如何選用和接口設(shè)計(jì)問題。3.2處理器S3C2410網(wǎng)絡(luò)接口擴(kuò)展的電路設(shè)計(jì) 處理器S3C2410中沒有集成網(wǎng)絡(luò)控制器,要實(shí)現(xiàn)網(wǎng)絡(luò)連接,必須使用網(wǎng)絡(luò)接口芯片進(jìn)行擴(kuò)展。DM9000是完全綜合的、成本較低的快速以太網(wǎng)控制器芯片,具有通用的處理器接口,10/100M自適應(yīng),以及4K雙字節(jié)靜態(tài)存取存儲(chǔ)器。它具有低功耗、高處理性能的特點(diǎn),支持3.3V到5V的容差,支持MII接口和可選的EEPROM配置,支持8位1
33、6位32位的接口來適應(yīng)不同的處理器對(duì)內(nèi)部存儲(chǔ)器的訪問,完全支持IEEE802.3u規(guī)格和IEEE 802.3X全雙工流控制以及支持連接狀況變更和遠(yuǎn)程喚醒功能,因此本系統(tǒng)采用它來進(jìn)行網(wǎng)絡(luò)功能擴(kuò)展。 S3C2410與DM9000的連接(linji)框圖如3.5所示,通過網(wǎng)絡(luò)變壓器連接的RJ45接口可以直接連接(linji)到外部網(wǎng)絡(luò)中去。DM9000支持(zhch)ISA異步總線接口,該ISA接口支持對(duì)內(nèi)部存儲(chǔ)器數(shù)據(jù)操作的8位和16位I/O模式,這里采用的是其中16位數(shù)據(jù)I/O模式,DM9000的16位數(shù)據(jù)線SD00:15與CPU S3C2410的低16位數(shù)據(jù)總線DATA00:15相連,DM900
34、0的地址線SA4SA9用來選擇其中的I/O端口的基地址,基地址是可在300H370H范圍內(nèi)進(jìn)行設(shè)置的, 圖3.2 S3C2410芯片復(fù)位后的存儲(chǔ)空間復(fù)位圖 圖中把SA9和SA8連接到VCC,SA4SA7接GND,這樣就把DM9000的I/O基地址設(shè)置為300H,如果在DM9000外圍配置了EEPROM的話,也是可以通過對(duì)EEPROM編程來重新設(shè)置這個(gè)地址值的;引腳AEN起地址使能作用,S3C2410利用片選控制線nGCS1提供對(duì)AEN的信號(hào)輸入,實(shí)現(xiàn)對(duì)DM9000的片選,這樣DM9000位于存儲(chǔ)空間的nGCS1+300H位置;CMD引腳來決定操作時(shí)訪問的是數(shù)據(jù)端口還是地址端口,這里由S3C24
35、10的地址總線中的ADDR2信號(hào)來提供,當(dāng)輸入為低電平時(shí),訪問的是地址端口,DM9000設(shè)備地址端口為nGCS1+300H+0,當(dāng)輸入為高電平時(shí),訪問的是數(shù)據(jù)端口,DM9000設(shè)備數(shù)據(jù)端口為nGCS1+300H+4;DM9000占用S3C2410的24路外部中斷的EINT0,引腳PW_RST#與S3C2410的nRESET相連實(shí)現(xiàn)硬件復(fù)位功能,引腳X2_25M和X1_25M外接一個(gè)25M晶體產(chǎn)生DM9000本身的系統(tǒng)時(shí)鐘和網(wǎng)絡(luò)時(shí)鐘;網(wǎng)絡(luò)連接及數(shù)據(jù)收發(fā)狀態(tài)由LED指示,LINK_ACT引腳引出的指示燈表示連接狀態(tài),SPEED引腳引出的指示燈表示數(shù)據(jù)收發(fā)狀態(tài)。3.3 USB控制器及USB電路(di
36、nl) S3C2410集成(j chn)了USB主機(jī)(zhj)控制器和設(shè)備控制器,在外部有2個(gè)USB主機(jī)接口和一個(gè)設(shè)備接口。通用串行總線(USB)設(shè)備控制器設(shè)計(jì)用DMA接口提供一個(gè)高性能完備的速率功能控制解決方案,它支持USB1.1協(xié)議版本,有懸空和喚醒功能,USB控制器允許使用DMA的批量傳輸、中斷傳輸和控制傳輸三種傳輸方式。S3C2410引出USB連接口十分方便,按照USB1.1標(biāo)準(zhǔn)協(xié)議連接即可,同時(shí)支持低速和高速的USB設(shè)備傳輸。在這里我們擴(kuò)展的是主USB接口,應(yīng)將D+接S3C2410的DP,D-接DN,電路如圖3.3所示,本系統(tǒng)中的USB口數(shù)碼攝像頭就是連接在USB_CON上。 圖3.
37、3 S3C2410芯片與USB接口框圖3.4 S3C2410的UART端口及由其擴(kuò)展的串口電路 圖3.7 S3C2410芯片與UART接口電路(dinl)框圖 S3C2410的UART提供3個(gè)獨(dú)立通道的異步串行輸入輸出口,每一個(gè)(y )都可工作在中斷模式和DMA模式下。如果(rgu)用系統(tǒng)時(shí)鐘,UART可支持達(dá)230.4Kbps的位速率;如果用外部設(shè)備通過UCLK提供的時(shí)鐘,那么UART可工作在更高的速率;3個(gè)UART都可用作紅外線接口。S3C2410可以很方便地用UART實(shí)現(xiàn)RS-232串口功能,但S3C2410的供電電壓為1.8V/3.3V,所以I/O口的最大邏輯電平也是3.3V,要實(shí)現(xiàn)R
38、S232串口功能還要加電平轉(zhuǎn)換電路,我們用MAX3232來實(shí)現(xiàn)這一功能。MAX3232單+3.3V電源供電,僅需外接幾個(gè)電容即可完成從TTL/CMOS電平到RS-232電平的轉(zhuǎn)換。 第四章基于ARM的圖象采集模塊的軟件設(shè)計(jì) 本章(bn zhn)介紹ARM圖象采集端中軟件的設(shè)計(jì)方法和主要內(nèi)容(nirng)。包括程序的移植和調(diào)試方法,同時(shí)包括了主要的2個(gè)部分:USB口數(shù)碼攝像頭的視頻采集模塊編寫(包括(boku)攝像頭驅(qū)動(dòng)和Video4Linux下攝像頭采集編程)和M-JPEG壓縮算法。4.1嵌入式LINUX系統(tǒng)的移植簡(jiǎn)介及調(diào)試方法4.1.1 BOOTLOADER(引導(dǎo)加載程序)移植BOOTLOA
39、DER(引導(dǎo)加載程序)是在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的第一段代碼通過這段代碼。我們可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖。從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài).以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。對(duì)于PC機(jī)的Linux體系結(jié)構(gòu).PC機(jī)中的引導(dǎo)加載程序由BIOS和位于硬盤MBR的操作系統(tǒng)引導(dǎo)加載程序組成BIOS在完成硬件檢測(cè)和資源分配后.將硬盤MBR中的BOOTLOADER讀到系統(tǒng)的RAM中。然后將控制權(quán)交給操作系統(tǒng)BOOTLOADER引導(dǎo)加載程序的主要運(yùn)行任務(wù)就是將內(nèi)核映像從硬盤上讀到RAM中。然后跳轉(zhuǎn)到內(nèi)核的入口點(diǎn)去運(yùn)行。即開始啟動(dòng)操作系統(tǒng)在嵌入式系統(tǒng)中。通常并沒有像BIOS那樣
40、的固件程序。因此在整個(gè)系統(tǒng)的加載啟動(dòng)任務(wù)就完全由BOOTLOADER來完成。4.1.2 Linux內(nèi)核編譯 交義編譯工具被安裝到/usr/local目錄下,故應(yīng)該設(shè)置環(huán)境變量PATH,使其包含/usr/local/bin路徑。在這個(gè)目求包含arm linux的源碼壓縮包以及一此例子程序。#PATH=/usr/local/bin:$PATH內(nèi)核都是常駐內(nèi)存的,當(dāng)需要調(diào)用應(yīng)用程序時(shí),再把需要的程序從磁盤調(diào)入內(nèi)存運(yùn)行。構(gòu)建內(nèi)核常用的命令如下:.make config:配置內(nèi)核,調(diào)用./scripts/Congigure來進(jìn)行配置.make dep:鏈接程序代碼及函數(shù)庫,創(chuàng)建依賴性列表.make cl
41、ean:清除原有的編譯生成的文件.make zlmage:生成可壓縮的內(nèi)核映象文件./arch/$(ARCH)/bcot/zlmagearm linux的內(nèi)核在編譯結(jié)束后會(huì)在arm linux-dist/目求下產(chǎn)生兩個(gè)新的目錄images/和romfs/。Images目錄中包含了編譯完成后可以下載到目標(biāo)板上運(yùn)行的arm linux內(nèi)核映象的二進(jìn)制文件。我們可以在rom fs/bin/目錄下添加自己的應(yīng)用程序,當(dāng)然這里的應(yīng)用程序是指經(jīng)過arm-elf交叉編譯工具編譯,可在目標(biāo)板上運(yùn)行的程序。4.1.3軟件調(diào)試方法 緒論中提到,由于嵌入式系統(tǒng)平臺(tái)資源有限性的特點(diǎn),其軟件開發(fā)時(shí)采用一種交叉編譯調(diào)試的
42、方式,交叉編譯調(diào)試環(huán)境建立在宿主機(jī)(通用PC機(jī))上,開發(fā)時(shí)使用宿主機(jī)上的交叉編譯、匯編及連接工具形成可執(zhí)行的二進(jìn)制代碼,通過NFS方式把宿主機(jī)上可執(zhí)行文件mount加載到目標(biāo)平臺(tái)上,調(diào)試信息通過串口打印在宿主機(jī)的minicom屏幕上,通過在串口終端這樣反復(fù)調(diào)試、更改、編譯再調(diào)試,而不必每次燒寫到目標(biāo)平臺(tái)的FLASH中,直至程序工作正常,得到正確的運(yùn)行結(jié)果,然后才把可執(zhí)行文件下載燒寫到目標(biāo)平臺(tái)上(在這里指以S3C2410為處理器的嵌入式系統(tǒng)平臺(tái))運(yùn)行,可執(zhí)行文件是燒寫在平臺(tái)上的FLASH中, 圖4.1 FLASH中代碼(di m)存放位置 4.2基于(jy)USB接口的視頻圖象(t xin)采集
43、的軟件實(shí)現(xiàn) 本嵌入式系統(tǒng)平臺(tái)上運(yùn)行的是armlinux,在啟動(dòng)后啟用了MMU,系統(tǒng)進(jìn)入保護(hù)模式,所以應(yīng)用程序就不能直接讀寫外設(shè)的I/O區(qū)域(包括I/O端口和I/O內(nèi)存),一般這時(shí)就要借助于該外設(shè)的驅(qū)動(dòng)來進(jìn)入內(nèi)核態(tài)完成這個(gè)工作。所以本系統(tǒng)中的視頻采集要分兩步實(shí)現(xiàn):一步是為USB口數(shù)碼攝像頭在內(nèi)核中寫個(gè)驅(qū)動(dòng),另一步是要再寫個(gè)上層應(yīng)用程序獲取視頻數(shù)據(jù)。下面分別進(jìn)行討論。4.2.1 USB口數(shù)碼攝像頭的驅(qū)動(dòng)實(shí)現(xiàn) 圖4.2 Linux下的驅(qū)動(dòng)實(shí)現(xiàn)(shxin)原理框圖 在Linux下,所有外部設(shè)備被看成(kn chn)是一類特殊文件,稱之為“設(shè)備(shbi)文件”,系統(tǒng)中的所有硬件設(shè)備都可使用一個(gè)特殊的
44、設(shè)備文件來表示,例如,系統(tǒng)中的數(shù)碼攝像頭使用/dev/Video0來表示。每個(gè)設(shè)備文件對(duì)應(yīng)有兩個(gè)設(shè)備號(hào):一個(gè)是主設(shè)備號(hào),標(biāo)識(shí)該設(shè)備的種類,也標(biāo)識(shí)了該設(shè)備所使用的驅(qū)動(dòng)程序;另一個(gè)是次設(shè)備號(hào),標(biāo)識(shí)使用同一設(shè)備驅(qū)動(dòng)程序的不同硬件設(shè)備。設(shè)備文件的主設(shè)備號(hào)必須與設(shè)備驅(qū)動(dòng)程序在登錄該設(shè)備時(shí)申請(qǐng)的主設(shè)備號(hào)一致,否則用戶進(jìn)程將無法訪問到設(shè)備驅(qū)動(dòng)程序。在Linux操作系統(tǒng)下有兩類主要的設(shè)備文件:一類是字符設(shè)備,另一類則是塊設(shè)備。字符設(shè)備是大多數(shù)只能順序訪問的數(shù)據(jù)通道,不能完全象訪問普通文件數(shù)據(jù)流一樣前后移動(dòng)訪問指針,不需要經(jīng)過系統(tǒng)的快速緩存,在對(duì)字符設(shè)備發(fā)出讀寫請(qǐng)求時(shí),實(shí)際的硬件I/O操作緊接著就發(fā)生了,一般來
45、說字符設(shè)備中的緩存是可有可無的;然而也存在和數(shù)據(jù)區(qū)特性類似的字符設(shè)備,訪問它們時(shí)可前后移動(dòng)訪問指針,例如,幀捕捉卡和本系統(tǒng)平臺(tái)用的USB口數(shù)碼攝像頭就是這樣一個(gè)設(shè)備,應(yīng)用程序可以用mmap或lseek訪問所抓取的整個(gè)圖像。塊設(shè)備則是利用一塊系統(tǒng)內(nèi)存作為緩沖區(qū),當(dāng)用戶進(jìn)程對(duì)設(shè)備進(jìn)行讀寫請(qǐng)求時(shí),驅(qū)動(dòng)程序先查看緩沖區(qū)中的內(nèi)容,如果緩沖區(qū)中的數(shù)據(jù)能滿足用戶的要求就返回相應(yīng)的數(shù)據(jù),否則就調(diào)用相應(yīng)的請(qǐng)求函數(shù)來進(jìn)行實(shí)際的I/O操作。塊設(shè)備主要是針對(duì)磁盤等慢速設(shè)備設(shè)計(jì)的,其目的是避免耗費(fèi)過多的CPU時(shí)間來等待操作的完成。本系統(tǒng)平臺(tái)使用的USB口數(shù)碼攝像頭是字符設(shè)備,因此要做的工作是Linux下字符型設(shè)備驅(qū)動(dòng)的
46、實(shí)現(xiàn)。相對(duì)于系統(tǒng)調(diào)用看成是Linux內(nèi)核和應(yīng)用程序之間的接口,設(shè)備驅(qū)動(dòng)程序可以看成Linux內(nèi)核與外部設(shè)備之間的接口,設(shè)備驅(qū)動(dòng)程序向應(yīng)用程序屏蔽了硬件在實(shí)現(xiàn)上的細(xì)節(jié),使得應(yīng)用程序可以像操作普通文件一樣來操作外部設(shè)備。Linux抽象了對(duì)硬件的處理,所有的硬件設(shè)備都可以像普通文件一樣來看待,可以使用和操作文件相同的、標(biāo)準(zhǔn)的系統(tǒng)調(diào)用接口來完成對(duì)硬件設(shè)備打開、關(guān)閉、讀寫和I/O控制等操作,而驅(qū)動(dòng)程序的主要任務(wù)也就是要實(shí)現(xiàn)這些系統(tǒng)調(diào)用函數(shù)。具體來說,Linux下的字符設(shè)備驅(qū)動(dòng)程序大致可以分為如下幾個(gè)部分:驅(qū)動(dòng)程序的注冊(cè)與注銷、設(shè)備的打開與釋放、設(shè)備的讀寫操作、設(shè)備的控制操作、設(shè)備的中斷和輪詢處理。1.驅(qū)
47、動(dòng)程序的注冊(cè)(zhc)與注銷向系統(tǒng)增加一個(gè)驅(qū)動(dòng)程序意味著要賦予它一個(gè)主設(shè)備號(hào),這可以通過在驅(qū)動(dòng)程序的初始化過程(guchng)中調(diào)用register_chrdev()來完成。而在關(guān)閉字符設(shè)備時(shí),則需要(xyo)通過調(diào)用unregister_chrdev()從內(nèi)核中注銷設(shè)備,同時(shí)釋放占用的主設(shè)備號(hào)。2.設(shè)備的打開與釋放打開設(shè)備是通過調(diào)用file_operations結(jié)構(gòu)中的函數(shù)open()來完成的,它是驅(qū)動(dòng)程序用來為今后的操作完成初始化準(zhǔn)備工作的。在驅(qū)動(dòng)程序中,open()需要完成下列工作:1)檢查設(shè)備相關(guān)錯(cuò)誤,如設(shè)備尚未準(zhǔn)備好等。2)如果是第一次打開,則初始化硬件設(shè)備。3)識(shí)別次設(shè)備號(hào),如果有
48、必要?jiǎng)t更新讀寫操作的當(dāng)前位置指針f_op。4)分配和填寫要放在file-private_data里的數(shù)據(jù)結(jié)構(gòu),private_data是跨系統(tǒng)調(diào)用時(shí)保存狀態(tài)信息的非常有用的資源。5)使用計(jì)數(shù)增1。釋放設(shè)備是通過調(diào)用file_operations結(jié)構(gòu)中的函數(shù)release()來完成的,這個(gè)設(shè)備方法有時(shí)也被稱為close(),它的作用正好與open()相反,要完成下列工作:1)使用計(jì)數(shù)減1。2)釋放由open分配的保存在file-private_data中的所有內(nèi)容。3)如果使用計(jì)數(shù)為0,則關(guān)閉設(shè)備。3.設(shè)備的讀寫操作字符設(shè)備的讀寫操作相對(duì)比較簡(jiǎn)單,直接使用函數(shù)read()和write()就可以了
49、。4.設(shè)備的控制操作除了讀寫操作外,應(yīng)用程序有時(shí)還需要對(duì)設(shè)備進(jìn)行控制,這可以通過設(shè)備驅(qū)動(dòng)程序中的函數(shù)ioctl()來完成。ioctl()的用法與具體設(shè)備密切關(guān)聯(lián),因此需要根據(jù)設(shè)備的實(shí)際情況進(jìn)行具體分析,在下面視頻采集程序中用到的多種方式的控制函數(shù)都是在攝像頭驅(qū)動(dòng)實(shí)現(xiàn)的。5.設(shè)備的中斷和輪詢處理對(duì)于不支持中斷的硬件設(shè)備,讀寫時(shí)需要輪流查詢?cè)O(shè)備狀態(tài),以便決定是否繼續(xù)(jx)進(jìn)行數(shù)據(jù)傳輸。如果設(shè)備支持中斷,則可以按中斷方式進(jìn)行操作。本系統(tǒng)平臺(tái)使用的嵌入式armLinux系統(tǒng)(xtng)在內(nèi)核主要功能上與Linux操作系統(tǒng)沒本質(zhì)區(qū)別,所以驅(qū)動(dòng)程序要實(shí)現(xiàn)的任務(wù)一樣,只是編譯時(shí)使用的編譯器、部分(b fe
50、n)頭文件和庫文件等要涉及到具體處理器體系結(jié)構(gòu),這些都可以通過在Makefile文件中具體指定。Video4Linux(簡(jiǎn)稱V4L)是Linux中關(guān)于視頻設(shè)備的內(nèi)核驅(qū)動(dòng),它為針對(duì)視頻設(shè)備的應(yīng)用程序編程提供一系列接口函數(shù),這些視頻設(shè)備包括現(xiàn)今市場(chǎng)上流行的TV卡、視頻捕捉卡和USB攝像頭等。具體對(duì)于USB口攝像頭,其驅(qū)動(dòng)程序中需要提供基本的I/O操作接口函數(shù)open、read、write、close的實(shí)現(xiàn),對(duì)中斷的處理實(shí)現(xiàn),內(nèi)存映射功能以及對(duì)I/O通道的控制接口函數(shù)ioctl等,并把他們定義在struct file_operations中。這樣當(dāng)應(yīng)用程序?qū)υO(shè)備文件進(jìn)行諸如open、close、re
51、ad、write等系統(tǒng)調(diào)用操作時(shí),嵌入式Linux內(nèi)核將通過file_operations結(jié)構(gòu)訪問驅(qū)動(dòng)程序提供的函數(shù)。例如,當(dāng)應(yīng)用程序?qū)υO(shè)備文件執(zhí)行讀操作時(shí),內(nèi)核將調(diào)用file_operations結(jié)構(gòu)中的read函數(shù),具體實(shí)現(xiàn)原理如圖4.2所示。Linux下的設(shè)備驅(qū)動(dòng)程序可以按照兩種方式進(jìn)行編譯,一種是直接靜態(tài)編譯成內(nèi)核的一部分,另一種則是編譯成可以動(dòng)態(tài)加載的模塊。如果編譯進(jìn)內(nèi)核的話,會(huì)增加內(nèi)核的大小,還要改動(dòng)內(nèi)核的源文件,而且不能動(dòng)態(tài)地卸載,不利于調(diào)試,所以攝像頭驅(qū)動(dòng)使用模塊方式加載。在系統(tǒng)平臺(tái)上對(duì)USB口數(shù)碼攝像頭驅(qū)動(dòng),首先把USB控制器驅(qū)動(dòng)模塊靜態(tài)編譯進(jìn)內(nèi)核,使平臺(tái)中支持USB接口,再
52、在需要使用攝像頭采集時(shí)使用insmode命令或系統(tǒng)自動(dòng)(此時(shí)要求在/etc/modules.conf中設(shè)備名與驅(qū)動(dòng)模塊對(duì)應(yīng)起來)動(dòng)態(tài)加載其驅(qū)動(dòng)模塊(此驅(qū)動(dòng)模塊為.o后綴名文件,通過使用針對(duì)于具體處理器的arm-gcc命令行里加上-c的參數(shù)和D_KERNEL_DMODULE參數(shù),把使用C語言編寫的驅(qū)動(dòng)程序模塊編譯成.o目標(biāo)文件,加入到/lib/modules/目錄下,然后用depmod-a使此模塊成為可加載模塊),驅(qū)動(dòng)程序中的模塊加載函數(shù)int init_module(void)會(huì)被自動(dòng)調(diào)用,負(fù)責(zé)進(jìn)行設(shè)備驅(qū)動(dòng)程序的初始化工作,這樣驅(qū)動(dòng)就會(huì)根據(jù)自己的類型(字符設(shè)備類型或塊設(shè)備類型,例如攝像頭就是字
53、符設(shè)備而硬盤就是塊設(shè)備)向系統(tǒng)注冊(cè),注冊(cè)成功系統(tǒng)會(huì)反饋一個(gè)主設(shè)備號(hào),這個(gè)主設(shè)備號(hào)就是系統(tǒng)對(duì)它的唯一標(biāo)識(shí)(攝像頭設(shè)備在/proc/devices中顯示的主設(shè)備號(hào)為81,我們用ls-l/dev/Video0看到的主設(shè)備就肯定是81)。驅(qū)動(dòng)就是根據(jù)此主設(shè)備號(hào)來創(chuàng)建一個(gè)一般放置在/dev目錄下的設(shè)備文件(mknod命令用來創(chuàng)建它,它必須用主設(shè)備號(hào)這個(gè)參數(shù)),這樣攝像頭就可正常工作了,4.2.2 Video4Linux下的攝像頭采集(cij)編程在USB攝像頭被驅(qū)動(dòng)后,只需要再編寫一個(gè)對(duì)視頻流采集的應(yīng)用程序就可以了。根據(jù)嵌入式系統(tǒng)開發(fā)特征,先在宿主機(jī)上編寫應(yīng)用程序,再使用(shyng)交叉編譯器進(jìn)行編譯
54、鏈接生成在目標(biāo)平臺(tái)的可執(zhí)行文件,在宿主機(jī)上與目標(biāo)板通信采用打印終端的方式進(jìn)行交叉調(diào)試,成功后移植到目標(biāo)平臺(tái)。(1)程序(chngx)中定義的數(shù)據(jù)結(jié)構(gòu)struct video_capability grab_cap;struct video_picture grab_pic;struct video_mmap grab_buf;struct video_mbuf grab_vm;這些數(shù)據(jù)結(jié)構(gòu)都是Video4Linux支持的,它們的用途如下:video_capability包含攝像頭的基本信息,例如設(shè)備名稱、支持的最大最小分辨率、信號(hào)源信息等,分別對(duì)應(yīng)著結(jié)構(gòu)體中成員變量name32、maxwidt
55、h、maxheight、minwidth、minheight、channels(信號(hào)源個(gè)數(shù))、type等;video_picture包含設(shè)備采集的圖象的各種屬性,如brightness(亮度)、hue(色調(diào))、contrast(對(duì)比度)、whiteness(色度)、depth(深度)等;video_mmap用于內(nèi)存映射;video_mbuf利用mmap進(jìn)行映射的幀信息,實(shí)際上是輸入到攝像頭存儲(chǔ)緩沖中的幀信息,包括size(幀的大?。?、frames(最多支持的幀數(shù))、offsets(每幀相對(duì)基址的偏移); 圖4.3視頻(shpn)采集程序流程圖程序(chngx)中用到的主要系統(tǒng)調(diào)用函數(shù):open
56、(“/dev/video0”,int flags);close(fd);mmap(void*start,size_t length,int prot,int flags,int fd,off_t offset);munmap(void*start,size_t length);ioctl(int fd,int cmd,);前面(qin mian)提到Linux系統(tǒng)中把設(shè)備看成設(shè)備文件,在用戶空間可以通過標(biāo)準(zhǔn)的I/O系統(tǒng)調(diào)用函數(shù)操作設(shè)備文件,從而達(dá)到與設(shè)備通信交互的目的,當(dāng)然在設(shè)備驅(qū)動(dòng)中要提供對(duì)這些函數(shù)相應(yīng)的支持。這里說明一下ioctl(int fd,int cmd,)函數(shù),它在用戶程序中用來控
57、制I/O通道,其中fd代表設(shè)備文件描述符,cmd代表用戶程序?qū)υO(shè)備的控制命令,省略號(hào)一般是一個(gè)表示類型長(zhǎng)度的參數(shù),也可沒有。(2)采集程序?qū)崿F(xiàn)過程首先打開視頻設(shè)備,攝像頭在系統(tǒng)對(duì)應(yīng)設(shè)備文件為/dev/video0,采用系統(tǒng)調(diào)用函數(shù)grab_fd=open(“/dev/video0”,O_RDWR),grab_fd是設(shè)備打開后返回的文件描述符(打開錯(cuò)誤返回-1),以后的系統(tǒng)調(diào)用函數(shù)就可使用它來對(duì)設(shè)備文件進(jìn)行操作了;接著利用ioctl(grab_fd,VIDIOCGCAP,&grab_cap)函數(shù)讀取struct video_capability中有關(guān)攝像頭信息,該函數(shù)成功返回后這些信息從內(nèi)核空間
58、拷貝到用戶程序空間的grab_cap各成員分量中,使用printf函數(shù)就可得到各成員分量信息,例如Printf(“maxheight=%d”,grab_fd.maxheight)獲得最大垂直分辨率的大小,再用ioctl(grab_fd,VIDIOCGPICT,&grab_pic)函數(shù)讀取攝像頭緩沖中video_picture信息,在用戶空間程序可以改變這些信息,具體方法為先給分量賦新值,再調(diào)用VIDIOCSPICT ioctl函數(shù),例如grab_pic.depth=3;if(ioctl(grab_fd,VIDIOCSPICT,&grab_pic)0)perror(“VIDIOCSPICT”);
59、return1;完成以上初始化設(shè)置工作后,可以(ky)對(duì)視頻圖象截取了,有兩種方法:一種是read()直接讀取方法,另外(ln wi)一種mmap()內(nèi)存映射(yngsh)方式。Read()是通過內(nèi)核緩沖區(qū)來讀取數(shù)據(jù),而mmap()通過把設(shè)備文件映射到內(nèi)存中,繞過了內(nèi)核緩沖區(qū),最快的磁盤訪問往往還是慢于最慢的內(nèi)存訪問,所以mmap()方式加速了I/O訪問。另外mmap()系統(tǒng)調(diào)用使得進(jìn)程之間通過映射同一文件實(shí)現(xiàn)共享內(nèi)存,各進(jìn)程可以象訪問普通內(nèi)存一樣對(duì)文件進(jìn)行訪問,只需要使用指針而不用調(diào)用文件操作函數(shù)。因?yàn)閙map()的以上優(yōu)點(diǎn),所以在程序?qū)崿F(xiàn)中采用了mmap()方式。利用mmap()方式視頻截
60、取具體進(jìn)行如下:先使用ioctl(grab_fd,VIDIOCGMBUF,&grab_vm)函數(shù)獲得攝像頭存儲(chǔ)緩沖區(qū)的幀信息,之后修改video_mmap中的設(shè)置,例如grab_buf.height=240;grab_buf.width=320;grab_buf.format=VIDEO_PALETTE_RGB24;接著把攝像頭對(duì)應(yīng)設(shè)備文件映射到內(nèi)存區(qū),具體使用grab_data=(unsigned char*)mmap(0,grab_vm.size,PROT_READ|PROT_WRITE,MAP_SHARED,grab_fd,0)操作,這樣設(shè)備文件的內(nèi)容就映射到內(nèi)存區(qū),該映象內(nèi)存區(qū)可讀可寫
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 竺可楨《大自然的語言》課件
- 2021廣州市高考英語閱讀類訓(xùn)練(4)及答案【三月版】
- 【與名師對(duì)話】2022高考地理課標(biāo)版總復(fù)習(xí)課時(shí)跟蹤訓(xùn)練46環(huán)境保護(hù)-
- 2021廣東惠州市高考英語完形填空課外自練(9)就答案(解析)
- 【志鴻優(yōu)化】2021年人教版高中語文必修4學(xué)案-第11課-廉頗藺相如列傳-第二課時(shí)
- 20202021學(xué)年高中數(shù)學(xué)北師大版選修2-1課件第二章5夾角的計(jì)算
- 《生姜病蟲害防治》課件
- 【中學(xué)課件】信息技術(shù)教材培訓(xùn)
- 2024年高效工業(yè)設(shè)備采購與銷售合同協(xié)議
- 2024版路燈安裝工程承包合同模板
- 手術(shù)十大安全質(zhì)量目標(biāo)培訓(xùn)記錄
- 產(chǎn)品方案技術(shù)白皮書模板(含系統(tǒng)架構(gòu)說明書)
- GB/T 10000-2023中國成年人人體尺寸
- 模具管理程序文件
- 女子水晶樂坊
- 漢語中的詞語詞性分類(課堂)課件
- 骨盆骨折PPT完整版
- 2023-2024學(xué)年廣西壯族自治區(qū)南寧市小學(xué)語文五年級(jí)期末高分試題附參考答案和詳細(xì)解析
- 事業(yè)單位登記管理講座課件
- DB44T 1315-2014物業(yè)服務(wù) 檔案管理規(guī)范
- 基本醫(yī)療保險(xiǎn)異地就醫(yī)登記備案申請(qǐng)表
評(píng)論
0/150
提交評(píng)論