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

猜你喜欢

转载自blog.csdn.net/qq543716996/article/details/103913486