歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Linux USB subsystem --- USB File System initialize

Linux USB subsystem --- USB File System initialize

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

目的:對USB作深入學習,在此留下筆記。歡迎討論。

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

函數:usbfs_init()
USB文件系統的初始化取決於是否CONFIG_USB_DEVICEFS. (make menuconfig ---> Device Drivers ---> USB support ---> USB device filesystem (DEPRECATED))

如果沒有配置CONFIG_USB_DEVICEFS, 則usbfs_init()為inline函數,直接return 0;

如果配置CONFIG_USB_DEVICEFS, 則代碼如下:

  1. static int usbfs_notify(struct notifier_block *self, unsigned long action, void *dev)
  2. {
  3. switch (action) {
  4. case USB_DEVICE_ADD:
  5. usbfs_add_device(dev);
  6. break;
  7. case USB_DEVICE_REMOVE:
  8. usbfs_remove_device(dev);
  9. break;
  10. case USB_BUS_ADD:
  11. usbfs_add_bus(dev);
  12. break;
  13. case USB_BUS_REMOVE:
  14. usbfs_remove_bus(dev);
  15. }
  16. usbfs_update_special();
  17. usbfs_conn_disc_event();
  18. return NOTIFY_OK;
  19. }
  20. static struct notifier_block usbfs_nb = {
  21. .notifier_call = usbfs_notify,
  22. };
  23. /* --------------------------------------------------------------------- */
  24. static struct proc_dir_entry *usbdir = NULL;
  25. int __init usbfs_init(void)
  26. {
  27. int retval;
  28. retval = register_filesystem(&usb_fs_type);
  29. if (retval)
  30. return retval;
  31. usb_register_notify(&usbfs_nb);
  32. /* create mount point for usbfs */
  33. usbdir = proc_mkdir("bus/usb", NULL);
  34. return 0;
  35. }

其主要作用:注冊usb文件系統,注冊一個usbfs_nb通知鏈,最後是在proc文件系統下面創建bus/usb目錄。

進入/proc/bus/usb目錄

# ls

001 002 devices

此devices的內容完全與usb debug文件系統裡的devices文件一樣。

001,代表usb總線1

002,代表usb總線2

注意:具體內容可以參見<Documentations/usb/proc_usb_info.txt>

問題:這些內容是如何產生的呢?

回答:見後面分析。

http://www.linuxidc.com/Linux/2012-03/57535.htm

http://www.linuxidc.com/Linux/2012-03/57536.htm

http://www.linuxidc.com/Linux/2012-03/57537.htm

http://www.linuxidc.com/Linux/2012-03/57538.htm

Copyright © Linux教程網 All Rights Reserved