【问题标题】:Linux USB Enumeration and ueventsLinux USB 枚举和 uevents
【发布时间】:2012-07-12 07:54:56
【问题描述】:

我在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

【问题讨论】:

    标签: linux-kernel linux-device-driver udev


    【解决方案1】:

    我几乎是 Linux 内核文盲,因此不能 100% 确定此信息..但在 http://www.cs.fsu.edu/~baker/devices/lxr/http/find?v=2.6.11.8 的帮助下设法跟踪 USB 初始化

    这是Linux 2.6.11.8内核上的USB主机代码流程(如有错误请纠正我)

    usb_init()     // invoked in ../core/usb.c it initializes host, major, usbfs and usb_hub 
    usb_hub_init() // in core/hub.c it creates a kernel thread hub_thread()
    hub_thread()   // in core/hub.c
    hub_events()   // next this if called 
    hub_port_connect_change() // then this..
    

    【讨论】:

    • 感谢 StormeHawke 格式化它,我还是新手。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多