我们按照设备枚举的流程,开始讲generic driver。这个generic driver是针对usb device的。generic driver属于host driver的一部分。其实这个generic driver主要实现的功能是 设备的枚举。
struct usb_device_driver usb_generic_driver = {
.name = "usb",
.probe = generic_probe,
.disconnect = generic_disconnect,
#ifdef CONFIG_PM
.suspend = generic_suspend,
.resume = generic_resume,
#endif
.supports_autosuspend = 1,
};
内核中只实现了这一个usb_device_driver。也就是说当有usb 设备插入root hub时,root hub中会调用usb_new_device。根据总线的一般规则,最终都会调用到usb_generic_driver的probe函数 对usb 设备进行处理。
static int generic_probe(struct usb_device *udev)
{
int err, c;
/* Choose and set the configuration. This registers the interfaces
* with the driver core and lets interface drivers bind to them.
*/
if (usb_device_is_own