Linux Android USB gadget(从设备驱动)


《Linux驱动:USB设备驱动看这一篇就够了》
《The Linux-USB Host Side API》

一:Linux usb gadget 与 Android Composite Gadget

Android在linux usb gadget的基础上,做了一次升级。linux usb gadget的配置是系统启动后立即生效的,所以一个固件只能选择一种类型的gadget,比如hid/webcam/acm等。但Android版本的是在系统起来后,由应用程序决定该生成那种gadget,即bind那种function。
Linux3.0以上的系统既支持linux原生的方式,又支持Android方式。其实,Android的方式只不过在linux原生的驱动上面又封装了一层,其底层也还是linux原生驱动。源码位于:drivers/usb/gadget/android.c

二:原生方式和Android方式如何配置

webcam为例:

函数调用逻辑

以webcam为例,Android在生成webcam的时候,调用webcam_function,而webcam_function最终调用的还是webcam.c 里的webcam_config_bind:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

内核配置

原生驱动

在这里插入图片描述配置如土所示,原生驱动只能选择webcam。设备只能作为webcam,系统启动后自己就会生成/dev/video0的虚拟视频输出设备。

android驱动

在这里插入图片描述在这里插入图片描述

Android Composite Gadget 依赖 USB_SUNXI_UDC0(USB Device Controller, USB 设备控制器)
Android Composite Gadget 依赖 ADB Interface
在这里插入图片描述

usb多角色控制支持,配置Android Composite Gadget 功能。
SUNXI USB2.0 Manager —> USB_SUNXI_USB_MANAGER
SUNXI USB driver use adb source —> USB_SUNXI_USB_ADB
在这里插入图片描述

Android的这种配置在系统启动的时候不会生成gadget设备,系统启动后应用层决定该生成什么设备。
Android配置的系统启动后,会生成一个/sys/class/android_usb/android0/目录

# 配置为网络摄像头,生成/dev/video0
echo 0 > enable
echo 18d1 > idVendor
echo d002 > idProduct
echo webcam > functions
echo 1 > enable
# /dev/video0设备消失,/dev/hidg0生成,设备又可以作为hid设备使用
echo 0 > enable
echo hid > functions
echo 1 > enable

devices和host模式切换

# devices模式
cat /sys/bus/platform/devices/usbc0/usb_device

# host模式
cat /sys/bus/platform/devices/usbc0/usb_host

三:mass_storage配置

虚拟化U盘

Android Composite Gadget 驱动默认支持f_mass_storage
在这里插入图片描述

# 开启
echo /dev/mmcblk0p2 > /sys/class/android_usb/f_mass_storage/lun/file
# 关闭
echo "" > /sys/class/android_usb/f_mass_storage/lun/file

四:遍历usb设备


                
  • 12
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值