国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

嵌入式圖像檢測系統(tǒng)的設(shè)計與應(yīng)用

2012-04-20 09:31:32楊勇劉永俊
常熟理工學院學報 2012年4期
關(guān)鍵詞:驅(qū)動程序內(nèi)核嵌入式

楊勇,劉永俊

(常熟理工學院計算機科學與工程學院,江蘇常熟 215500)

嵌入式圖像檢測系統(tǒng)的設(shè)計與應(yīng)用

楊勇,劉永俊

(常熟理工學院計算機科學與工程學院,江蘇常熟 215500)

基于Linux2.6內(nèi)核下的最新標準Video For Linux 2(簡稱V4L2),介紹攝像頭的驅(qū)動程序快速開發(fā)方法.傳統(tǒng)的驅(qū)動開發(fā)很少能實現(xiàn)所有的接口功能,這嚴重影響到系統(tǒng)開發(fā)周期與維護工作,而且OmniVision公司的ov9650攝像頭在Linux下尚未得到驅(qū)動支持.本文選擇S3C2440開發(fā)板作為硬件平臺,在Linux2.6.30.4系統(tǒng)下基于OV9650傳感器芯片實現(xiàn)攝像頭驅(qū)動模塊的層次結(jié)構(gòu)以及視頻采集模塊設(shè)計的開發(fā)工作,提出基于V4L2接口規(guī)范的驅(qū)動開發(fā)方案,從而實現(xiàn)低成本、低功耗、高效率的圖像檢測系統(tǒng)的應(yīng)用.

V4L 2;驅(qū)動;ov 9650;Linux-2.6.30.4

嵌入式系統(tǒng)是一種完全嵌入到受控器件內(nèi)部,為特定應(yīng)用而設(shè)計的專用計算機系統(tǒng).它的應(yīng)用領(lǐng)域涵蓋了消費電子、智能家居、醫(yī)療設(shè)備、航空航天等[1].隨著物聯(lián)網(wǎng)的不斷發(fā)展,嵌入式產(chǎn)品層出不窮,例如基于嵌入式的圖像視頻監(jiān)控系統(tǒng)的需求在不斷增加,而數(shù)字化視頻系統(tǒng)能夠充分利用嵌入式系統(tǒng)的特點對采集的圖像進行預處理、分析、存儲以及顯示.因此,充分利用linux2.6內(nèi)核系統(tǒng)的特點,基于ARM920T平臺的視頻處理系統(tǒng)應(yīng)運而生.

本文以三星公司生產(chǎn)的S3C2440芯片構(gòu)建基于V4L2規(guī)范實現(xiàn)的圖像采集系統(tǒng),詳細介紹V4L2標準提供的接口函數(shù),以及視頻采集程序模塊的設(shè)計與實現(xiàn)[2-3].由于傳統(tǒng)的驅(qū)動程序的開發(fā)很少提供完整API接口函數(shù),導致開發(fā)周期長的缺陷.本文提出基于V4L2規(guī)范的驅(qū)動程序開發(fā)[4],在保證圖像采集質(zhì)量的前提下,能夠縮短開發(fā)周期,提高開發(fā)效率[5].

1 硬件體系架構(gòu)介紹

1.1 S3 C2440 A處理器概述

三星公司的ARM920T處理器為嵌入式的產(chǎn)品提供了豐富的片上集成系統(tǒng).比如:16/32位RISC體系結(jié)構(gòu),16位壓縮指令集Thumb與32位ARM指令集;增強的ARM體系結(jié)構(gòu)MMU;同時支持高速總線模式和異步總線模式.外部接口主要有SDRAM控制器、LED控制器、4通道DMA、3通道UART、IIC總線等[6].本文采用ARM920T的camera功能模塊,如圖1.

1.2 OV9650傳感器芯片

由于CMOS芯片與CDD芯片相比具有低功耗、低成本、速度快、工藝簡單等優(yōu)點,因此本文選用了CMOS攝像頭模塊,型號OV9650.該芯片的像素陣列大小1280*1024,130萬像素,支持SXVGA、VGA、QVGA、CIF等圖像輸出格式.通過S3C2440的IIC總線和串行SCCB總線接口相連,其飽和度、平衡度、曝光時間等參數(shù)均可通過芯片內(nèi)部寄存器的讀寫來設(shè)置.

圖1 S3C2440的camera模塊框圖

2 Linux2.6操作系統(tǒng)下的攝像頭驅(qū)動開發(fā)與實現(xiàn)

圖2 硬件系統(tǒng)平臺框架圖

嵌入式系統(tǒng)上電啟動的過程依次是引導加載程序Bootloader、Linux內(nèi)核、根文件系統(tǒng)、應(yīng)用程序.本文在完成移植uboot、linux2.6內(nèi)核與Yaffs文件系統(tǒng)的基礎(chǔ)上,利用V4L2接口規(guī)范編程,設(shè)計并實現(xiàn)OV9650驅(qū)動編碼、視頻采集、預處理、壓縮、傳輸?shù)裙δ苣K,以及應(yīng)用程序的測試工作[7].

2.1 V4 L2 接口規(guī)范

Video For Linux(V4L)提供了各種視頻圖像采集設(shè)備的API和數(shù)據(jù)結(jié)構(gòu),比如TV tuners和usb網(wǎng)絡(luò)攝像機等.1999年,V4l接口函數(shù)得到了發(fā)展,成為V4L2,這解決了在V4L中的bugs,而且支持了更加廣泛的設(shè)備.

常用的設(shè)備結(jié)構(gòu)體在linux2.6內(nèi)核目錄include/linux/videodev2.h中定義:

2.2 Linux平臺下V4L2驅(qū)動的編碼

OV9650的CMOS傳感器在Linux2.6內(nèi)核中是作為混雜設(shè)備來描述,其驅(qū)動程序給應(yīng)用程序提供了一個流控制接口,讓用戶進程借助設(shè)備文件與硬件聯(lián)系,對設(shè)備文件的操作實質(zhì)上就是系統(tǒng)調(diào)用.所以,系統(tǒng)調(diào)用與驅(qū)動關(guān)聯(lián)起來就要通過file_operations{}這一結(jié)構(gòu)體來實現(xiàn)[8].系統(tǒng)工作流程如圖3所示.

在結(jié)構(gòu)體miscdevice中定義了file_operations*fops,該文件結(jié)構(gòu)體指針對應(yīng)的操作如下:

這些操作需要在驅(qū)動程序中具體實現(xiàn).

file_operations提供了基本的I/O操作接口open,read,write,close,ioctl等函數(shù),實現(xiàn)了對中斷的處理,內(nèi)存映射功能以及I/O通道的控制功能.在應(yīng)用程序發(fā)出文件操作的相關(guān)命令時,內(nèi)核根據(jù)這些指針調(diào)用相關(guān)函數(shù).這樣就完成了驅(qū)動和內(nèi)核之間的通信.

實際上,V4L2是一種兩層驅(qū)動系統(tǒng)模型,上層是videodev模塊.當初始化videodev模塊的時候,它被Linux內(nèi)核注冊為主設(shè)備號為81的字符設(shè)備,,同時還注冊了一些字符設(shè)備的功能函數(shù).而下層就是V4L2驅(qū)動程序,它相當于是videodev的客戶端,videodev通過V4L2提供的一套接口函數(shù)訪問這些驅(qū)動.每當初始化V4L2驅(qū)動的時候,它就會傳遞給videodev模塊的一個數(shù)據(jù)結(jié)構(gòu)或文件節(jié)點.準確地說,通過V4L2方法實現(xiàn)的驅(qū)動模型與普通字符設(shè)備的不同是前者包含了一些特有的元素.

每當應(yīng)用程序觸發(fā)一個驅(qū)動程序調(diào)用時,控制權(quán)會首先傳給videodev中的方法,它負責把應(yīng)用程序傳遞過來的結(jié)構(gòu)指針或文件節(jié)點轉(zhuǎn)換為對應(yīng)的V4L2的數(shù)據(jù)結(jié)構(gòu)指針,并調(diào)用V4L2驅(qū)動程序中的處理函數(shù).

在初始化V4L2驅(qū)動程序的時候,videodev將會枚舉它要處理的設(shè)備函數(shù),為每個設(shè)備填充一個struct v4l2_device結(jié)構(gòu),同時指向該結(jié)構(gòu)體的指針傳給v4l_register_device()函數(shù).它能夠保證次設(shè)備號可用,然后調(diào)用struct v4l2_device結(jié)構(gòu)中的相關(guān)函數(shù)實現(xiàn)設(shè)備的初始化工作.如果初始化成功,那么設(shè)備注冊成功.如果要卸載設(shè)備驅(qū)動,調(diào)用v4l_unregister_device()取消注冊.

2.3 視頻驅(qū)動模塊設(shè)計

本文驅(qū)動程序的設(shè)計是圍繞著file_operations{}這個數(shù)據(jù)結(jié)構(gòu)體展開,其主要功能是注冊相應(yīng)的各個函數(shù)的功能,實現(xiàn)對攝像頭設(shè)備打開、設(shè)置控制項、設(shè)備buf映像、采集像素格式初始化、采集圖像、關(guān)閉攝像頭等功能.

在初始化函數(shù)s3c2440_ov9650_init(void)中設(shè)置GPIO-J引腳為camera的對應(yīng)模式,通過函數(shù)re?quest_mem_region((unsigned long)S3C2440_PA_CAMIF,S3C2440_SZ_CAMIF,CARD_NAME)為camera申請I/O內(nèi)存資源,然后使用函數(shù)ioremap_nocache((unsigned long)S3C2440_PA_CAMIF,S3C2440_SZ_CAMIF)進行內(nèi)存映射.接著,初始化camera時鐘、設(shè)置ov9650寄存器等.下一步,使用misc_register(&misc)函數(shù)注冊到videodev層.

圖3 系統(tǒng)工作流程

此外,在驅(qū)動程序結(jié)構(gòu)中必須要包含的兩個模塊函數(shù)分別為:模塊加載函數(shù)和模塊卸載函數(shù).在安裝模塊時被系統(tǒng)自動調(diào)用的函數(shù),通過module_init宏來指定;而卸載模塊時被系統(tǒng)自動調(diào)用的函數(shù),通過module_exit宏來指定.

module_init是驅(qū)動程序的入口點,如果被用戶進程加載,它就會自動調(diào)用s3c24xx_ov9650_init函數(shù),其實現(xiàn)的工作包括:配置相關(guān)寄存器,初始化OV9650攝像頭.

當驅(qū)動被用戶進程卸載時,module_exit(s3c24xx_ov9650_exit)會自動調(diào)用s3c24xx_ov9650_exit函數(shù),其實現(xiàn)的工作包括:進程地址空間的釋放,中斷請求的關(guān)閉.

對于主機端設(shè)備驅(qū)動程序,接下來的工作就是把驅(qū)動程序嵌入到內(nèi)核,這里采用模塊的形式編寫,因為模塊方式可以動態(tài)加載到Linux內(nèi)核,而且利于程序調(diào)試.

2.4 基于V4L2的圖像采集模塊設(shè)計與實現(xiàn)

視頻采集是通過操作系統(tǒng)調(diào)用V4L2接口與設(shè)備驅(qū)動程序來實現(xiàn)的.V4L2接口是內(nèi)核里提供的一組支持影像設(shè)備的API函數(shù),配合視頻采集模塊驅(qū)動程序?qū)崿F(xiàn)圖像采集功能.在Linux中,可以把視頻設(shè)備當作普通的設(shè)備文件,采集圖像的程序就是通過調(diào)用V4L2接口規(guī)范中API函數(shù)對設(shè)備文件進行讀操作.整個采集流程圖如圖4所示.

主要用到的函數(shù)模型說明如下:

1)int open(devicename,mode):打開設(shè)備文件,采用非阻塞模式調(diào)用視頻設(shè)備,當沒有可用的視頻數(shù)據(jù)時不會阻塞而立即返回.

2)int ioctl(int__fd,unsigned long int__request,.../*args*/):在打開設(shè)備后,使用ioctl函數(shù)可以對設(shè)備的I/O通道進行管理,能夠設(shè)置該視頻設(shè)備的相關(guān)屬性以及采集方式,還能夠向驅(qū)動申請幀緩存獲取每個幀緩沖的信息后,映射到用戶空間.

3)void*mmap(void*start,size_t length,int prot,int flags,int fd,off_t offset);由于V4L2采集到的圖像數(shù)據(jù)是存放在內(nèi)核空間,而應(yīng)用程序無法訪問內(nèi)核空間中的數(shù)據(jù).我們利用mmap這個函數(shù)將內(nèi)核地址映射到用戶空間.這樣程序就可以對緩沖區(qū)的數(shù)據(jù)進行操作,從而提高了效率.

4)int close(fd):關(guān)閉圖像采集設(shè)備.最后還要使用munmap方法來釋放設(shè)備申請的內(nèi)存.

2.5 測試程序

圖4 圖像采集流程

本文中驅(qū)動程序的測試采用開源編碼庫—mjpg-streamer,在移植mjpg-streamer之前還需要移植SDL庫.mjpg-streamer使用的是V4L2接口,通過對源碼的相關(guān)修改以及移植來實現(xiàn)一個自己需要的視頻服務(wù)器,從而可以測試驅(qū)動程序開發(fā)與圖像采集模塊程序的編寫工作.

3 結(jié)論與展望

本文給出了在嵌入式系統(tǒng)中基于V4L2實現(xiàn)的驅(qū)動程序開發(fā)和圖像采集與傳輸設(shè)計方案.在Linux2.6內(nèi)核中,視頻設(shè)備也是文件,可以像訪問普通文件一樣對其進行讀寫,攝像頭設(shè)備在/dev/video0目錄下. Video for Linux 2是Linux中有關(guān)視頻驅(qū)動的內(nèi)核驅(qū)動,它為嵌入式驅(qū)動程序開發(fā)提供了統(tǒng)一規(guī)范,從而提高開發(fā)效率.基于S3C2440A硬件平臺,再加上適當?shù)耐鈬骷c應(yīng)用程序,可應(yīng)用于圖像傳輸、視頻監(jiān)控等領(lǐng)域.

[1]余輝.嵌入式Linux程序設(shè)計案例與實驗教程[M].北京:機械工業(yè)出版社,2009(4):191-195.

[2]S3C2440A User’s manual Revision1[Z].SUMSUNG,2004.Http://www.samsungsemi.com.

[3]OV9650_DS CameraChipTM Implementation Guide[Z].OmniVision Co.,2004(12).http://www.pdf-ic.com/datasheet_0V9650.html.

[4]曹占中,周余,王自強,等.基于s3c2440的Linux攝像頭驅(qū)動開發(fā)[J].電子測量技術(shù),2009,32(2):108-111.

[5]周曉光,潘延濤.基于S3C2440A的嵌入式視頻系統(tǒng)設(shè)計[J].電子測量技術(shù),2006,29(6):84-86.

[6]楊水清,張建,施云飛.ARM嵌入式Linux系統(tǒng)開發(fā)技術(shù)詳解[M].北京:電子工業(yè)出版社,2008:17-20.

[7]宋寶華.設(shè)備驅(qū)動開發(fā)詳解[M].第二版,北京:人民郵電出版社,2010:85-88.

[8]Jonathan Corbet,Alessandro Rubin,Greg Kroah-Hartman.Linux Device Drivers 3rd Edition[M].America:O'Reilly Media,2005: 108-112.

Design and Application of Embedded Image Detection System

YANG Yong,LIU Yong-jun
(School of Computer Science and Engineering,Changshu Institute of Technology,Changshu 215500,China)

Based on the latest standard Video for Linux 2(V4L2)in Linux kernel 2.6,this paper introduces the rap?id development method of driver programs.Traditional driver development is rarely able to realize all the interface functions,which seriously affects the system development cycle.The ov9650 camera driver of OmniVision Compa?ny has not been supported by Linux kernel.For this reason,under the condition of s3c2440 board hardware plat?form and Linux kernel 2.6.30.4,the authors of this paper achieve development work including camera driver mod?ule hierarchy and video capture module design,put forward the method of driver development based on V4L2 inter?face specification,and realize the application of low-cost,low-power,highly efficient image detection system.

V4L2;driver;ov9650;Linux-2.6.30.4

TP316.81

B

1008-2794(2012)04-0105-05

2012-03-01

江蘇省高校自然科學基金“基于投影分析理論與算法的圖像特征抽取及分類技術(shù)研究”(05KJB520152);常熟理工學院科研創(chuàng)新項目基金“基于arm的便攜式人臉識別系統(tǒng)”(KY2012116)

楊勇(1989—),男,江蘇宿遷人,常熟理工學院計算機科學與工程學院學生.

劉永?。?981—),男,山東青島人,講師,碩士,研究方向:人工智能與智能系統(tǒng),模式識別理論與應(yīng)用,人臉識別,E-mail:yongjun1981@126.com.

猜你喜歡
驅(qū)動程序內(nèi)核嵌入式
萬物皆可IP的時代,我們當夯實的IP內(nèi)核是什么?
強化『高新』內(nèi)核 打造農(nóng)業(yè)『硅谷』
基于嵌入式Linux內(nèi)核的自恢復設(shè)計
Linux內(nèi)核mmap保護機制研究
搭建基于Qt的嵌入式開發(fā)平臺
嵌入式軟PLC在電鍍生產(chǎn)流程控制系統(tǒng)中的應(yīng)用
Altera加入嵌入式視覺聯(lián)盟
倍福 CX8091嵌入式控制器
自動化博覽(2014年4期)2014-02-28 22:31:15
驅(qū)動程序更新與推薦
驅(qū)動程序更新與推薦
阳泉市| 赣榆县| 措勤县| 都江堰市| 郧西县| 勃利县| 莆田市| 乐东| 全南县| 安泽县| 桂东县| 特克斯县| 南江县| 台湾省| 洮南市| 从江县| 萨嘎县| 朝阳区| 芦溪县| 奉化市| 顺义区| 吴旗县| 龙州县| 清丰县| 泰宁县| 诸暨市| 陇西县| 柘荣县| 泰和县| 科技| 临清市| 靖边县| 卢湾区| 青神县| 新巴尔虎左旗| 南昌县| 什邡市| 社会| 平泉县| 苏尼特右旗| 黎川县|