999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Linux平臺的OV2715驅(qū)動研究與實現(xiàn)

2016-12-26 15:46:56李校林孫文華李銀
現(xiàn)代電子技術(shù) 2016年22期

李校林+孫文華+李銀

摘 要: 為了實現(xiàn)嵌入式Linux對CMOS圖像傳感器OV2715的支持,對OV2715的工作原理進(jìn)行深入的研究,針對OV2715功能復(fù)雜和驅(qū)動編寫困難的問題,提出一種模塊化設(shè)計OV2715驅(qū)動的方法。在DM3730硬件平臺下,將OV2715驅(qū)動分為I2C設(shè)備驅(qū)動和V4L2接口驅(qū)動并分別進(jìn)行了實現(xiàn),最后,設(shè)計視頻采集程序并對驅(qū)動進(jìn)行了測試。測試結(jié)果表明,輸出視頻圖像質(zhì)量清晰穩(wěn)定,該實現(xiàn)在高清數(shù)字監(jiān)控系統(tǒng)中有較好的應(yīng)用前景。

關(guān)鍵詞: OV2715驅(qū)動; V4L2; I2C總線; 嵌入式Linux; 高清數(shù)字視頻監(jiān)控

中圖分類號: TN957.52?34; TP316 文獻(xiàn)標(biāo)識碼: A 文章編號: 1004?373X(2016)22?0071?0

0 引 言

隨著人們安全意識的提高,視頻監(jiān)控系統(tǒng)在眾多行業(yè)中得到了大范圍的普及。高清數(shù)字視頻監(jiān)控系統(tǒng)更以其儲存信息量大、系統(tǒng)功能完善、控制靈活和智能化等顯著優(yōu)點,在安防領(lǐng)域得到越來越多的應(yīng)用[1]。高清數(shù)字視頻監(jiān)控系統(tǒng)主要由前端采集設(shè)備、視頻傳輸系統(tǒng)和主控顯示存儲系統(tǒng)組成,而前端攝像機(jī)采集芯片類型的選擇直接影響著監(jiān)控端輸出數(shù)字視頻信號的好壞,從而決定著視頻監(jiān)控系統(tǒng)的整體效果。

OV2715是TI公司針對高清視頻監(jiān)控領(lǐng)域推出的全高清1080P的CMOS圖像傳感器芯片,具有成本小、低功耗和輸出圖像質(zhì)量高等特點,選取該芯片作為前端采集芯片。由于Linux 2.6.32內(nèi)核版本沒有提供該芯片驅(qū)動,需要手動編寫該驅(qū)動實現(xiàn)對OV2715的支持。同時,以往的視頻設(shè)備驅(qū)動往往存在結(jié)構(gòu)層次不明晰等缺點,針對OV2715功能復(fù)雜和驅(qū)動開發(fā)難度大等特點,提出了模塊化的思想編寫該驅(qū)動。首先,深入研究了OV2715的工作原理,對Linux系統(tǒng)中的I2C驅(qū)動體系和V4L2驅(qū)動體系進(jìn)行了全面的介紹;其次,針對特定的硬件平臺,基于模塊化方法對OV2715驅(qū)動程序進(jìn)行了設(shè)計并給出了關(guān)鍵代碼實現(xiàn)。最后,設(shè)計了視頻采集程序?qū)︱?qū)動進(jìn)行了測試和分析,實現(xiàn)了視頻采集和顯示功能。

1 OV2715芯片

1.1 OV2715功能介紹

OV2715是一款1/2.7 英寸的低電壓、高性能和能提供輸出1080P高清分辨率的CMOS圖像傳感器,支持通過DVP和MIPI接口輸出RAW/RGB格式的圖像,還提供了SCCB接口來控制傳感器的運行[2]。此外,OV2715集成了自動聚焦濾波器,PLL電路和1.5 V穩(wěn)壓器,可以保證其運行的穩(wěn)定;OV2715的自動圖形控制電路使其支持AEC,AGC,AWB,ABLC和LENC等功能,因而輸出圖像質(zhì)量較其他傳感器有明顯的提高;OV2715圖像傳感器主要應(yīng)用于高清數(shù)字視頻監(jiān)控攝像機(jī)的前端采集模塊中。

1.2 OV2715寄存器介紹

OV2715內(nèi)部寄存器主要包括三部分:用來控制輸入輸出的寄存器、用來實現(xiàn)具體圖像功能的寄存器和用來輔助傳感器正常工作的寄存器。視頻監(jiān)控系統(tǒng)中,處理器模塊對OV2715寄存器的訪問通常有兩種方式,其一為并行訪問模式,通過OV2715的DVP接口進(jìn)行訪問;其二為串行訪問方式,經(jīng)過系統(tǒng)提供的I2C接口來控制OV2715芯片。I2C總線是一種串行總線,主要由數(shù)據(jù)線和時鐘線組成,其用途是完成微控制器模塊和外圍模塊間通信的工作。OV2715通過I2C訪問時硬件資源占用率小并且訪問速度較快,故本次驅(qū)動實現(xiàn)中處理器和OV2715通信采用I2C總線方式。

1.3 OV2715工作過程

OV2715視頻數(shù)據(jù)采集主要經(jīng)過圖像數(shù)據(jù)產(chǎn)生、圖像數(shù)據(jù)處理和圖像數(shù)據(jù)輸出三個過程,采集工作過程如圖1所示。

圖像數(shù)據(jù)產(chǎn)生階段,OV2715傳感器內(nèi)核根據(jù)引腳HREF,VSYNC和PCLK信號以固定的幀速率產(chǎn)生像素流數(shù)據(jù)。其中,定時產(chǎn)生器可以同步圖片陣列的行數(shù)據(jù),每個陣列中的像素經(jīng)過模擬電路抽樣、增益控制和ADC轉(zhuǎn)換后產(chǎn)生10 b的數(shù)據(jù);圖像數(shù)據(jù)處理階段,需要對采集到的數(shù)字信號進(jìn)行圖像增強(qiáng)、鏡頭控制和視頻格式的設(shè)置等功能,主要配置的寄存器如表1所示;圖像輸出階段,主要對圖像數(shù)據(jù)進(jìn)行編碼,然后進(jìn)行通道選擇,輸出符合要求的YUV/RGB數(shù)字信號。

2 硬件平臺結(jié)構(gòu)

無人機(jī)基站勘測系統(tǒng)中,前端采集系統(tǒng)硬件結(jié)構(gòu)如圖2所示。

嵌入式硬件系統(tǒng)處理模塊采用TMS320DM3730片上系統(tǒng),操作系統(tǒng)內(nèi)核版本采用Linux 2.6.32。DM3730為TI公司的OMAP系列雙核架構(gòu)處理器,ARM端負(fù)責(zé)運行操作系統(tǒng)控制系統(tǒng)的工作流程和DSP負(fù)責(zé)處理大量高清視頻數(shù)據(jù),并且該處理器內(nèi)部具有3D Image?Processor和IVA等,支持高清 720P,1080P視頻解碼。該處理器實時處理視頻速度可達(dá)60 f/s,具有優(yōu)秀的編解碼能力,最高能達(dá)到每秒500萬像素,具有VPSS和支持包括3A在內(nèi)的眾多功能[3]。

OV2715圖像傳感器通過I2C總線接入DM3730平臺的ISP模塊中;WiFi模塊負(fù)責(zé)發(fā)送視頻數(shù)據(jù)和基本通信功能,SD卡模塊負(fù)責(zé)視頻數(shù)據(jù)的存儲和系統(tǒng)升級存儲功能,電源管理模塊為給系統(tǒng)提供可靠、穩(wěn)定的電源輸入,調(diào)試模塊主要負(fù)責(zé)控制系統(tǒng)更新升級等。

3 OV2715驅(qū)動程序?qū)崿F(xiàn)

高清數(shù)字視頻監(jiān)控系統(tǒng)中,視頻采集的過程:OV2715將模擬電路產(chǎn)生的圖像信號經(jīng)過A/D控制器轉(zhuǎn)換成8 b的數(shù)字信號,其次通過V4L2驅(qū)動支持的MIPI接口進(jìn)行視頻捕捉,此后DM3730平臺DSP模塊進(jìn)行H.264編碼,最后將視頻數(shù)據(jù)通過網(wǎng)絡(luò)發(fā)送或者進(jìn)行本地存儲。在此過程中,OV2715驅(qū)動程序負(fù)責(zé)初始化OV2715相關(guān)寄存器,同時接收用戶空間的命令完成對傳感器工作狀態(tài)的操控,將視頻信號傳送到V4L2視頻驅(qū)動接口;OV2715驅(qū)動結(jié)構(gòu)如圖3所示。

OV2715驅(qū)動被加載到內(nèi)核后,向系統(tǒng)注冊成功后會生成對應(yīng)的設(shè)備節(jié)點;用戶空間應(yīng)用程序通過操作該節(jié)點使用V4L2驅(qū)動實現(xiàn)的API完成視頻采集的工作。在此過程中基于模塊化方法,OV2715驅(qū)動分為I2C設(shè)備驅(qū)動和V4L2設(shè)備接口層驅(qū)動兩部分,進(jìn)行分別設(shè)計和實現(xiàn)。

3.1 OV2715的I2C設(shè)備驅(qū)動

DM3730平臺通過I2C總線向OV2715發(fā)送控制命令,完成相關(guān)寄存器的配置。Linux系統(tǒng)平臺下,I2C驅(qū)動體系由I2C總線驅(qū)動、I2C核心以及I2C設(shè)備驅(qū)動3個部分組成。I2C核心集成了與具體設(shè)備無關(guān)的統(tǒng)一的設(shè)備注冊和注銷的方法,用于管理I2C總線驅(qū)動和I2C設(shè)備驅(qū)動;I2C總線驅(qū)動提供硬件系統(tǒng)中I2C Adaper和Slave設(shè)備通信的功能。I2C設(shè)備驅(qū)動主要進(jìn)行總線上的具體設(shè)備驅(qū)動的實現(xiàn),主要完成設(shè)備的具體操控方法和初始化探測功能[4]。

在OV2715 的I2C驅(qū)動模塊設(shè)計中,內(nèi)核版本Linux 2.6.32對I2C核心和I2C總線驅(qū)動已經(jīng)進(jìn)行了實現(xiàn),只需對具體的I2C設(shè)備驅(qū)動進(jìn)行實現(xiàn)。OV2715的I2C設(shè)備驅(qū)動完成的主要任務(wù)是讀寫OV2715芯片的相關(guān)寄存器,傳送并接收控制命令,完成對硬件的初始化控制。在此驅(qū)動模塊實現(xiàn)中,不僅要實現(xiàn)I2C核心相關(guān)接口,還要實現(xiàn)應(yīng)用程序?qū)咏涌凇?/p>

3.1.1 I2C核心接口實現(xiàn)

該模塊實現(xiàn)的數(shù)據(jù)結(jié)構(gòu)包括struct i2c_driver和struct i2c_client兩個結(jié)構(gòu)體;其中i2c_driver對應(yīng)于OV2715設(shè)備的具體驅(qū)動方法,實現(xiàn)代碼如下:

ov2715_probe負(fù)責(zé)將OV2715傳感器以I2C客戶端設(shè)備的身份注冊到系統(tǒng),同時調(diào)用V4L2體系相關(guān)接口建立設(shè)備節(jié)點,最終完成對設(shè)備的初始化工作;ov2715_remove注銷相關(guān)設(shè)備節(jié)點將設(shè)備移除,完成清空緩沖區(qū)和系統(tǒng)資源回收的任務(wù);ov2715_id結(jié)構(gòu)中儲存了設(shè)備ID相關(guān)信息,OV2715上電啟動后會根據(jù)此信息進(jìn)行匹配驅(qū)動;ov2715_probe( )函數(shù)具體實現(xiàn)如下:

結(jié)構(gòu)體i2c_client用于描述具體的物理設(shè)備,總線上的I2C設(shè)備均要用一個各自的i2c_client來描述;i2c_client信息通過開發(fā)板的板級支持包i2c_board_info結(jié)構(gòu)體填充描述。

ov2715_i2c_driver結(jié)構(gòu)內(nèi)的函數(shù)實現(xiàn)完成后,利用i2c_add_driver( )函數(shù)將接口層驅(qū)動添加到設(shè)備驅(qū)動鏈表;其中,注冊函數(shù)采用i2c_register_driver( )函數(shù);I2C設(shè)備驅(qū)動被成功注冊進(jìn)入內(nèi)核后,驅(qū)動程序可以通過I2C接口對OV2715傳感器進(jìn)行操控,此過程需實現(xiàn)的函數(shù)如下:

OV2715寄存器讀函數(shù):static int ov2715_read_reg(struct i2c_client *client, unsigned short data_length, unsigned short reg,unsigned int *val);

OV2715寄存器寫函數(shù):static int ov2715_write_reg(struct i2c_client *client, unsigned int addr, unsigned int val);

3.1.2 應(yīng)用程序用戶層接口

上層應(yīng)用程序通過相關(guān)的文件接口訪問底層硬件,OV2715應(yīng)用程序用戶層接口模塊主要實現(xiàn)此功能。需要實現(xiàn)的文件接口如表2所示。表2中主要文件操作采用struct file_operations結(jié)構(gòu)體描述。內(nèi)核版本Linux 2.6.32封裝了該接口并提供了struct v4l2_file_operations結(jié)構(gòu)體,該結(jié)構(gòu)體提供了標(biāo)準(zhǔn)的成員接口等,因此,將主要實現(xiàn)具體需要的函數(shù)和標(biāo)準(zhǔn)接口相連即可。具體實現(xiàn)代碼如下:

3.2 OV2715的V4L2視頻接口驅(qū)動

V4L2框架為Linux系統(tǒng)視頻設(shè)備底層驅(qū)動規(guī)定了一致的接口,使用戶層程序無須關(guān)心底層驅(qū)動細(xì)節(jié)使用統(tǒng)一的API操作具體的物理設(shè)備,主要用于操控視頻設(shè)備和視頻采集處理,給相關(guān)開發(fā)人員的操作和維護(hù)帶來了極大方便[5?6]。

表2 常用文件操作接口

V4L2體系結(jié)構(gòu)支持多種設(shè)備,向底層驅(qū)動提供了視頻采集接口、視頻輸出接口和直接視頻傳輸接口等。本文將采用V4L2框架中的Video Capture Interface并在OV2715傳感器的MIPI接口獲取采集數(shù)據(jù)。在V4L2視頻接口驅(qū)動中,Video核心層調(diào)用v4l2_int_device_register( )函數(shù)將OV2715以V4L2從設(shè)備向系統(tǒng)進(jìn)行注冊,最終在dev目錄下創(chuàng)建Video0設(shè)備節(jié)點,向用戶層提供訪問接口;Video核心模塊底層為視頻設(shè)備的具體實現(xiàn),可以有多個slave設(shè)備,V4L2視頻接口驅(qū)動框架如圖4所示。

V4L2接口驅(qū)動調(diào)用流程:用戶層調(diào)用標(biāo)準(zhǔn)的V4L2的接口時,經(jīng)過Video核心層處理后傳遞到slave設(shè)備實現(xiàn)的具體操作函數(shù)中。其中,v4l2_int_ioctl_desc中包含針對具體設(shè)備實現(xiàn)的ioctl函數(shù),主要用于視頻采集過程中設(shè)置視頻格式和對采集進(jìn)行操作功能。主要代碼實現(xiàn)如下:

//供應(yīng)用層調(diào)用的v4l2 ioctl命令

4.1 OV2715采集測試程序

OV2715采集測試程序基于V4L2接口設(shè)計,直接調(diào)用以上章節(jié)實現(xiàn)的接口采用順序執(zhí)行的方式,將OV2715前端采集到的數(shù)據(jù)傳輸?shù)紻M3730的ISP模塊進(jìn)行處理,主要通過ioctl()命令來獲取并配置視頻采集參數(shù),如申請緩沖區(qū)、設(shè)置視頻采集參數(shù)等。循環(huán)采集圖像時,read和write由于直接將大量數(shù)據(jù)從內(nèi)核空間復(fù)制到用戶空間,耗內(nèi)存并且效率低下[7],本文采用內(nèi)存映射的方式,直接申請緩沖區(qū)并對其操作,效率有很大提高,不會出現(xiàn)卡機(jī)現(xiàn)象。OV2715視頻采集程序流程圖如圖5所示。

4.2 OV2715驅(qū)動測試結(jié)果

為了測試的靈活性,本文采用動態(tài)加載模塊的方式;將編譯好的OV2715驅(qū)動模塊ov2715.ko拷貝到DM3730開發(fā)板中,使用insmod命令將驅(qū)動加載到內(nèi)核:程序執(zhí)行過程中打印出芯片PID、寄存器設(shè)置和時鐘頻率信息均與真實值一致,最終注冊成功后在dev目錄下創(chuàng)建Video0設(shè)備文件節(jié)點。調(diào)試信息如圖6所示。

無人機(jī)基站勘測攝像機(jī)實物圖如圖7所示。

測試程序調(diào)用本文實現(xiàn)的V4L2的相關(guān)API接口進(jìn)行采集,采用mmap的方式,每次采集200幀圖像,捕捉到的視頻為YUV格式,使用YUV Player軟件播放所采集到的視頻文件。OV2715驅(qū)動方案經(jīng)過實際測試,采集到的視頻輸出效果如圖8所示。

5 結(jié) 語

本文采用模塊化的方法基于DM3730平臺對OV2715驅(qū)動進(jìn)行了實現(xiàn),同時,對Linux下I2C設(shè)備驅(qū)動體系和V4L2驅(qū)動體系進(jìn)行詳細(xì)的闡述,提出兩者實現(xiàn)的一般方法;該驅(qū)動結(jié)構(gòu)層次清晰,對Linux系統(tǒng)中其他視頻采集芯片驅(qū)動編寫具有很強(qiáng)的參考價值;集成OV2715作為采集前端的無人機(jī)基站勘測系統(tǒng)在基站勘察領(lǐng)域中具有廣闊的市場前景。

參考文獻(xiàn)

[1] 于海彬,張雪,陳興林.基于Linux的TW2835的驅(qū)動程序設(shè)計與實現(xiàn)[J].計算機(jī)工程與設(shè)計,2013(9):3068?3073.

[2] Omni Vision Technologies, Inc. OV2715 product specification, version 2.03 [S]. [S.l.]: Omni Vision Technologies, Inc, 2011.

[3] Texas Instruments. AM/DM37x multimedia device technical reference manual 1.0 [S]. USA: Texas Instruments, 2012.

[4] CORBET Jonathan,KROAH?HARTMAN Greg,RUBINI Alessandro.Linux設(shè)備驅(qū)動程序[M].北京:中國電力出版社,2006.

[5] 劉升,趙晶晶,范秀麗.基于V4L2的嵌入式視頻監(jiān)控系統(tǒng)[J].網(wǎng)絡(luò)新媒體技術(shù),2011,32(1):37?42.

[6] 郝俊,孟傳良.基于V4L2的ARM11 USB視頻采集終端的設(shè)計與實現(xiàn)[J].貴州大學(xué)學(xué)報(自然科學(xué)版),2011(4):74?78.

[7] 張輝,李新華,劉波,等.基于V4L2視頻采集緩存機(jī)制應(yīng)用與實現(xiàn)[J].現(xiàn)代電子技術(shù),2010,33(20):54?56.

主站蜘蛛池模板: 亚洲有码在线播放| 麻豆精选在线| 亚洲V日韩V无码一区二区| 最新国产在线| 91久久偷偷做嫩草影院电| 国产精选自拍| 日韩午夜伦| 亚洲经典在线中文字幕| 国产视频一二三区| 本亚洲精品网站| 视频一本大道香蕉久在线播放 | 美女一级免费毛片| 亚洲欧美激情小说另类| 美女内射视频WWW网站午夜| 免费人成视频在线观看网站| 8090午夜无码专区| 国产成人a在线观看视频| AV天堂资源福利在线观看| 欧美自慰一级看片免费| 日韩AV手机在线观看蜜芽| 亚洲男女在线| 在线观看国产黄色| 91久久国产成人免费观看| 久草国产在线观看| 97国产在线播放| 99视频免费观看| 国产尤物jk自慰制服喷水| 色噜噜狠狠狠综合曰曰曰| 日本欧美一二三区色视频| 日本亚洲成高清一区二区三区| 亚洲黄色高清| 国产精品性| 久久一色本道亚洲| 日韩在线播放中文字幕| 中国美女**毛片录像在线| 中文无码日韩精品| 亚洲av无码人妻| 亚洲色无码专线精品观看| 少妇被粗大的猛烈进出免费视频| 国产无码精品在线播放| 亚洲国产综合第一精品小说| 国产情精品嫩草影院88av| 2020国产免费久久精品99| 免费国产在线精品一区| 无码福利日韩神码福利片| 欧美中文字幕一区| 午夜限制老子影院888| 久久这里只有精品23| 亚洲欧美一区二区三区图片| 国产亚洲精品无码专| 亚洲视频在线观看免费视频| 欧美午夜久久| 美美女高清毛片视频免费观看| 欧美一区二区啪啪| 国产成人高清亚洲一区久久| 在线观看国产小视频| 久久这里只有精品国产99| 超碰精品无码一区二区| 谁有在线观看日韩亚洲最新视频| 亚洲男人的天堂视频| 三级国产在线观看| 亚洲va欧美va国产综合下载| 91精品国产综合久久不国产大片| 在线观看av永久| a级毛片免费网站| 久久久久亚洲av成人网人人软件| 亚洲精选无码久久久| 四虎亚洲精品| 园内精品自拍视频在线播放| 亚洲国产成人无码AV在线影院L| 91人人妻人人做人人爽男同| 久久青草免费91观看| 91成人在线观看视频| 伊人激情综合网| 色欲国产一区二区日韩欧美| av无码久久精品| 国内精品视频| 992tv国产人成在线观看| 亚洲经典在线中文字幕| 欧美视频在线不卡| 国产第二十一页| 久久亚洲日本不卡一区二区|