usbserial和option模块加载过程:
struct bus_type usb_serial_bus_type 虚拟的 usb_serial 总线
struct usb_driver usb_serial_driver
usbserial模块初始化函数:
usb_serial_init
struct tty_driver *usb_serial_tty_driver = alloc_tty_driver(SERIAL_TTY_MINORS);
bus_register(&usb_serial_bus_type); 注册虚拟总线
usb_serial_tty_driver 设置tty_driver, 操作函数 serial_ops
tty_register_driver(usb_serial_tty_driver); 注册 tty_driver
usb_register(&usb_serial_driver); 注册一个USB接口驱动 usb_serial_driver
struct usb_driver option_driver
struct usb_serial_driver * const serial_drivers
struct usb_serial_driver option_1port_device
option模块初始化函数
module_usb_serial_driver(option_driver, serial_drivers);
usb_serial_register_drivers(option_driver, serial_drivers)
saved_id_table = option_driver->id_table;
option_driver->id_table = NULL; 这里把id_table临时保存一下,下面注册的时候,即使有设备,也不会匹配到
usb_register(option_driver); 注册一个USB接口驱动 option_driver 这里会将 option_driver->drvwrap.for_devices = 0; 表示这是个接口驱动
usb_