Android USB 驱动分析[转]

来源:互联网 发布:ios 字典转json 编辑:程序博客网 时间:2024/04/29 16:46
一、USB驱动代码架构和使用
    
    1、代码简介
       USB驱动代码在/drivers/usb/gadget下,有三个文件:android.c,f_adb.c,
       f_mass_storage.c;g_android.ko 是由这三个文件编译而来,其中android.c 依赖于
       f_adb.c 和 f_mass_storage.c(这两个文件之间无依赖关系)。
       可在android.c中看到:
       static int __init android_bind_config(struct usb_configuration *c)   
       {   
          struct android_dev *dev = _android_dev;   
          int ret;   
          printk(KERN_DEBUG "android_bind_config\n");   
          ret = mass_storage_function_add(dev->cdev, c, dev->nluns);   
          if (ret)   
              return ret;   
          return adb_function_add(dev->cdev, c);   
       }
 
    2、驱动使用
       要使USB mass storage连接到主机:
       打开/sys/devices/platform/usb_mass_storage/lun0/file文件,向file文件写入一个存储
       设备的路径,例如/dev/block/vold/179:0 (major:minor)路径;
       这里的usb_mass_storage根据实际应用可以改的,由platform_device_register函数的参数决
       定。
       例如:
       static struct platform_device fsg_platform_device =   
       {
          .name = "usb_mass_storage",   
          .id   = -1,   
       };   
       static void __init tegra_machine_init(void)   
       {   
        ....   
        (void) platform_device_register(&fsg_platform_device);   
        ....   
       }
    
       能够连接的设备数,由驱动中的nluns变量来控制,最多支持8个。

二、USB插入检测
   
三、USB代码分析
 
    1、USB初始化
       在android.c中分别注册adb和mass storage:
       static int __init android_bind_config(struct usb_configuration *c)   
       {   
           struct android_dev *dev = _android_dev;   
           int ret;   
           printk(KERN_DEBUG "android_bind_config\n");   
           ret = mass_storage_function_add(dev->cdev, c, dev->nluns);   
           if (ret)   
              return ret;   
           return adb_function_add(dev->cdev, c);   
       }
 
    2、往驱动写入lun信息
       在驱动中有static DEVICE_ATTR(file, 0444, show_file, store_file);这是负责读
       (cat/read)或直写(echo/write)设备属性文件的宏。
 
    3、USB连接到主机
 
      echo /dev/block/vold/179:0 > /sys/devices/platform/usb_mass_storage/lun0/file
 
    4、USB从主机断开
      
       echo "" > /sys/devices/platform/usb_mass_storage/lun0/file
 
原创粉丝点击