看了很久的USB子系统了,还是雾蒙蒙的,现在梳理一下。
首先从bus入手,在core下面定义了struct bus_type usb_bus_type,这就是usb的bus上的设备与驱动通用的一个结构体。
首先看driver,API主要在core/driver.c里,注册usb_bus_type的,主要有两个函数:usb_register_device_driver()和 usb_register_driver()
这两个函数最主要的区别就是for_devices,而它在usb_device_match()函数(usb_bus_type中的match函数)中用到。用来表征该驱动是设备驱动(is_usb_device()),还是接口驱动(is_usb_interface())。
其次是device,API主要是在core/usb.c里,注册usb_bus_type的函数:usb_alloc_dev()
这个函数用来生成一个usb设备,只在hub.c里的hub_port_connect_change()函数中被调用,与usb_new_device()(该函数也只是在这里被调用)配合使用。
调用流程如下(core/hub.c):
usb_hub_init() -> kthread_run(hub_thread, NULL, "khubd")
hub_thread() -> hub_event() -> hub_port_connect_change() -> usb_alloc_dev() usb_new_device()