<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于Linux操作系統的視頻采集卡驅動(dòng)程序設計

基于Linux操作系統的視頻采集卡驅動(dòng)程序設計

作者: 時(shí)間:2012-05-21 來(lái)源:網(wǎng)絡(luò ) 收藏

1 引言

操作系統以其本身強大的性能、卓越的穩定性和開(kāi)放源代碼的優(yōu)點(diǎn)正在得到越來(lái)越廣泛的應用。設備在linux內核中扮演著(zhù)特殊的角色,它們是一個(gè)個(gè)獨立的“黑盒子”,使得特定的硬件響應一個(gè)定義良好的內部編程接口,這些接口完全隱藏了設備的工作細節。用戶(hù)的操作通過(guò)一組標準化的調用執行,而這些調用獨立于特定的。將這些調用映射到作用于實(shí)際硬件的設備特有操作上,則是的任務(wù)[1]。

本文撰寫(xiě)的背景是源于我們自己開(kāi)發(fā)的CDMA無(wú)線(xiàn)視頻傳輸系統,該傳輸系統的模塊使用Philip SAA7146+ SAA7111a,本文主要介紹linux環(huán)境下設備驅動(dòng)程序的編寫(xiě)。

2 采集芯片簡(jiǎn)介[2][3]

開(kāi)發(fā)驅動(dòng)程序的第一步就是詳細了解硬件設備的規格,這樣才能具體操縱硬件,實(shí)現硬件特定的操作,因此首先介紹一下Philip SAA7146及7111A芯片。

Philip SAA7146是PCI總線(xiàn)控制設備,它負責初始化并處理PCI總線(xiàn)上的數據傳輸,在這個(gè)意義上說(shuō)它是主設備;而7111a是從設備,它只是所謂的視頻解碼器,負責將模擬視頻信號解碼為數字比特流。對于后者,只需要通過(guò)I2C總線(xiàn)進(jìn)行編程,而不必直接控制該設備。它并不具有總線(xiàn)控制能力,因此不能在PCI 總線(xiàn)上找到它。因此7111a并不需要專(zhuān)門(mén)的驅動(dòng)程序,它是通過(guò)主控芯片(SAA7146)經(jīng)由I2C總線(xiàn)來(lái)驅動(dòng)的,我們只需要編寫(xiě)主控芯片的驅動(dòng)程序即可。

3 V4L規范[4]

V4L與V4L2是下開(kāi)發(fā)設備驅動(dòng)程序的一套規范,這套規范使用分層的方法給驅動(dòng)程序的開(kāi)發(fā)提供了清晰的模型和一致的接口。應用程序處于最上層,V4L或V4L2處于中間層,而實(shí)際的硬件設備處于下層。

3.1 V4L

V4L是Video for 的簡(jiǎn)寫(xiě),它是Alan Cox為了給Linux下視頻采集設備驅動(dòng)程序的編寫(xiě)提供統一的接口而提出的一套規范(API),它將所有的視頻采集設備的驅動(dòng)程序都納入它的管理之中,給驅動(dòng)程序編寫(xiě)者帶來(lái)極大的方便。

3.2 V4L2

鑒于V4L的種種不足,Bill Dirks重新設計了一套API和數據結構,并把它稱(chēng)作Video for Linux Two(V4L2)。與V4L相比,它的擴展性和靈活性都得到了極大的提高,并且支持的硬件設備也更多。但是也由于它對V4L做了徹底的改造,使得它與 V4L并不兼容。

V4L2是一個(gè)兩層驅動(dòng)結構:上層是videodev模塊,當videodev初始化后,它把自己注冊一個(gè)主設備號為81的字符設備,同時(shí)注冊自己的字符驅動(dòng)成員函數;下層是V4L2驅動(dòng)程序,它實(shí)際上是videodev的客戶(hù)端,videodev通過(guò)V4L2驅動(dòng)程序的成員函數來(lái)調用V4L2驅動(dòng)程序。當V4L2驅動(dòng)程序初始化后,它把一個(gè)包含V4L2 驅動(dòng)程序成員函數,次設備號以及其他相關(guān)信息的結構傳遞給videodev,從而把它要處理的設備注冊到videodev。當應用程序觸發(fā)了一個(gè)驅動(dòng)程序調用時(shí),控制權首先傳遞給videodev中的函數,videodev負責將應用程序傳遞的文件或i節點(diǎn)結構指針轉化為相應V4L2結構的指針,并調用 V4L2驅動(dòng)中的處理函數。

當V4L2驅動(dòng)程序初始化時(shí)候,它首先會(huì )枚舉它將處理的系統中的設備,然后為每個(gè)設備填充struct _device結構,并把指向該結構的指針傳遞給_register _device ()函數,該函數調用_device結構中的初始化函數對設備進(jìn)行初始化。

Struct v4l2_device結構中的主要域說(shuō)明如下:

Char name[32]:設備的名字,該名字會(huì )出現在/proc/Videodev文件中;

Int type:V4L2設備類(lèi)型;

Int minor:設備得次設備號;

Int(*open)():當打開(kāi)新的文件描述符時(shí)調用;

Int(*close)():當關(guān)閉文件描述符時(shí)調用;

Int(*read)():調用read();

Int(*write)():調用write();

Int(*ioctl)():調用ioctl();

Int(*mmap)():調用mmap();

Int(*poll)():調用select();

Int(*initialize)():當設備注冊時(shí)調用;

Int busy:設備的打開(kāi)計數,由videodev維護;

設備通過(guò)函數v4l2_unregister_device()取消注冊;V4L2允許設備多次打開(kāi),上面的v4l2_device結構中的成員函數都具有一個(gè)id參數,該參數可以把設備的多次打開(kāi)區分開(kāi)來(lái)。

4 采集卡驅動(dòng)程序的基本結構及實(shí)現

4.1 驅動(dòng)程序基本結構

整個(gè)驅動(dòng)程序分為三層:

模塊Saa7146_v4l2直接操作硬件設備,它主要提供基于SAA7146芯片的采集設備的核心功能,也可將其稱(chēng)作核心驅動(dòng)程序;同時(shí)驅動(dòng)程序還提供了擴展機制,用于擴充核心驅動(dòng)程序的功能,這樣做的好處就是可以在extension模塊當中實(shí)現自己想要的附加功能,而不用修改核心部分。顯然,該擴展模塊也對硬件設備具有完全的控制權。

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

linux相關(guān)文章:linux教程



上一頁(yè) 1 2 3 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>