歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Linux USB subsystem --- USB File System initialize

目的:對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.   
  17.     usbfs_update_special();  
  18.     usbfs_conn_disc_event();  
  19.     return NOTIFY_OK;  
  20. }  
  21.   
  22. static struct notifier_block usbfs_nb = {  
  23.     .notifier_call =    usbfs_notify,  
  24. };  
  25.   
  26. /* --------------------------------------------------------------------- */  
  27.   
  28. static struct proc_dir_entry *usbdir = NULL;  
  29.   
  30. int __init usbfs_init(void)  
  31. {  
  32.     int retval;  
  33.   
  34.     retval = register_filesystem(&usb_fs_type);  
  35.     if (retval)  
  36.         return retval;  
  37.   
  38.     usb_register_notify(&usbfs_nb);  
  39.   
  40.     /* create mount point for usbfs */  
  41.     usbdir = proc_mkdir("bus/usb", NULL);  
  42.   
  43.     return 0;  
  44. }  

其主要作用:注冊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