usb_serial_generic_register1. usb_serial_generic_register1.1 usb_serial_device_match2. usb_serial_driver1. usb_serial_generic_register初始化局部结构体udriverstruct usb_driver通过usb_register()注册 USB 驱动到内核整个流程同 1.3 注册 USB 驱动到内核usb_register 一模一样通过usb_serial_register()注册每个串口驱动3.1初始化 usb_serial_driver 结构体3.2通过list_add()将驱动加入 USB 串口的全局链表usb_serial_driver_list3.3通过usb_serial_bus_register()将驱动注册到 usb-serial 总线上即通过 driver_register() 完成底层设备驱动的注册通过driver_find()检查驱动是否已注册即遍历总线驱动 usb_serial_driver-.driver.bus.p.drivers_kset.list链表中是否存在 usb_serial_driver-driver.name(generic)名称的驱动节点存在则表示已注册什么都不做这里不存在表示未注册继续下列任务2-4通过bus_add_driver()将驱动添加到总线2.1初始化 usb_serial_driver.drvwrap.driver.bus.p结构体2.2kobject_init_and_add()根据 usb_serial_driver.driver.bus.p.kobj创建/sys/bus/usb/drivers/usbserial_generic目录2.3klist_add_tail()将 USB驱动 插入 USB总线 的驱动列表2.4driver_attach()循环遍历总线 usb_serial_driver.driver.bus.p.klist_devices.k_list上所有设备节点-调用总线 usb_serial_driver.driver.bus.match(dev,drv)即usb_serial_device_match()检查驱动是否支持该设备-匹配成功调用driver_probe_device()将设备与驱动绑定2.5module_add_driver()创建下列软连接-将/sys/bus/usb/drivers/usbserial_generic/module链接到/sys/module/usbserial/-将/sys/module/usbserial/drivers/usb:usbserial_generic链接到/sys/bus/usb/drivers/usbserial_generic2.6driver_create_file()创建/sys/bus/usb/drivers/usbserial_generic/uevent文件2.7driver_add_groups()在/sys/bus/usb/drivers/usbserial_generic目录下创建属性组文件这里未创建属性文件2.8add_bind_files()创建下列文件-创建/sys/bus/usb/drivers/usbserial_generic/unbind文件-创建/sys/bus/usb/drivers/usbserial_generic/bind文件通过driver_add_groups()在/sys/bus/usb/drivers/usbserial_generic/目录下创建驱动自定义的属性组未创建通过kobject_uevent()在驱动注册完成后向用户空间广播一条“驱动已添加”的 uevent通过driver_attach()循环遍历总线usb_driver-drvwrap.driver.bus.p.klist_devices上所有设备执行usb_driver-drvwrap.driver.bus.match函数即usb_device_match() 函数根据设备类型和驱动类型进行分流对 USB 设备驱动采用泛匹配对 USB 接口驱动则通过静态和动态设备 ID 表精确匹配执行usb_driver-drvwrap.driver.bus.match函数即usb_device_match() 函数检查驱动是否支持该设备1.1 usb_serial_device_match2. usb_serial_driver