Linux環(huán)境下的USB攝像頭驅(qū)動(dòng)開(kāi)發(fā)
摘要:嵌入式環(huán)境下的USB攝像頭驅(qū)動(dòng)需要充分利用USB總線與內(nèi)核中的USB核心密切配合并且保證數(shù)據(jù)流的高速與穩(wěn)定。本文從Linux內(nèi)核的USB核心模塊出發(fā),遵循Video4Linux接口標(biāo)準(zhǔn),采用urb策略與內(nèi)存映射的方式以提高數(shù)據(jù)讀取速度,設(shè)計(jì)開(kāi)發(fā)了基于Linux環(huán)境下的USB攝像頭驅(qū)動(dòng),并在ARM9實(shí)驗(yàn)平臺(tái)上對(duì)該驅(qū)動(dòng)程序進(jìn)行了測(cè)試與分析。
本文引用地址:http://2s4d.com/article/130629.htmlinux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
引言
嵌入式圖像處理的應(yīng)用范圍隨著嵌入式技術(shù)的不斷發(fā)展而不斷擴(kuò)大,攝像頭作為數(shù)字圖像采集的基礎(chǔ),驅(qū)動(dòng)程序的開(kāi)發(fā)顯得尤為重要。作為操作系統(tǒng)內(nèi)核與硬件設(shè)備之間的接口,驅(qū)動(dòng)程序是否優(yōu)良,直接影響著硬件設(shè)備能否正常、高效運(yùn)轉(zhuǎn)。帶有USB(通用串行總線)接口的攝像頭因其具有支持熱插拔、接口通用性好、實(shí)時(shí)性強(qiáng)、較高的傳輸速率、低成本、易于擴(kuò)展等優(yōu)點(diǎn)而備受青睞。但是嵌入式系統(tǒng)中支持USB攝像頭的驅(qū)動(dòng)程序很少,因此,研究和開(kāi)發(fā)嵌入式環(huán)境下的USB攝像頭驅(qū)動(dòng)程序具有應(yīng)用價(jià)值和現(xiàn)實(shí)意義。
USB攝像頭驅(qū)動(dòng)程序構(gòu)架
設(shè)備驅(qū)動(dòng)程序是計(jì)算機(jī)軟、硬件之間存在的悖論的產(chǎn)物:軟件和硬件不應(yīng)該互相滲透到對(duì)方的領(lǐng)域。因此,設(shè)備驅(qū)動(dòng)程序是介于操作系統(tǒng)與硬件之間,將硬件設(shè)備的具體工作細(xì)節(jié)對(duì)操作系統(tǒng)內(nèi)核完全屏蔽的接口。用戶的操作通過(guò)標(biāo)準(zhǔn)化的調(diào)用執(zhí)行,經(jīng)設(shè)備驅(qū)動(dòng)程序映射到實(shí)際的硬件設(shè)備上。
由于在不同的環(huán)境下通常需要不同的方式來(lái)操作硬件,所以在編寫訪問(wèn)硬件的設(shè)備驅(qū)動(dòng)程序時(shí),不能給用戶強(qiáng)加任何特定的策略(策略,既是如何使用這些功能[1])。驅(qū)動(dòng)程序應(yīng)該處理如何使硬件工作的問(wèn)題,而將怎樣使用硬件的問(wèn)題留給上層應(yīng)用程序,即驅(qū)動(dòng)程序的作用在于提供機(jī)制(機(jī)制,既是需要提供什么功能[1])。
USB子系統(tǒng)分析
一個(gè)USB子系統(tǒng)是由幾個(gè)點(diǎn)對(duì)點(diǎn)的連接方式構(gòu)建而成的樹(shù)狀結(jié)構(gòu),在該系統(tǒng)中USB只是擔(dān)當(dāng)設(shè)備和主控制器之間通信通道的角色,對(duì)它所發(fā)送或者接受的數(shù)據(jù)沒(méi)有任何特殊的內(nèi)容和結(jié)構(gòu)上的要求。
Linux內(nèi)核支持兩種主要類型的USB驅(qū)動(dòng)程序:宿主系統(tǒng)上的驅(qū)動(dòng)程序和設(shè)備上的驅(qū)動(dòng)程序[2]。宿主系統(tǒng)上的USB驅(qū)動(dòng)程序控制插入其中的USB設(shè)備,而設(shè)備上的驅(qū)動(dòng)程序則控制該設(shè)備如何與主機(jī)通信。
Linux內(nèi)核提供了USB核心模塊,該模塊將不同類型的USB主控制器完全屏蔽,而為上層的USB設(shè)備驅(qū)動(dòng)程序提供了用于訪問(wèn)和控制USB設(shè)備的接口(如圖1)。因此USB核心模塊將USB主控制器和USB設(shè)備驅(qū)動(dòng)程序隔開(kāi),也同時(shí)將USB驅(qū)動(dòng)程序的編寫與具體的硬件隔開(kāi)。
驅(qū)動(dòng)模塊構(gòu)架
每個(gè)硬件設(shè)備在操作系統(tǒng)內(nèi)核中都對(duì)應(yīng)一個(gè)驅(qū)動(dòng)模塊。USB攝像頭設(shè)備在內(nèi)核中表現(xiàn)為一個(gè)字符設(shè)備,并且屬于視頻類的硬件設(shè)備。Linux內(nèi)核為視頻類設(shè)備提供了內(nèi)核接口Video4Linux,該內(nèi)核接口使得Linux環(huán)境下的上層應(yīng)用程序可以像訪問(wèn)普通文件一樣對(duì)其進(jìn)行讀寫操作。因此該驅(qū)動(dòng)模塊提供的機(jī)制應(yīng)該符合Video4Linux接口:
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)linux相關(guān)文章:linux教程
攝像頭相關(guān)文章:攝像頭原理
評(píng)論