Linux Android USB gadget设备配置
转载请标明出处:https://blog.****.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。
话不多说,且看原生方式和Android方式分别如何配置,以webcam为例。
原生驱动。
配置如下图所示,原生驱动只能选择webcam。系统只能作为webcam,系统启动后自己就会生成/dev/video0的虚拟视频输出设备。
Android驱动
先选中Android Composite Gadget,再选择要支持的设备类型,比如hid和webcam。
Android的这种配置在系统启动的时候是不会生成gadget设备的,系统启动后由应用层决定该生成什么设备,以webcam为例。
Android配置的系统启动后,会生成一个/sys/class/android_usb/android0/目录,进入该目录。
在该目录下,即可配置即将生成的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
这样原来的/dev/video0设备消失,/dev/hidg0生成,设备又可以作为hid设备使用了。
这就是Android可以作为多种USB设备使用的奥秘。
转载请标明出处:https://blog.****.net/u013752202/article/details/96503874