在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

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

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

            作者: 時間:2012-05-21 來源:網(wǎng)絡 收藏

            1 引言

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

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

            2 采集芯片簡介[2][3]

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

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

            3 V4L規(guī)范[4]

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

            3.1 V4L

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

            3.2 V4L2

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

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

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

            Struct v4l2_device結構中的主要域說明如下:

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

            Int type:V4L2設備類型;

            Int minor:設備得次設備號;

            Int(*open)():當打開新的文件描述符時調(diào)用;

            Int(*close)():當關閉文件描述符時調(diào)用;

            Int(*read)():調(diào)用read();

            Int(*write)():調(diào)用write();

            Int(*ioctl)():調(diào)用ioctl();

            Int(*mmap)():調(diào)用mmap();

            Int(*poll)():調(diào)用select();

            Int(*initialize)():當設備注冊時調(diào)用;

            Int busy:設備的打開計數(shù),由videodev維護;

            設備通過函數(shù)v4l2_unregister_device()取消注冊;V4L2允許設備多次打開,上面的v4l2_device結構中的成員函數(shù)都具有一個id參數(shù),該參數(shù)可以把設備的多次打開區(qū)分開來。

            4 采集卡驅動程序的基本結構及實現(xiàn)

            4.1 驅動程序基本結構

            整個驅動程序分為三層:

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

            linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

            linux相關文章:linux教程



            上一頁 1 2 3 下一頁

            評論


            相關推薦

            技術專區(qū)

            關閉