看了很久的usb子系統了,還是霧濛濛的,現在梳理一下。
首先從bus入手,在core下面定義了struct bus_type usb_bus_type,這就是usb的bus上的裝置與驅動通用的乙個結構體。
首先看driver,api主要在core/driver.c裡,註冊usb_bus_type的,主要有兩個函式:usb_register_device_driver()和 usb_register_driver()
這兩個函式最主要的區別就是for_devices,而它在usb_device_match()函式(usb_bus_type中的match函式)中用到。用來表徵該驅動是裝置驅動(is_usb_device()),還是介面驅動(is_usb_inte***ce())。
其次是device,api主要是在core/usb.c裡,註冊usb_bus_type的函式:usb_alloc_dev()
這個函式用來生成乙個usb裝置,只在hub.c裡的hub_port_connect_change()函式中被呼叫,與usb_new_device()(該函式也只是在這裡被呼叫)配合使用。
呼叫流程如下(core/hub.c):
usb_hub_init() -> kthread_run(hub_thread, null, "khubd")
hub_thread() -> hub_event() -> hub_port_connect_change() -> usb_alloc_dev() usb_new_device()
一 usb子系統相關結構體
1.usb匯流排 struct usb bus struct usb bus 2.usb hub struct usb hub status struct mutex status mutex int error 出錯標誌 int nerrors struct list head event lis...
USB2 0和USB3 0徹底梳理
usb1.0 usb2.0低速版本 usb1.1 usb2.0全速版本 usb2.0 usb2.0高速版本 usb3.0 usb3.1 gen 1 usb3.2 gen 1 usb3.1 usb3.1 gen 2 usb3.2 gen 2 usb3.2 usb3.2 gen 3 發布時間 1995年...
usb裝置在sys子系統中的表示
首先,看一下 sys bus usb devices usb3下的目錄結構 說明 usb匯流排上每個裝置都以root hub的編號作為其名字的第乙個號碼,這個號碼後跟著乙個 字元還有裝置所插入的埠號 port 3 0 1.0中3為root hub的編號,3 0表示裝置所接入的root hub編號為3...