Linux USB subsystem --- register generic usb driver


目的:对USB作深入学习,在此留下笔记。欢迎讨论。

[Linux 3.2] [driver/usb/core/driver.c]

函数:usb_register_device_driver

  1. /** 
  2.  * usb_register_device_driver - register a USB device (not interface) driver 
  3.  * @new_udriver: USB operations for the device driver 
  4.  * @owner: module owner of this driver. 
  5.  * 
  6.  * Registers a USB device driver with the USB core.  The list of 
  7.  * unattached devices will be rescanned whenever a new driver is 
  8.  * added, allowing the new driver to attach to any recognized devices. 
  9.  * Returns a negative error code on failure and 0 on success. 
  10.  */  
  11. int usb_register_device_driver(struct usb_device_driver *new_udriver,  
  12.         struct module *owner)  
  13. {  
  14.     int retval = 0;  
  15.   
  16.     if (usb_disabled())  
  17.         return -ENODEV;  
  18.   
  19.     new_udriver->drvwrap.for_devices = 1;  
  20.     new_udriver->drvwrap.driver.name = (char *) new_udriver->name;  
  21.     new_udriver->drvwrap.driver.bus = &usb_bus_type;  
  22.     new_udriver->drvwrap.driver.probe = usb_probe_device;  
  23.     new_udriver->drvwrap.driver.remove = usb_unbind_device;  
  24.     new_udriver->drvwrap.driver.owner = owner;  
  25.   
  26.     retval = driver_register(&new_udriver->drvwrap.driver);  
  27.   
  28.     if (!retval) {  
  29.         pr_info("%s: registered new device driver %s\n",  
  30.             usbcore_name, new_udriver->name);  
  31.         usbfs_update_special();  
  32.     } else {  
  33.         printk(KERN_ERR "%s: error %d registering device "  
  34.             "   driver %s\n",  
  35.             usbcore_name, retval, new_udriver->name);  
  36.     }  
  37.   
  38.     return retval;  
  39. }  
  40. EXPORT_SYMBOL_GPL(usb_register_device_driver);  
此过程是注册一个usb的通用程驱动。驱动注册的过程与usbfs驱动注册类似。其结果是:在/sys/bus/usb/drivers/下面创建usb目录。在usb目录下面创建如下属性文件。

bind  uevent  unbind


至此,整个usb core的初始化过程完成。

后面将进入到USB host controller的初始化。

相关内容