1.linux usb架構
usb通訊都是由host端發起的。usb裝置驅動程式分配並初始化乙個urb發給usb core,usb core改一改,發給usb主機控制器驅動,usb主機控制器驅動把它解析成包,在匯流排上進行傳送。usb core是由核心實現的,其實也就是把host control driver裡的功能更集中的向上抽象了一層,它是用來對最上層的usb裝置驅動遮蔽掉host control的不同。
2.在核心中的位置
usb驅動程式存在於不同的核心子系統和usb硬體控制器之中。usb核心為usb驅動程式提供了乙個用於訪問和控制usb硬體的介面。而不必考慮系統當前存在的各種不同型別的usb硬體控制器。
3.usb裝置的構成,包括配置,介面和端點
上圖描述了linux usb裝置的結構層次。每乙個inte***ce代表乙個功能,對應有乙個驅動程式。
4.usb裝置驅動描述
在linux核心中,使用structusb_driver結構描述乙個usb驅動。
struct usb_driver ;
usb裝置的列舉過程和我們通常看到裝置稍有不同,比如i2c裝置,我們需要在板檔案中去註冊i2c裝置的資訊(比如裝置名和一些硬體配置資訊),而usb匯流排會自動去列舉usb裝置,只要能與id_table匹配,就能列舉成功,然後載入相應的驅動程式。
5.usb裝置描述
linux核心使用struct usb_device來描述乙個usb裝置
struct usb_device ;
6.usb描述符
在linux 核心中定義一下幾種描述符結構體,都是嚴格按照usb協議來定義:
裝置描述符:關於裝置的通用資訊,如生產商id,產品id等;
配置描述符:此配置中的介面數,支援的掛起和恢復能力以及功率要求;
介面描述符:介面類,子類和適用的協議,介面備用配置的數碼和端點數目;
端點描述符:端點位址,方向和型別,支援的最大包大小,如果是中斷型別的端點則還包括輪詢頻率。
字串描述符:在其他描述符中會為某些字段提供字串索引,他們可悲用來檢索描述性字串。
7.urb
usb請求塊(usbrequest block,urb)是usb裝置驅動中用來描述與usb裝置通訊所用的基本載體和核心資料結構,非常類似於網路裝置驅動中的sk_buff結構體。
1. usb裝置驅動程式建立並初始化乙個訪問特定usb裝置特定端點的urb,並提交給usb core;
2. usb core提交該urb到usb主控制器驅動程式;
3. usb主控制器驅動程式根據該urb描述的資訊,來訪問usb裝置;
4. 當裝置訪問結束後,usb主控制驅動程式通知usb裝置驅動程式。
原文見:
USB裝置驅動
把usb裝置接到pc 右下角彈出 發現android phone 跳出乙個對話方塊,提示你安裝驅動程式 問1.既然還沒有 驅動程式 為何能知道是 android phone 答1.windows裡已經有了usb的匯流排驅動程式,接入usb裝置後,是 匯流排驅動程式 知道你是 android phon...
linux裝置驅動 USB
系統核心中有usb匯流排驅動程式,作用是識別裝置,查詢並安裝裝置驅動程式,提供讀寫函式 當乙個usb裝置插入時,會有以下操作 1.某條線被拉低,硬體感知有裝置接入 2.usb匯流排驅動程式為裝置分配新位址,並告訴usb裝置 3.獲取描述符 4.根據獲取的裝置描述符中的資訊在usb匯流排中新增devi...
USB 裝置 USB 驅動 USB 應用程式
usb 裝置 usb 驅動 usb 應用程式 1.usb 裝置硬體部分 a.這個硬體的標識是用的 vender id 和 product id,即 廠家標識 和 產品標識 b.這個硬體規定了各個 end point 端點 的性質,讀 寫 及 型別 control interrupt bulk iso...