1. 使用lsusb命令查找USB设备的ID: 首先,使用lsusb命令列出系统中连接的USB设备。该命令会显示每个设备的厂商ID和产品ID。找到需要复位的USB设备的ID。 示例: “` $ lsusb Bus 001 Device 002: ID 8087:8001 Intel Corp. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 003 Device 0...
//如果hub断开了,继续hub_event_list中的下一个 if (unlikely(hub->disconnected)) goto loop; /* If the hub has died, clean up after it */ //设备没有连接上 if (hdev->state == USB_STATE_NOTATTACHED) { hub->error = -ENODEV; //将下面的子设备全部disable hub_pre_reset(intf); goto l...
然后,进行第一个重要的判断.如果hub被断开了,则,断开hub下面所连接的所有端口,这是在hub_pre_reset()中完成的. 最后,进行第二个重要的判断,如果hub发生了错误,则reset它下面的所有端口,这是在usb_reset_composite_device()中完成的. /* deal with port status changes */ //遍历hub中的每一个port for (i...
2.2 USB子系统框架 三,USB总线驱动程序 3.1 USB Core 3.1.1 注册 USB 总线 3.1.2 注册USB接口驱动 3.1.3 初始化USB Hub 3.1.3.1 khubd_wait 的唤醒 3.1.4 注册USB设备驱动 3.1.5 usb_register 和 usb_register_device_driver 3.1.6 总结 3.2 USB主机控制器驱动(HCD) 3.2.1 USB主机控制器-设备 3.2.2...
1、 Linux下USB HUB的驱动的实现和分析: 在系统初始化的时候在usb_init函数中调用usb_hub_init函数,就进入了hub的初始化。 代码路径:drivers\usb\core\hub.c 在usb_hub_init函数中完成了注册hub驱动,并且利用函数alloc_workqueue创建一个工作队列。
1. lsusb:显示系统中连接的USB设备信息。使用”lsusb”命令可以列出所有连接到USB总线的设备。命令的输出包括设备的厂商ID、产品ID、设备描述字符串和总线/设备编号等详细信息。 用法:lsusb 示例输出: “` Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub ...
#include <linux/usbdevice_fs.h> 1. 2. 3. 4. 5. 6. 7. 8. 9. voidmain(intargc,char**argv) 1. { constchar*filename; 1. intfd; 1. filename = argv[1]; 1. fd=open(filename,O_WRONLY); 1. ioctl(fd, USBDEVFS_RESET, 0); ...
int usb_hub_init(void) { …… khubd_task = kthread_run(hub_thread, NULL, "khubd"); …… } Kthread_run()是kernel中用来启动一个新kernel线程的接口,它所要执行的函数就是后面跟的第一个参数.在这里,也就是 hub_thread().另外,顺带提一句,要终止kthread_run()创建的线程,可以调用kthread_stop...
ret = usb_reset_device(hdev); --重新复位hub if (ret) { goto loop_autopm; } hub->nerrors = 0; hub->error = 0; } for (i = 1; i <= hub->descriptor->bNbrPorts; i++) { --处理端口状态改变 if (test_bit(i, hub->busy_bits))--检测端口是否忙 ...
由此可知,位于drivers/usb/core/Hub.c中的hub_port_init()函数中: dev_info (&udev->dev, "%s %s speed %sUSB device using %s and address %d\n", (udev->config) ? "reset" : "new", speed, type, udev->bus->controller->driver->name, udev->devnum); ...