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