Linux USB的學習與記錄

Linux USB
四種不同的數據傳輸方式:
    1.控制傳輸(Control Transfers)
    2.中斷傳輸(Interrupt Data Transfers)
    3.批量傳輸(Bulk data Transfers)
    4.等時傳輸(Isochronous Data Transfers)
    
    
設備可以有多個接口,每個接口代表一個功能,每個接口對應着一個驅動。
kernel/include/linux/usb.h
#define USB_MAJOR            180
查看/proc/devices 就可以看到180 和 189主設備號的設備


如果USB設備沒有與其他任何子系統關聯,就需要對應驅動的probe函數中使用usb_register_dev函數來註冊並獲得主設備號USB_MAJOR。
如果USB設備關聯了其他子系統,則需要在對應驅動程序的probe函數中使用相應的註冊函數,USB_MAJOR 就用不到了。
比如:USB鍵盤關聯了input子系統,驅動對應 /kernel/drivers/hid/usbhid/usbkbd.c 文件,在它的probe函數中可以看到使用了input_register_device來註冊一個輸入設備。

USB描述符主要有四種:設備描述符、配置描述符、接口描述符和端點描述符。
include/linux/usb/ch9.h
接口描述符:struct usb_host_interface
端點描述符:struct usb_endpoint_descriptor
                    .bmAttributes  [1..0] = 00    控制傳輸
                                            01    等時傳輸
                                            10    批量傳輸
                                            11    中斷傳輸
設備描述符:struct usb_device_descriptor
                    .idVendor    廠商ID(人們常說的VID)
                    .idProduct    產品ID(人們常說的PID)
配置描述符:usb_config_descriptor

發佈了46 篇原創文章 · 獲贊 10 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章