Linux struct usb_串行_驱动程序的探测方法何时调用?

Linux struct usb_串行_驱动程序的探测方法何时调用?,linux,usb,Linux,Usb,最近,我一直在阅读LinuxUSB serial.c和generic.c,发现当usb核心检测到插入的新设备时,会调用struct usb_驱动程序的探测方法。 但是,我找不到struct usb_serial_驱动程序的probe方法的调用位置,似乎这个方法用于一些与tty相关的设置。实际上,模板驱动程序generic.c没有实现此探测方法。在usb serial.c中,usb_serial_init()已注册: bus_register(&usb_serial_bus_type) t

最近,我一直在阅读LinuxUSB serial.c和generic.c,发现当usb核心检测到插入的新设备时,会调用struct usb_驱动程序的探测方法。
但是,我找不到struct usb_serial_驱动程序的probe方法的调用位置,似乎这个方法用于一些与tty相关的设置。实际上,模板驱动程序generic.c没有实现此探测方法。

在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_register_drivers(&generic_driver, serial_drivers)
usb_serial_generic_register()只需在其generic_device_id数组中设置设备的idVendor和idProduct。并注册:

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_register_drivers(&generic_driver, serial_drivers)
它会将通用_驱动程序注册到usb_总线_类型总线,因此设备_attach()会找到它

你知道,usb_串行_寄存器会将驱动程序添加到全局列表中:usb_串行_驱动程序列表, 并将驱动程序注册到usb串行总线

通用_驱动程序是探针usb串行驱动程序的中间层。实际上,当集线器检测到您的usb设备已插入时,它将调用集线器端口连接更改(core/hub.c),它将向设备分配电流并枚举设备。最后,它将进入usb_new_device(udev)并注册设备:device_add(&udev->dev),在/sysfs中创建文件节点,并探测相应的驱动程序。总线探测设备()->设备连接,因此,这里将调用通用探测设备,然后它将匹配设备并调用
usb串行探测设备()->搜索串行探测设备()->…->键入->probe()
,它将在usb串行驱动程序列表中搜索驱动器,然后探测真正的串行驱动程序