一、前言
近段时间,在下从客户方收到了VCOM功能的开发需求。以往没有这类开发经验,互联网上看了看,例程也不多。初次调试,受绊许久,遂作些许记录。
二、需求内容
从设备的OTG接口,提供一个VCOM虚拟串口的功能,要求能正常实现串口的收发能力。
三、调试环境
OS:Android13
Platform:RK3568
Linux version:Kerne 5.10.157
Sdk version:Android-13.0-mid-rkr6.1
四、调试过程
I、调试方法
首先得了解什么是VCOM。所谓VCOM是一种虚拟串行端口技术,其允许通过软件模拟出一个串行端口,使得计算机可以像与常规物理串口通信一样,与虚拟的串口进行通信。与常规的物理串口相比,例如RS-232、RS-485等,VCOM在物理接口、硬件依赖、便捷性和灵活性上更为宽松。当然,实际的应用通常是要结合实际情况的,选择物理串口还是虚拟串口,按需选取。
既然是要求从OTG口转出的VCOM功能,那么自然是要想办法实现USB口功能类型的转换。这里就得了解一下USB Gadget了。USB Gadget就是一种USB设备功能,是一种嵌入式Linux技术。其允许设备模拟USB设备的行为,通过USB Gadget ,嵌入式设备可以作为USB设备(如鼠标、键盘、存储设备以及串口设备等)与主机(如PC)进行通信。简单地解释的话,USB Gadget允许设备充当USB设备,而不是传统的USB主机。像是在下要实现的Android VCOM功能,就是让Android设备也能作为一个COM设备与PC端进行互连。
在Android中与USB相关的script脚本为:
init.usb.rc
init.usb.configfs.rc
init.rk30board.usb.rc
fstab.rk30board.bootmode.emmc
其中我们需要配置的文件为init.rk30board.usb.rc和init.usb.configfs.rc,这两个文件为 RK 平台 Gadget 功能的配置管理文件,其内容主要包括 usb gadget configfs 的创建、 描述符的定义(VID/PID)、Gadget function 的配置等,具体内容说明可查阅相关项目的开发文档Rockchip_Developer_Guide_USB_CN.pdf 。
在下做的修改如下:
init.rk30board.usb.rc
Index: device/rockchip/common/rootdir/init