最終更新:2017-06-19 (月) 18:00:48 (2496d)
Linux/USBデバイスドライバ
確認
lsusb
- バインドされてるドライバはlsusb -tで見れる
$ lsusb -t /: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M |__ Port 1: Dev 2, If 0, Class=HID, Driver=usbhid, 12M |__ Port 2: Dev 3, If 0, Class=hub, Driver=hub/7p, 12M |__ Port 1: Dev 7, If 0, Class='bInterfaceClass 0xe0 not yet handled', Driver=btusb, 12M |__ Port 1: Dev 7, If 1, Class='bInterfaceClass 0xe0 not yet handled', Driver=btusb, 12M |__ Port 2: Dev 9, If 0, Class=HID, Driver=usbhid, 1.5M /: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/6p, 480M
バインドされているドライバへのシンボリックリンク
- Linux/sys/bus/usb/devices/X-A.B.C:Y.Z/driver
手動でアンバインド
- echo -n "X-A.B.C:Y.Z" > Linux/sys/bus/usb/drivers/ドライバ名/unbind
手動でバインド
- echo -n "X-A.B.C:Y.Z" > Linux/sys/bus/usb/drivers/ドライバ名/bind
usb-devices
- でも見れる
Linux/dev/inputのデバイスを表示
- udevadm info --query=path --name=/dev/input/event16
- /devices/pci0000:00/0000:00:14.0/usb2/2-2/2-2:1.2/0003:XXXX:YYYY.0009/input/input24/event16
ホストとデバイス間の通信
種類
Linux/USBコアドライバ
- usbcore
- drivers/usb/core/usb.cのusb_initでドライバのロード/初期化
- usb_register_device_driver(usb_device_driver usb_generic_driver)
- usb_generic_driver.probe = generic_probe
- usb_choose_configuration
- usb_set_configuration - Makes a particular device setting be current
- usb_notify_add_device
- usb_generic_driver.probe = generic_probe
Linux/USBホストドライバ?
URBの処理
Linux/USBクラスドライバ?
- usb_class_driver - ユーザ空間プログラムとやりとりするためにメジャー番号を割り当てる場合に、USBドライバについて記述する構造体
- usb_register_dev(usb_class_driver) - クラスドライバをUSBコアに登録する関数
Linux/USBデバイスドライバ
- usb_driver - USBドライバを記述する構造体
- usb_register -> usb_register_driver(usb_driver) - register a USB interface driver
- usb_driver->drvwrap.driver.probe = usb_probe_interface
- driver_register(device_driver) - register driver with bus
- driver_find? - locate driver on a bus by its name.
- bus_add_driver(device_driver) - Add a driver to the bus.
- driver_add_groups
- kobject_uevent
- usb_driver型のドライバ
構造体
kernel.org
- kernel.org/DocBook/gadget?