色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

電子發燒友App

硬聲App

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示
電子發燒友網>電子資料下載>嵌入式開發>Linux下USB攝像頭驅動程序開發解析

Linux下USB攝像頭驅動程序開發解析

2017-11-07 | rar | 0.3 MB | 次下載 | 1積分

資料介紹

一、 Linux系統中的USB攝像頭驅動程序
  USB攝像頭以其良好的性能和低廉的價格得到廣泛應用。同時因其靈活、方便的特性,易于集成到嵌入式系統中。但是如果使用現有的符合Video for Linux標準的驅動程序配合通用應用程序,難以充分利用USB帶寬,幀速不高,不易滿足實時監控等要求。本文首先介紹在Linux系統下USB攝像頭驅動編制的一般方法,然后說明在此基礎上如何提高幀速。
  USB設備驅動程序完全符合通用設備驅動的準則,不同的是內核提供了一些特別的API函數,方便驅動注冊、銷毀自己,例如usb_reSister()和usb_dereSister();2.4版的內核還提供了對于hotplug的支持。
  1.1 USB攝像頭驅動的一般編寫方法
  攝像頭屬于視頻類設備。在目前的Linux核心中,視頻部分的標準是Video for Linux(簡稱V4L)。這個標準其實定義了一套接口,內核、驅動、應用程序以這個接口為標準進行交流。目前的V4L涵蓋了視、音頻流捕捉及處理等內容,USB攝像頭也屬于它支持的范疇。
  因此,USB攝像頭的驅動應當與內核提供的視頻驅動掛鉤。即首先在驅動中聲明一個video_device結構,并為其指定文件操作函數指針數組.fops,向系統注冊。在應用程序發出文件操作的相關命令時,核心根據這些指針調用相應函數,并將該結構作為參數傳遞給它們。這樣,就完成了驅動和核心之間的通信。例如:
  static struct video_device vdev_template={……};
  //聲明video_device,指出掛接驅動
  static struct file_operations ov511_fops={……};
  //聲明本驅動的文件操作函數指針
  struct video_device*vdev=video_devdata(file);
  //從文件指針中提取出video_device結構
  在video_device結構中,有一個私有指針priv,可以將它指向一塊保留內存。在這塊內存中,保存著本驅動、本設備的相關初始化信息。這塊內存的申請、初始化、指針指向等工作都是在USB驅動的枚舉函數.probe中完成。這樣,在枚舉函數將控制權返還給系統后,因為內核不銷毀保留內存,所以驅動仍然保留著自己的信息。這點與Windows系統中WDM驅動有異曲同工之處。當然,在驅動卸載函數中,應當將申請的各塊內存全部釋放。
  1.2 使用雙URB輪流通信
  眾所周知,USBl.1總線標準定義了控制、中斷、批量、等時等四種管道。對于時間性極強但是準確度要求不高的視頻捕捉應用來說,攝像頭應當使用等時傳輸方式。為了盡可能快地得到圖像數據,應當在URB中指定USB_ISO_ASAP標志。
  urb-》transfer_flags=USB_ISO_ASAP;//盡可能快地發出本URB
  Linux系統中任何USB傳輸都通過URB實現。為提高速度,可以考慮擴大URB的緩沖,這樣可以降低每個USB事務中握手信息所占比例,提高有效數據的傳輸速度。但是受限于總線帶寬和具體的USB設備芯片,單純擴大URB的緩沖不能無限制地解決問題。具體分析一下USB傳輸在操作系統中的實現:每次傳輸都要包括URB的建立、發出、回收、數據整理等階段,這些時間不產生有效數據。因此可以建立兩個URB,在等待一個URB被回收時,也就是圖像正在被傳感器采集時,處理、初始化另一個URB,并在回收后立刻將其發出。兩個URB交替使用,大大減少了額外時間。工作流程如圖1所示。
  Linux下USB攝像頭驅動程序開發解析
  這個過程是在URB的完成例程中實現的,有兩點需要注意:首先處理再次初始化的代碼時間不能長,否則會造成完成例程的重人,如果確實來不及,可以在完成例程中設定標志,例如“數據采集好”旗語,由應用程序使用阻塞ioctl()來查詢該旗語并做處理;其次由于CPU可能會在完成例程中停留較長時間,系統負擔較大,可以在.open函數中初始化兩個URB并將其發出,有限度地減輕系統負擔。
  1.3 使用雙幀緩沖提高效率
  Linux系統中,文件操作通常是由read、write等系統調用來完成。這些系統調用在驅動中的解決方法就是用copy_to_user()、copy_from_user()等函數在核態、戶態內存空間中互相拷貝。但是對于大批量的圖像數據,采用拷貝的方法顯然會增加時間開銷,因此用內存映射的方法解決。首先使用vmalloc()申請足夠大的核態內存,將其作為圖像數據緩沖空間,兩個URB帶回的圖像數據在這里暫存;然后使用remap_page_range()函數將其逐頁映射到用戶空間中。戶態的圖像處理程序使用mmap()函數,直接讀寫核態圖像緩沖內存,大大減少額外開銷。
  圖像數據的處理可能要花費比較長的時間,不同的算法對于數據保留時間的要求也不一樣。因此可以申請兩幀圖像緩沖,在處理一幀圖像的同時,將兩個URB帶回的數據全部填充到另一幀緩沖中,這樣可以免去時間沖突上的麻煩。
  值得注意的是:這種方法要求時刻持有當前幀的序號、每一幀的起始地址等信息,不能將兩幀圖像混淆。這些信息可以保存在保留內存中,當前幀的數據整理、序號改變在URB完成例程中實現。
  二、 V4L標準的改進
  V4L標準目前已經發展到第二版V4L2,其基本思路與V4L相同。
  2.1 標準分析
  根據V4L標準,戶態程序在需要一幀圖像時,CPU的走向如圖2。CPU按照123456的順序完成一個循環。在這里,有一個細節被忽略:在完成例程中,也就是圖2中步驟6,該URB被立刻發出,但是由于這時用戶程序正在阻塞等待,沒辦法再次提出獲得圖像的申請,因此在判斷有無新請求時,判斷的結果必然是當前無請求,導致下一個URB帶回的數據被驅動丟棄;由于核態、戶態的切換需要一定的時間,加上戶態多進程同步等開銷,等到應用程序能夠再次發出獲得一副圖像的申請時,已經有不止一個URB帶回的數據被丟棄掉,這些URB包含的數據正好是新一幀圖像的開始部分。因此驅動必須等到再下一幀圖像才能保存數據、緩沖。這樣憑白損失了一幀圖像,幀速最少下降一半。
下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1TC358743XBG評估板參考手冊
  2. 1.36 MB  |  330次下載  |  免費
  3. 2開關電源基礎知識
  4. 5.73 MB  |  6次下載  |  免費
  5. 3100W短波放大電路圖
  6. 0.05 MB  |  4次下載  |  3 積分
  7. 4嵌入式linux-聊天程序設計
  8. 0.60 MB  |  3次下載  |  免費
  9. 5基于FPGA的光纖通信系統的設計與實現
  10. 0.61 MB  |  2次下載  |  免費
  11. 6基于FPGA的C8051F單片機開發板設計
  12. 0.70 MB  |  2次下載  |  免費
  13. 751單片機窗簾控制器仿真程序
  14. 1.93 MB  |  2次下載  |  免費
  15. 8基于51單片機的RGB調色燈程序仿真
  16. 0.86 MB  |  2次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應用800例(新編版)
  4. 0.00 MB  |  33564次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關電源設計實例指南
  8. 未知  |  21548次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數字電路基礎pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅動電路設計》 溫德爾著
  16. 0.00 MB  |  6653次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉中文版)
  4. 78.1 MB  |  537796次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420026次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191185次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183278次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費
主站蜘蛛池模板: 四虎国产精品永久免费入口| 嫩草影院成人| videosgrati欧美另类| 伊人无码高清| 亚洲精品无码成人AAA片| 婷婷六月激情综合一区| 日产久久视频| 日本aaaa| 日韩人妻双飞无码精品久久 | 午夜在线播放免费人成无| 日本漫画之无彩翼漫画| 欧美手机在线播放| 啪啪羞羞GIF男女0OXX动态图| 奶水四溅54p| 欧美日韩中文字幕综合图区| 欧美亚洲日韩一道免费观看| 欧美特级特黄a大片免费| 漂亮的保姆3中文版完整版| 情欲.美女高潮| 日本熟妇乱妇熟色在线电影| 日本视频中文字幕一区二区| 日日夜夜国产| 同时和两老师双飞| 亚洲AV无码专区国产乱码网站| 亚洲AV久久无码精品国产网站| 亚洲国产精品高清在线| 亚洲中文有码字幕日本| 又亲又揉摸下面视频免费看| 最近中文字幕MV免费看| AV福利无码亚洲网站麻豆| 成人午夜精品无码区久久漫画日本| 高清国语自产拍在线| 国产强奷伦奷片| 好紧好湿太硬了我太爽了文字| 久久精品观看影院2828| 免费人妻AV无码专区五月| 青娱乐国产精品视频| 色淫阁色九九| 亚洲日本乱码中文论理在线电影| 中文字幕不卡一区二区三区 | 国产亚洲精品久久久久久白晶晶|