91精品国产综合久久福利软件_国产伊人久_精品毛片_亚洲一区二区中文字幕_中文字幕在线观看_日日操狠狠操

學術咨詢

讓期刊論文更省時、省事、省心

基于Linux平臺高清攝像頭USB驅動的研究

時間: 分類:推薦論文 次數:

本文通過在嵌入式系統中對USB攝像頭驅動的改進,并對基于Relay技術的高清攝像頭設備驅動作了分析和說明,有效提升攝像頭整體性能。

  基于Linux平臺高清攝像頭USB驅動的研究

  胡雄暉

  摘要:本文通過在嵌入式系統中對USB攝像頭驅動的改進,并對基于Relay技術的高清攝像頭設備驅動作了分析和說明,有效提升攝像頭整體性能。

  關鍵詞:Linux;USB驅動;Relay

  1 Linux內核USB驅動框架

  每一類設備都提供了通用接口,以便在需要時為內核提供服務。這種通用接口使得內核可以以相同的方式來對待不同的設備及驅動程序[1]。在應用程序看來,硬件設備只是一個設備文件,應用程序可以像操作普通文件一樣對硬件設備進行操作。

  Linux內核提供了完整的USB驅動程序框架。USB總線采用樹形結構,在一條總線上只能有唯一的主機設備。Linux內核從主機和設備兩個角度觀察USB總線結構。在linux系統中,USB主機驅動程序由3部分組成:USB主機控制器驅動(HCD)、USB核心驅動(USBD)和不同種類的USB設備驅動。

  2 USB驅動程序主要數據結構

  1) 主機控制器用于管理主機硬件與USB設備的數據傳輸【2】。在Linux系統下定義了如下用于開放主機控制器的數據結構。

  Struct usb_operation sohci_device_operations={

  sohci_alloc_dev,

  sohci_free_dev,

  sohci_get_current_frame_number,

  sohci_submit_urb,

  sohci_unlink_urb

  };

  其中:

  sohci_alloc_dev用來分配USB設備資源。

  sohci_free_dev用來收回USB設備資源。

  sohci_get_current_frame_number用來獲得當前幀號。

  sohci_submit_urb用來提交URB請求快。

  sohci_unlink_urb用來撤銷URB請求塊。

  2) Linux系統中,USBD通過定義一組宏、數據結構和函數來抽象出所有硬件或者設備具有依賴關系的部分。USBD中主要有四個數據結構,分別是:

   usb_device保存一個USB設備的信息。

   usb_bus保存一個USB總線系統的信息。

   usb_driver保存客戶驅動信息,包括驅動名稱,以及驅動提供給USB內核使用的函數指針等。

   urb是進行USB通信的數據結構,USBD通過URB在USB設備類驅動和USBD、USBD和HCD間進行數據傳輸。

  3) USB攝像頭驅動程序需要做的第一件事情就是在USB子系統里注冊,包括該驅動程序支持哪些設備,當被支持的設備從總線插入或拔出時,會有哪些動作等,所有這些信息通過usb_driver的形式傳送到USBD中,具體實現如下:

  static struct usb_driver cam_driver={

  .name="cam_video",

  .probe=cam_probe,

  .disconnect:cam_disconnect,

  .id_table:cam_ids,

  };

  cam_video是客戶端驅動程序的字符串名稱;cam_probe則指向USB驅動程序的探測函數指針;cam_ids列表包含了一系列該驅動程序可以支持的所有不同類型的USB設備,如沒有設置該列表,則該驅動程序中的探測回調函數不會被調用[3]。

  3 基于relay的Linux系統USB視頻驅動

  3.1 relay技術基本原理

  Relay是一種從Linux內核到用戶空間的高效數據傳輸技術。通過用戶定義的relay通道,內核空間的程序能夠高效、可靠、便捷地將數據傳輸到用戶空間。Relay特別適用于內核空間有大量數據需要傳輸到用戶空間的情形,它提供一種機制使得內核空間的程序能夠通過用戶定義的relay通道將大量數據高效的傳輸到用戶空間。

  一個relay通道由一組和CPU一一對應的內核緩沖區組成。這些緩沖區又被稱為relay緩沖區,其中的每一個在用戶空間都用一個常規文件來表示,這被叫做relay文件。Relay并不關心數據的格式和內容,這些完全依賴于使用relay的用戶程序。Relay的目的是提供一個足夠簡單的接口,從而使得基本操作盡可能的高效[4]。

  Relay將數據的讀和寫分離,使得突發性大量數據寫入的時候,不需要受限于用戶空間相對較慢的讀取速度,從而大大提高了效率。Relay作為寫入和讀取的橋梁,也就是將內核用戶寫入的數據緩存并轉發給用戶空間的程序。Relay提供了兩大類主要API包括面向用戶空間和面向內核空間,面向用戶空間的API:

   open()允許用戶打開一個已經存在的通道緩沖區。

   mmap()使通道緩沖區被映射到位于用戶空間的調用者的地址空間。

   read()讀取通道緩沖區的內容。

   endfile()將數據從通道緩沖區傳輸到一個輸出文件描述符。

   poll()支持 POLLIN/POLLRDNORM/POLLERR信號。

   close()將通道緩沖區的引用數減1。

  面向內核空間的API為:

   relay_open()創建一個relay通道,包括創建每個CPU對應的relay緩沖區。

   relay_close()關閉一個relay通道,包括釋放所有的relay緩沖區,在此之前會調用relay_switch()來處理這些relay緩沖區以保證已讀取但是未滿的數據不會丟失。

   relay_write()將數據寫入到當前CPU對應的relay緩沖區內。

   relay_reserve()在relay通道中保留一塊連續的區域來留給未來的寫入操作。

  3.2 Relay技術可靠性分析

  整個攝像頭圖像采集系統由前端高清視頻采集和后臺處理過程組成。前端高清視頻采集的可靠性主要由攝像頭設備中的圖像處理器性能決定的,目前市場絕大多數高清攝像頭都可以滿足系統要求。我們通過創建數據緩存多通道和增加緩存大小的方法來提高系統的可靠性,從而減少丟幀現象,從一定程度上提成了高清攝像頭的工作的可靠性。

  4 總結

  本文在ARM體系結構平臺下對USB攝像頭設備驅動的基本原理進行了說明,并介紹了一種新型的驅動改進方法,通過提高內核空間和用戶空間的數據傳輸速度,從而提高整個攝像頭設備的數據采集速度,使得改進方案可行高效。

  參考文獻

  【1】 馮偉,王博編著【M】.北京:中國電力出版社,2008.

  【2】 商斌.Linux設備驅動開發入門與編程實踐【M】.北京:電子工業出版社,2009.

  【3】 暢衛功.嵌入式Linux中USB攝像頭驅動的研究【J】.嵌入式軟件應用,2008.

  【4】 季春志,褚偉.Linux平臺下高分辨率攝像頭設備USB驅動的研究與改進【J】.合肥工業大學學報,2009.

中文核心期刊推薦

SCI核心期刊推薦

主站蜘蛛池模板: 久久精品毛片 | 中文字幕三级 | 加勒比一区二区 | 欧美综合一区二区 | 欧美日韩激情视频 | 国产成人精品视频 | 欧美高清一区二区 | av资源站 | 亚洲成人精品在线观看 | 久久精品毛片 | 日本福利视频 | 日韩精品三区 | 久久精品观看 | 黄色福利视频 | 日韩美女在线观看 | 国产区免费 | 欧美黄色片 | 精品国产欧美一区二区三区成人 | 免费观看一区二区三区 | www.日韩av| 精品乱子伦一区二区三区 | 亚洲精品1 | 国产日韩一区二区 | 国产九九热 | 成人免费毛片嘿嘿连载视频 | 一区二区三区四区在线 | 深夜福利视频在线观看 | 国产精品成人av | 精品成人av| 91精品国产综合久久久久久 | 成人免费毛片片v | 成人激情在线 | 黄色成人av | 国产在线一 | 九九热免费视频 | 日韩精品一区在线 | 亚洲一区二区欧美 | 日日日日干 | 青青草视频免费在线观看 | 中文字幕欧美在线 | 亚洲天堂免费 |