国产肉体XXXX裸体137大胆,国产成人久久精品流白浆,国产乱子伦视频在线观看,无码中文字幕免费一区二区三区 国产成人手机在线-午夜国产精品无套-swag国产精品-国产毛片久久国产

新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > Linux2.6環(huán)境下USB設備的驅動實現(xiàn)

Linux2.6環(huán)境下USB設備的驅動實現(xiàn)

作者: 時間:2010-04-09 來源:網絡 收藏
0 引言

嵌入式linux系統(tǒng)以其易于移植裁減、內核小、效率高、完整、原代碼開放及性能優(yōu)異等特點,在嵌入式領域得到了非常廣泛的應用。Linux的端的源代碼中主要有 device的海量存儲、串口、網絡設備等設備程序及各種 device控制器芯片的程序。市場上USB設備控制器芯片種類繁多,大多數(shù)用戶需要針對特定應用來開發(fā)相關的USB設備控制器程序,才能使設備正常工作在linux操作系統(tǒng)下。

1 USB設備端驅動系統(tǒng)

Linux Gadget子系統(tǒng)主要分為三層:第一層為芯片驅動層,負責將各種USB device控制器抽象為統(tǒng)一的函數(shù)接口,以供上層驅動程序調用;第二層主要是對操作函數(shù)的簡單封裝;第三層為設備驅動層,可根據(jù)系統(tǒng)的需求所對應的功能。圖1所示是Linux Gadget子系統(tǒng)的驅動層次。Linux Gadget子系統(tǒng)的設備驅動層主要根據(jù)各個類別的規(guī)范及協(xié)議各種設備的驅動,本設計需要使一個嵌入式設備擁有移動硬盤的功能,所以,可以根據(jù)海量存儲類的規(guī)范及協(xié)議來該功能。



1.1 UDC驅動的基本構架

圖2所示是UDC驅動的基本構架圖。在控制器驅動程序中,首先應注冊platform驅動,調用其probe函數(shù)搜索設備,并在probe函數(shù)內初始化usb_ep和usb_gadget等結構,然后注冊設備,并申請中斷,接著等待中斷進入中斷服務子程序,最后聲明和實現(xiàn)usb_gadget_register_driver注冊函數(shù)并輸出給上層驅動。在該過程中,聯(lián)系它們的紐帶是一些全局結構體變量。

1.2 Gadget API

Gadget API為Gadget系統(tǒng)定義了統(tǒng)一的數(shù)據(jù)結構和接口函數(shù),它和主機端的USB Core地位類似,但功能僅限于提供編程接口,如用結構體usb_gadget_ops和usb_ep_ops對設備控制器驅動操作函數(shù)和端點操作函數(shù)進行重新封裝。比較特殊的是Gadget驅動程序注冊函數(shù)usb_gadget_register_driver,它們是由設備控制器(UDC)驅動直接提供的,用于將UDC綁定到gadget driver。這增加了Gadget Driver和UDC之間的依賴性。

在設備端,Gadget系統(tǒng)雖然類似主機驅動系統(tǒng)分了三層結構,但Gadget API只定義了一些數(shù)據(jù)結構、宏和功能函數(shù),并對UDC驅動程序進行了簡單包裝,而沒有驅動管理等功能。

1.3設備應用驅動程序

設備端應用程序(Gadget Driver)用于控制USB設備功能的實現(xiàn),使設備表現(xiàn)出“網絡連接”、“打印機”或“大容量存儲設備”等特性。本文以大容量移動存儲設備為例來實現(xiàn)移動硬盤的功能。

BULK ONLY傳輸指的是主機和大容量存儲設備之間的一種數(shù)據(jù)傳輸方式。

2設備端驅動調度

在嵌入式Linux操作系統(tǒng)中,Gadget driver和Gadget API可完成部分USB協(xié)議處理、BULK ONLY等傳輸協(xié)議以及指令的解析處理,用戶只需要在設備控制器驅動程序中完成部分USB協(xié)議處理和Gadget API的銜接工作。

圖3所示的流程圖給出了USB設備端驅動程序的基本調度思想。該方案的主要思路是被動的接受主機端的傳輸命令(任何類型的通信都由USB主機發(fā)起,USB設備間不能直接通信),然后通過中斷觸發(fā)的方式完成主機端的數(shù)據(jù)傳輸。當產生設備端中斷時,設備控制器驅動程序首先判斷中斷類型。當其為批量傳輸端點IN中斷時,驅動程序會將該EP下鏈接的REQ中的數(shù)據(jù)依次寫入USB2.0 OTG IP的設備控制器的內存區(qū);當其為批量傳輸OUT中斷時,驅動程序會將設備控制器內存區(qū)的數(shù)據(jù)讀入REQ中的buffer中;當其為端點0的控制傳輸中斷時,驅動程序將讀取端點緩沖區(qū)的數(shù)據(jù),并解析當前的設備請求。如果主機傳輸給設備的設備請求為USB REO SEDRESS(設置設備地址)、USB_REQ_GET_STATUS(獲取設備狀態(tài))、USB_REQ_SET_FEATURE(設置設備特性),設備控制器驅動程序會自行響應請求。但是,如果是其它設備請求,如GET_DESCRIPTOR(獲取設備描述符)時,設備控制器驅動便會將該請求提交給Gadget Driver,然后由Gadget Driver排隊將該設備請求提交給端點,以等待下次控制端點中斷。


控制傳輸比較復雜,它需要完成建立階段、數(shù)據(jù)傳輸階段和狀態(tài)階段。整個控制端點中斷的處理可通過四個狀態(tài)實現(xiàn),分別是:端點0空閑(EP0_IDLE)、 數(shù)據(jù)IN傳輸(EP0 IN DATA_PHASE)、數(shù)據(jù)OUT傳輸(EP0 OUT DATA_PHASE)和狀態(tài)階段(EPO_STATUS)。

EP0_IDLE狀態(tài)主要處理建立階段的setup令牌,并根據(jù)獲得的設備請求處理能夠處理的設備請求,同時把不能處理的設備請求(如獲取設備描述符,配置描述符等)提交給上層Gadget Driver;EP0_OUT_DATA_PHASE狀態(tài)主要處理數(shù)據(jù)階段的OUT傳輸;EP0_OUT_DATA_PHASE狀態(tài)主要處理數(shù)據(jù)階段的IN傳輸;EP0_STATUS狀態(tài)則主要完成控制傳輸過程中的狀態(tài)階段。

在圖3所示的流程圖中,EP0為控制傳輸端點,EP1、EP2、EP3為批量傳輸端點,它們主要包括端點傳輸類型、端點緩沖區(qū)大小等信息。REQ為Gadget Driver提交的端點請求,主要包含傳輸?shù)臄?shù)據(jù)長度和地址。

上一頁 1 2 下一頁

評論


相關推薦

技術專區(qū)

關閉