基于Linux的USB從設備驅動研究-基礎電子_第1頁
基于Linux的USB從設備驅動研究-基礎電子_第2頁
基于Linux的USB從設備驅動研究-基礎電子_第3頁
基于Linux的USB從設備驅動研究-基礎電子_第4頁
基于Linux的USB從設備驅動研究-基礎電子_第5頁
已閱讀5頁,還剩1頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

精品文檔-下載后可編輯基于Linux的USB從設備驅動研究-基礎電子0引言

USB是英文UniversalSerialBus的縮寫,意為通用串行總線。USB是一種快速、雙向、同步、低成本、動態可連接的串行接口。USB現在已經廣泛應用到各種設備上,尤其是手持設備,幾乎都采用了USB接口?,F在,USB即可用來與其他設備連接后高速地傳遞數據,又可用來充電,使手持設備可以發揮U盤、MODEM、無線網卡等作用。

事實上,USB只是主機和外圍設備之間的連接。如何來促使這種連接發揮作用,就需要驅動程序。驅動程序主要解決硬件“需要提供什么功能”以及“如何使用這些功能”。在linux系統中,USB設備可以作為主機使用,也可作為從設備使用。對應的USB驅動程序有兩種主要的類型:宿主系統上的驅動程序和設備上的驅動程序。從宿主的觀點來看(例如普通的左桌面計算機),宿主系統的USB驅動程序控制插入其中的USB設備,而USB設備的驅動程序則控制該設備如何作為一個USB設備和主機通信。

1USB設備基礎

USB設備的構成包括配置接口和端點,以及USB驅動程序如何綁定到USB接口上。端點是USB通信基本的形式,USB端點只能是往一個方向傳送數據,即從主機到設備(稱為輸出端點)或者從設備到主機(稱為輸入端點),故可以看作是單向管道。USB有四種不同的類型,分別對應不同的傳輸類型:控制、中斷、批量、等時。其次接口,USB端點被綁定即為接口。USB的一個接口只處理一種USB邏輯連接;一個USB設備可以有多個接口,不同的接口可以代表不同的功能,因此,功能不同的USB接口需要不同的驅動程序。另外就是配置,USB接口本身被綁定為配置。一個USB設備可以有多個配置,而且可以在配置之間切換以改變設備的狀態;一個時刻只能激活一個配置,怛一個配置通常具有一個或者更多的接口。

USB設備可由許多不同的邏輯單元組成,實際上,也就是這三種邏輯單元組合而成的。Linux內核中的USB代碼一般要用URB(usbrequstblock)與USB設備通信。URB用structurb結構體描述,它能以一種異步的方式往/從特定的USB端點發送/接收數據。USB設備驅動程序可能會為單個端點分配許多的URB,也可能對許多不同的端點重用單個URB,這取決于驅動的需要。當USB驅動程序只發送或接收一些簡單的USB數據時,可以使用兩個很簡單的接口函數:usb_bulk_msg、usb_control_msg。

2USB設備驅動程序的結構

圖1所示是Linux環境下USB驅動的總體結構。從圖l中可以看到:在主機側層次結構中,實現USB驅動有兩類方式:USB主機控制器驅動和USB設備驅動;USB主機控制驅動主要控制插入其中的USB設備,主機控制器可以分為三類,分別對應于三種USB主控制器;USB設備驅動則用于控制USB設備如何與主機通信;USB負責USB驅動管理和協議處理的主要工作。

USB向上可為設備驅動提供編程接口,向下可為USB主機控制器驅動提供編程接口;它可以通過全局變量維護整個系統的USB設備信息,從而完成設備的熱插拔控制和總線數據傳輸控制等驅動。

另外,在從設備側,Linux內核中的USB設備側驅動程序可分為3個層次:USB設備控制器(UDC)驅動程序、GadgetAPI和Gadget驅動程序;UDC驅動程序可直接訪問硬件,控制USB設備和主機間的底層通信,并向上層提供和硬件相關的操作回調函數。不同的設備控制器硬件有不同的設備控制器驅動程序;Gadget驅動主要控制USB設備功能的實現,它使用GadgetAPI傳遞控制信息給UDC驅動程序,以便實現具體功能。

GadgetAPI是設備控制器的控制功能抽象接口,Gadget驅動程序可以試用GadgetAPI,它可以把下層的UDC驅動程序和上層Gadget驅動程序相隔離,以使得在linux系統中編寫USB設備側驅動程序時,能夠把功能的實現和底層通信相分離。

如果要在S3c24.10上實現大存儲類從設備,則需要運行file_storage.c和s3c2410_udc.c這兩個驅動程序。file_stoarge.c具體控制USB設備功能的實現,它使用GadgetAPI來控制s3c2410.c以實現其功能。s3c2410.c驅動程序可直接訪問硬件,以控制USB設備和主機間的底層通信,同時向上層提供和硬件相關操作的回調函數。

3USB從設備驅動

驅動程序完成的功能包括初始化設備、為各類設備提供服務、負責內核與設備間的數據交換、以及檢測和處理設備工作過程中出現的錯誤等。

基于完成這些功能,每個驅動程序都需要注冊和注銷,這樣,內核才能知道有這個驅動的存在或者驅動的卸載。下面是兩個基本的模塊:

module_init(usb_skel_init);

module_exit(usb_skel_exit);

對于USB從設備而言,結構USB_gadget就可以代表。Gadget通過“Gadget驅動程序”來實現設備功能,處理所有的USB配置和接口。通過操作函數集,Gadget驅動程序與硬件特定代碼間接通信。它將Gadget驅動程序與那個硬件細節隔開,并通過I/O隊列包裝硬件端點。“usb_gadget”“usb_ep”接口則可提供對硬件的隔離。

其結構usb_gadget的代碼如下:

結構usb_gadget_ops是USB設備控制期的設備控制函數集,其操作包括get_frames、wakeup、pullop、ioctl等。結構structusb_ep是USB端點從設備側的代表,總線控制器驅動程序中列出了在gadget-ep_list里所有的通用端點,但控制端點不在列表中,它僅在回應驅動程序的setup0回調函數時才被訪問,其代碼如下:

4結束語

本文主要通過在S3C2401上實現USB從設備的驅動程序,介紹了USB從設備驅動的研究方法。Linux作為一個開源操作系統,設備驅動程序的開發有著其它操作系統不可比擬的優勢,大量的開放源代碼無

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論