Linux Android USB gadget设备配置

转载请标明出处:https://blog.csdn.net/u013752202/article/details/96503874

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。

         以webcam为例,Android在生成webcam的时候,调用webcam_function,而webcam_function最终调用的还是webcam.c 里的webcam_config_bind。

Linux Android USB gadget设备配置_第1张图片

Linux Android USB gadget设备配置_第2张图片

Linux Android USB gadget设备配置_第3张图片

话不多说,且看原生方式和Android方式分别如何配置,以webcam为例。

原生驱动。

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

Linux Android USB gadget设备配置_第4张图片

Linux Android USB gadget设备配置_第5张图片

Android驱动

         先选中Android Composite Gadget,再选择要支持的设备类型,比如hid和webcam。

 

Linux Android USB gadget设备配置_第6张图片Linux Android USB gadget设备配置_第7张图片

Android的这种配置在系统启动的时候是不会生成gadget设备的,系统启动后由应用层决定该生成什么设备,以webcam为例。

Android配置的系统启动后,会生成一个/sys/class/android_usb/android0/目录,进入该目录。

Linux Android USB gadget设备配置_第8张图片

在该目录下,即可配置即将生成的usb gadget的参数。还是以webcam为例。

执行以下命令:

echo 0 > enable

echo 18d1 > idVendor

echo d002 > idProduct

echo webcam > functions

echo 1 > enable

这样即可生成/dev/video0设备了,设备作为网络摄像头使用。

如果设备又想作为hid键盘使用,则重新配置一遍即可。

echo 0 > enable

echo hid > functions

echo 1 > enable

Linux Android USB gadget设备配置_第9张图片

这样原来的/dev/video0设备消失,/dev/hidg0生成,设备又可以作为hid设备使用了。

这就是Android可以作为多种USB设备使用的奥秘。

Linux Android USB gadget设备配置_第10张图片

转载请标明出处:https://blog.csdn.net/u013752202/article/details/96503874

你可能感兴趣的:(linux内核与驱动)