<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

          基于Linux操作系統(tǒng)的視頻采集卡驅(qū)動(dòng)程序設(shè)計(jì)

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

          DMA結(jié)構(gòu):

          struct saa7146_video_dma {

          u32 base_odd;

          u32 base_even;

          u32 prot_addr;

          u32 pitch;

          u32 base_page;

          u32 num_line_byte;

          };

          工作流程

          _extension調(diào)用_register_device()函數(shù)注冊(cè)設(shè)備,V4l2_register_device()函數(shù)進(jìn)而調(diào)用_init_done()函數(shù)(v4l2_device結(jié)構(gòu)中的int(*initialize)()字段已被初始化為該函數(shù))通過寫 I/O地址空間具體的初始化設(shè)備,設(shè)置采集圖像的默認(rèn)參數(shù)等。這時(shí)候設(shè)備已經(jīng)做好了采集圖像的準(zhǔn)備工作。

          下面通過典型的read一楨圖像來分析具體的工作流程:

          應(yīng)用程序首先調(diào)用系統(tǒng)調(diào)用open()來打開設(shè)備,v4l2將該調(diào)用映射為初始化設(shè)備時(shí)已經(jīng)設(shè)置好的v4l2_device結(jié)構(gòu)中的 int(*open)(),在本文中即為v4l2_open();打開設(shè)備成功read一楨圖像數(shù)據(jù)的命令,此時(shí)系統(tǒng)通過v4l2_device結(jié)構(gòu)中已經(jīng)設(shè)置好的int(*open)()字段調(diào)用相應(yīng)的函數(shù)v4l2_read(),該調(diào)用負(fù)責(zé)分配內(nèi)核內(nèi)存緩沖區(qū),并將采集到的數(shù)據(jù)從內(nèi)核空間復(fù)制到用戶空間,這樣應(yīng)用程序就獲得了一楨數(shù)據(jù);

          當(dāng)v4l2_capability結(jié)構(gòu)中的V4L2_CAP_STREAMING標(biāo)志被設(shè)置時(shí),這表明設(shè)備支持流采集。V4L2 的流維護(hù)兩個(gè)組織成FIFO的緩沖區(qū)隊(duì)列:發(fā)送隊(duì)列和接收隊(duì)列。由于應(yīng)用程序受到網(wǎng)絡(luò)延遲,進(jìn)程搶占或隨機(jī)磁盤存儲(chǔ)的影響,維護(hù)兩個(gè)隊(duì)列就可以把異步的或輸出操作與應(yīng)用程序分離開,從而降低丟失數(shù)據(jù)的可能性。設(shè)備采集到圖像后可以用DMA 方式直接將數(shù)據(jù)放入應(yīng)用程序分配好的緩沖區(qū)中,這就大大提升了整個(gè)系統(tǒng)的性能。

          4.2.3 測(cè)試[6]

          首先編譯上述模塊,然后通過命令insmod鏈接進(jìn)內(nèi)核。用于測(cè)試的簡(jiǎn)單應(yīng)用程序主體部分如下所示:

          vid = open(device, O_RDONLY);/*打開設(shè)備*/

          err = ioctl(vid, VIDIOC_QUERYCAP, cap); /*查詢?cè)O(shè)備支持的功能*/

          err = ioctl(vid, VIDIOC_G_FMT, fmt);/*設(shè)置采集圖像的格式*/

          data = malloc(fmt.fmt.pix.sizeimage);/*分配用戶空間緩沖區(qū)*/

          n = read(vid, data, fmt.fmt.pix.sizeimage);/*獲取一楨數(shù)據(jù)*/

          該應(yīng)用程序運(yùn)行后經(jīng)檢查得到了預(yù)期的結(jié)果,并且在基于該的CDMA無線視頻傳輸系統(tǒng)中滿足了應(yīng)用的需要,獲得了理想的效果。

          5 結(jié)論

          本文作者創(chuàng)新點(diǎn):詳細(xì)闡述了環(huán)境下利用V4L2API開發(fā)設(shè)備驅(qū)動(dòng)程序的流程,并將該驅(qū)動(dòng)程序?qū)嶋H的應(yīng)用到我們自己研發(fā)的CDMA無線視頻傳輸系統(tǒng)中,獲得了滿意的實(shí)時(shí)效果,在此也希望對(duì)從事同類開發(fā)的人員有所裨益。

          參考文獻(xiàn)

          1 Alessandro Rubini Jonathan Corbet, device driver,2nd Edition,O’Reilly,2001.7

          2 Philip SAA7146A datasheet,1998.4

          3 Philip SAA7111A datasheet,1998.5

          4 http://linux.bytesex.org/v4l2/

          5 PCI SIG,PCI Local Bus Specification Revision 2.2,1998.12

          6 王多智,嵌入式linux下sram驅(qū)動(dòng)程序的開發(fā)原理及應(yīng)用,微計(jì)算機(jī)信息,2005年第5期

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

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



          上一頁 1 2 3 下一頁

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();