Android USB 驱动分析[转]
来源:互联网 发布:ios 字典转json 编辑:程序博客网 时间:2024/04/29 16:46
一、USB驱动代码架构和使用
1、代码简介
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);
}
可在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文件写入一个存储
打开/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个。
例如:
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:
在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);
}
{
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);这是负责读
在驱动中有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
- Android USB 驱动分析[转]
- Android USB驱动源码分析
- USB-serial驱动分析(usb转串口)
- Android USB 驱动分析
- Android USB 驱动分析
- Android USB驱动源码分析(-)
- Android USB 驱动分析与开发----编程
- 【转】Linux USB驱动框架分析
- 通用 USB 设备驱动源码分析 【转】
- 【转】Linux USB驱动框架分析
- linux下usb转串口驱动分析
- USB转串口驱动代码分析
- linux下usb转串口驱动分析
- linux下usb转串口驱动分析
- linux下usb转串口驱动分析
- USB转串口驱动代码分析
- Linux下USB驱动框架分析 转
- USB OTG驱动分析
- Duilib 入门教程: 怎么创建一个自定义的窗口
- event.keycode值大全[转]
- jfreechart的中文api
- Windows7部署Android开发环境傻瓜式教程(Eclipse+ADT) (转)
- VS2008和VC6的调试器转换
- Android USB 驱动分析[转]
- [WPF,XAML] 跳动的心
- ssh localhost经过配置后,还是出现密码问题
- 12种貌似卫生的不卫生习惯
- 画Fortran函数调用关系图
- iOS5新特性:强大的Core Image
- 删除所有链接\批量删除DB\查询某个用户进程ID执行的操作
- __inline和宏定义
- c语言学习,指针函数、函数指针、指针的指针、指向指针数组的指针