歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Linux USB subsystem --- register generic usb driver

Linux USB subsystem --- register generic usb driver

日期:2017/3/1 10:25:44   编辑:Linux編程

目的:對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. if (usb_disabled())
  16. return -ENODEV;
  17. new_udriver->drvwrap.for_devices = 1;
  18. new_udriver->drvwrap.driver.name = (char *) new_udriver->name;
  19. new_udriver->drvwrap.driver.bus = &usb_bus_type;
  20. new_udriver->drvwrap.driver.probe = usb_probe_device;
  21. new_udriver->drvwrap.driver.remove = usb_unbind_device;
  22. new_udriver->drvwrap.driver.owner = owner;
  23. retval = driver_register(&new_udriver->drvwrap.driver);
  24. if (!retval) {
  25. pr_info("%s: registered new device driver %s\n",
  26. usbcore_name, new_udriver->name);
  27. usbfs_update_special();
  28. } else {
  29. printk(KERN_ERR "%s: error %d registering device "
  30. " driver %s\n",
  31. usbcore_name, retval, new_udriver->name);
  32. }
  33. return retval;
  34. }
  35. EXPORT_SYMBOL_GPL(usb_register_device_driver);
此過程是注冊一個usb的通用程驅動。驅動注冊的過程與usbfs驅動注冊類似。其結果是:在/sys/bus/usb/drivers/下面創建usb目錄。在usb目錄下面創建如下屬性文件。

bind uevent unbind


至此,整個usb core的初始化過程完成。

後面將進入到USB host controller的初始化。

Copyright © Linux教程網 All Rights Reserved