gpt4 book ai didi

linux - struct usb_serial_driver的probe方法什么时候被调用?

转载 作者:太空宇宙 更新时间:2023-11-04 04:10:23 26 4
gpt4 key购买 nike

最近我在阅读Linux usb-serial.c和generic.c,发现当usb core检测到新设备插入时,会调用struct usb_driver的probe方法。但是我找不到struct usb_serial_driver的probe方法被调用的地方,似乎这个方法用于一些tty相关的设置。实际上,模板驱动generic.c并没有实现这个probe方法。

最佳答案

在usb-serial.c中,注册了usb_serial_init():

bus_register(&usb_serial_bus_type)
tty_register_driver(usb_serial_tty_driver)
usb_register(&usb_serial_driver)
usb_serial_generic_register(debug)

usb_serial_generic_register() 只是在其 generic_device_ids 数组中设置设备的 idVendor 和 idProduct。并且还注册了:

usb_serial_register_drivers(&generic_driver, serial_drivers)

它会将 generic_driver 注册到 usb_bus_type 总线,因此 device_attach() 会找到它

你知道,usb_serial_register会将驱动添加到全局列表:usb_serial_driver_list,并将驱动程序注册到USB串行总线。

generic_driver 是探针 USB 串行驱动程序的中间层。实际上,当集线器检测到您的USB设备已插入时,它会调用hub_port_connect_change(core/hub.c),它将电流分配给设备并枚举设备。最后,它会进入usb_new_device(udev)并注册设备:device_add(&udev->dev),在/sysfs中创建文件节点,并探测相应的驱动程序。 Bus_probe_device() -> device_attach ,所以,这里会调用 generic_probe,然后,它会匹配设备并调用 usb_serial_probe() -> search_serial_device() -> ... -> type->probe(),它会在 usb_serial_driver_list 上搜索驱动器,然后探测真正的串口驱动程序。

关于linux - struct usb_serial_driver的probe方法什么时候被调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19444422/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com