基于嵌入式Linux的視頻采集系統(tǒng)---UVC驅(qū)動(dòng)模型介紹
UVC?即?usb?video?class。USB協(xié)議中,除了通用的軟硬件電氣接口規(guī)范等,還包含了各種各樣的Class協(xié)議,用來為不同的功能定義各自的標(biāo)準(zhǔn)接口和具體的總線上的數(shù)據(jù)交互格式和內(nèi)容。這些Class協(xié)議的數(shù)量非常多,最常見的比如支持U盤功能的Mass?Storage?Class,以及通用的數(shù)據(jù)交換協(xié)議:CDC?class。此外還包括Video、Audio?Class,?Print?Class等等。正是由于這些Class協(xié)議,大大促進(jìn)了USB設(shè)備的普及,比如說各個(gè)廠商生產(chǎn)的U盤都能通過操作系統(tǒng)自帶的驅(qū)動(dòng)程序來使用。Video?Class顧名思義是作為USB接口的視頻設(shè)備的一個(gè)統(tǒng)一的數(shù)據(jù)交換規(guī)范。最初版本是在2003年9月才添加到USB?Class規(guī)范中的,1.1的版本更是在2005年才發(fā)布。雖然UVC?提出的較晚,基于UVC?的設(shè)備投入市場(chǎng)也較晚,但是無疑UVC?將是大勢(shì)所趨,支持UVC?的USB視頻設(shè)備將會(huì)越來越多,迅速普及。
?
UVC設(shè)備拓?fù)浣Y(jié)構(gòu)圖如圖所示:
在拓?fù)浣Y(jié)構(gòu)上Video?Class?將視頻設(shè)備抽象為幾個(gè)主要的硬件功能模塊:
輸入端點(diǎn)?Input?Terminal
輸出端點(diǎn)?Output?Terminal
camera端點(diǎn)?Camera?Terminal
選擇單元?Selector?Unit
處理單元?Processing?Unit
拓展單元?Extension?Unit
從sensor和另一個(gè)復(fù)合視頻設(shè)備得到的數(shù)據(jù)流由IT?和?CT輸入,經(jīng)SU選擇送PU處理,再由OT綁定到指定的USB端點(diǎn)。最后由USB端點(diǎn)與主機(jī)交互將數(shù)據(jù)發(fā)送到host端。在實(shí)際設(shè)備中,可能沒有其中的某些功能模塊,也可能其中的幾個(gè)模塊都是由同一硬件來完成的。
從Linux2.6?以后,Linux系統(tǒng)都包含了針對(duì)UVC的實(shí)現(xiàn)。本課題選用的USB攝像頭符合UVC標(biāo)準(zhǔn),所以只要在嵌入式Linux操作系統(tǒng)上移植UVC的驅(qū)動(dòng)就可以支持此攝像頭。
由于本課題選用的Linux2.6.30.4版本內(nèi)核已經(jīng)包含了UVC驅(qū)動(dòng),只要在編譯內(nèi)核時(shí)將此項(xiàng)選中并編譯到內(nèi)核中,嵌入式Linux就能支持此USB攝像頭的視頻采集了。當(dāng)USB攝像頭連到S3C2440上,Linux會(huì)建立設(shè)備文件/dev/video0?,則說明UVC驅(qū)動(dòng)已經(jīng)正常的工作了。