Android USB 驱动分析

本文主要分析了Android系统的USB驱动,包括驱动代码架构、使用方法、USB插入检测和代码细节。重点讲解了如何通过注册`usb_mass_storage`实现与主机的连接,并通过修改`/sys/devices/platform/usb_mass_storage/lun0/file`来控制连接状态。此外,还介绍了如何向驱动写入LUN信息以完成设备的挂载与卸载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、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
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值