usb_register
- 1. usb_register
- 2. usb_driver
1. usb_register
初始化 usb_driver 结构体1
通过
driver_register()完成下列任务:
2.1检查总线与驱动的操作方法是否冲突
2.2通过driver_find()检查驱动是否已注册(已注册,则什么都不做)
未注册(遍历usb_driver->drvwrap..driver.bus.p.klist_drivers.list链表中无usbserial名称的设备),
则通过bus_add_driver()将驱动添加到总线2.3通过
driver_add_groups()在/sys/bus/usb/drivers/usbserial/目录下创建驱动自定义的属性组(这里未创建)
2.4通过kobject_uevent()在驱动注册完成后,向用户空间广播一条“驱动已添加”的 uevent
- 通过
usb_create_newid_files()在驱动的 sysfs 目录下创建 new_id 和 remove_id 文件,允许用户空间动态添加/删除支持的 USB 设备 ID
- 通过
driver_create_file()创建/sys/bus/usb/drivers/usbserial/new_id文件(未执行)- 通过
driver_create_file()创建/sys/bus/usb/drivers/usbserial/remove_id文件(未执行)1-初始化
usb_driver->drvwrap.driver.bus.p结构体[^3]
2-通过kobject_init_and_add()创建/sys/bus/usb/drivers/usbserial目录
3-通过klist_add_tail()将 USB驱动 插入 USB总线 的驱动列表
4-通过driver_attach()循环遍历总线usb_driver->drvwrap.driver.bus.p.klist_devices上所有设备(未执行)
5-通过module_add_driver()
5.1-将/sys/bus/usb/drivers/usbserial/module链接到/sys/module/usbserial/
5.2-将/sys/module/usbserial/drivers/usb:usbserial链接到/sys/bus/usb/drivers/usbserial
6-通过driver_create_file()创建/sys/bus/usb/drivers/usbserial/uevent文件
7-通过driver_add_groups()在/sys/bus/usb/drivers/usbserial目录下创建usb_driver->drvwrap.driver.bus.drv_groups属性组(这里未创建属性文件)
8-通过add_bind_files()
8.1-创建/sys/bus/usb/drivers/usbserial/unbind文件
8.2-创建/sys/bus/usb/drivers/usbserial/bind文件
2. usb_driver
初始化 usb_driver 结构体 ↩︎