我在http://www.technovelty.org/code/linux/plugging-in-usb.html阅读了一篇文章。它非常好。
连接设备的枚举究竟是在哪个函数中由主机完成的,以及在哪个函数中发送 uevent?
我在 usb_new_device 等函数中引入了 printks,如果我使用“udevadm monitor --kernel”,它甚至会在 hub.c 的 usb_new_device 中调用的枚举函数之前显示内核事件?
日志如下
[110.819399] 123456 hub_irq
[110.824952]123456 hub_port_connect_change
[110.979624]123456 hub_port_init
[111.059625]usb 2-1.2:使用 fsl-ehci 和地址 3 的新高速 USB 设备
[111.189722] 123456 usb_new_device
[111.196219]usb 2-1.2:找到新的 USB 设备,idVendor=05ac,idProduct=12a0
[111.203113]usb 2-1.2:新的 USB 设备字符串:Mfr=1,Product=2,SerialNumber=3
[111.210438] USB 2-1.2:产品:iPhone
[111.214196] USB 2-1.2:制造商:Apple Inc.
[111.218728]usb 2-1.2:序列号:9356b662a93170509226069e5adf53f2351d774e
内核 [110.940183] 添加 /devices/platform/fsl-ehci.1/usb2/2-1/2-1.2 (usb)
检查时间戳,尽管 udevadm 输出在最后(udevadm 在用户空间中运行),但它实际上在 [110.940183] 得到了事件,因为在 [111.189722] 调用了 usb_new_device