<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ò ) 收藏

DMA結構:

struct saa7146_video_dma {

u32 base_odd;

u32 base_even;

u32 prot_addr;

u32 pitch;

u32 base_page;

u32 num_line_byte;

};

工作流程

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

下面通過(guò)典型的read一楨圖像來(lái)分析具體的工作流程:

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

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

4.2.3 測試[6]

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

vid = open(device, O_RDONLY);/*打開(kāi)設備*/

err = ioctl(vid, VIDIOC_QUERYCAP, cap); /*查詢(xún)設備支持的功能*/

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

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

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

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

5 結論

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

參考文獻

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驅動(dòng)程序的開(kāi)發(fā)原理及應用,微計算機信息,2005年第5期

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>