android usb读写,Android USB 驱动分析

一、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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值