1 : 0); input_sync(uk_dev); } pre_val = usb_buf[0]; /* 重新提交urb */ usb_submit_urb(uk_urb, GFP_KERNEL); } static int usbmouse_as_key_probe(struct usb_interface *intf, const struct usb_device_id *id) { struct usb_device *dev = interface_to_usbdev(intf); struct usb_h...
分支2: dev,drv代表的是interface级别: 此时的dev代表着一个interface,而drv就代表了我们自己的usb驱动.但是我们应当看到drv是device_driver类型,而我们写的usb驱动的类型一般是usb_driver,因此这里的probe和我们自己写的probe显然不是同一个.实际上这里的drv是我们的驱动对象里内嵌的一个子对象(因为linux下所以的驱动...
下面我们就以drivers\hid\usbhid\usbmouse.c这个驱动文件为例,分析USB鼠标的驱动代码流程。 USB鼠标遵循USB HID(Human Interface Device)规范。 在probe中探测设备是否符合HID规范,并且创建和初始化URB: 在usb_mouse_open函数中提交URB: 执行回调函数,向user space上报input事件: 5.3、U盘驱动 5.3.1、U盘驱动框架 ...
int (*probe) (struct usb_interface *intf,const struct usb_device_id *id); /* 断开函数, USB 设备被拔出的时候被调用 */ void (*disconnect) (struct usb_interface *intf); /* id_table,描述了这个 USB 驱动所支持的 USB 设备列表 */ const struct usb_device_id *id_table; ... }; 10. ...
Probe函数接口,用于给设备驱动提供决策,是否愿意管理该USB设备下的一个接口(interface)。这里我们可以看出,usb_driver面对的对象粒度是接口,而不是设备(device)。Disconnect:当设备被删除(拔出)或者驱动被卸载时,会调用该接口以解除设备对象与内核之间的联系。后面的例子中,我们会看到该接口实现中应当做哪些事情。
USB 设备的初始化都是 Hub 这边发起的,通常我们写 USB 设备驱动程序都是在已经得到了一个 struct usb_interface 指针的情况下开始 probe 工作。可是我要问你,你的 struct usb_interface 从哪来的?老实说,要想知道从 USB 设备插入 USB 口的那一刻开始,这个世界发生了什么,你必须知道 Hub 是怎么工作的,Linux ...
module_usb_driver(xxx);3.2.3 驱动功能驱动功能在驱动probe函数中实现。probe函数原型为: int (*probe) (struct usb_interface *intf, const struct usb_device_id *id); 在probe函数中根据接口信息获取接口的传输端点,一般鼠标和hub设备等实时性要求高,传输数据少的接口使用中断传输端点,而要求效率高,传输数据...
这次与root_hub下的接口匹配的应该是hub_driver->drvwrap.driver,通过静态id_table的匹配成功之后应该执行usb_probe_interface这个函数。 static int usb_probe_interface(struct device *dev) { struct usb_driver *driver = to_usb_driver(dev->driver); struct usb_interface *intf = to_usb_interface(dev);...
(&rockchip->otg_work, dwc3_rockchip_otg_extcon_evt_work) of_find_device_by_node // 获取子节点的platform_device指针,即usbdrd_dwc3_0节点 /* 获取子节点驱动的私有数据指针,即dwc3结构体指针,若获取不成功,则返回EPROBE_DEFER, 内核会后续再次执行dwc3_rockchip_probe */ rockchip->dwc = ...
这一层的 Device 由 Hub 创建,Hub 本身也是一种 Usb Device;这一层的 Driver 完成的功能非常简单,基本就是帮 Usb Device 创建其包含的所有子 Usb Interface 的 Device,大部分场景下都是使用 usb_generic_driver。 Usb Interface Layer层。这一层的 Device 由上一级 Usb Device 在驱动 probe() 时创建;而这...