Rockchip RK3588 Android平台UVC复合设备配置与调试实战
1. 环境准备与SDK移植拿到RK3588开发板的第一件事就是搭建开发环境。我使用的是RK3588 LP4X EVB开发板配套的Android SDK是从Rockchip官方仓库获取的。这里有个小坑要注意官方SDK通常需要企业邮箱申请权限如果遇到下载问题可以直接联系FAE支持。UVC功能模块需要从RV1126 SDK中移植uvc_app组件。具体路径在rv1126_sdk/rv1126/external/uvc_app目录下。移植过程中最关键的三个文件是uvc_v4l2.c负责视频采集和V4L2接口交互uvc_gadget.c实现USB Video Class协议栈drm_allocator.c处理内存分配特别注意必须用aarch64架构我在移植时遇到过drm内存分配失败的问题后来发现是编译链架构不匹配导致的。建议直接使用android-ndk-r25b-linux版本NDK解压到/home/pub/sdk目录下。其他版本可能会报奇怪的链接错误。2. 关键配置文件修改Android系统下的USB配置主要涉及三个关键文件需要像外科手术一样精确修改2.1 init.rk30board.usb.rc配置这个文件决定了USB设备的基本属性。重点需要添加两段配置# 纯UVC模式配置 on property:sys.usb.configuvc property:sys.usb.configfs1 write /config/usb_gadget/g1/os_desc/use 1 write /config/usb_gadget/g1/idProduct 0x0005 # UVCADB复合模式配置 on property:sys.usb.configuvc,adb property:sys.usb.configfs1 write /config/usb_gadget/g1/os_desc/use 1 write /config/usb_gadget/g1/idProduct 0x0015产品IDidProduct的取值很讲究0x0005对应纯视频设备类0x0015表示复合设备视频ADB厂商IDidVendor固定为Rockchip的22072.2 init.usb.configfs.rc配置这个文件处理USB功能绑定和控制器启动。需要特别注意配置字符串的拼写on property:sys.usb.configuvc property:sys.usb.configfs1 write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration uvc symlink /config/usb_gadget/g1/functions/uvc.gs6 /config/usb_gadget/g1/configs/b.1/f1 write /config/usb_gadget/g1/UDC ${sys.usb.controller}其中uvc.gs6是UVC功能的实例名不同内核版本可能后缀不同。我曾经因为漏写.gs6导致功能无法加载。2.3 init.usb.rc传统配置作为configfs的备用方案这个文件需要配置传统USB路径on property:sys.usb.configuvc,adb property:sys.usb.configfs0 write /sys/class/android_usb/android0/enable 0 write /sys/class/android_usb/android0/idVendor 2207 write /sys/class/android_usb/android0/idProduct 15 write /sys/class/android_usb/android0/functions ${sys.usb.config} write /sys/class/android_usb/android0/enable 1 start adbd特别注意enable的开关顺序必须先关闭→配置→再开启否则改动不会生效。3. 设备模式切换实战配置完成后需要通过属性服务切换USB工作模式。这里推荐两个黄金命令组合# 切换到纯UVC模式 setprop sys.usb.config none;setprop sys.usb.config uvc # 切换到UVCADB复合模式 setprop sys.usb.config none;setprop sys.usb.config uvc,adb执行后可以通过dmesg观察内核日志正常应该看到configfs-gadget gadget: high-speed config #1: uvc uvcvideo: Found UVC 1.10 device USB Camera (2207:0005)常见问题排查如果出现cannot create symlink错误检查/sys/kernel/config目录是否挂载UDC not found表示USB控制器未就绪检查设备树配置ADB无法识别时尝试重启adbd服务stop adbd; start adbd4. uvc_app应用调试编译好的uvc_app可以直接运行./uvc_app 1280 720 参数支持动态调整第一个参数视频宽度建议640/1280/1920第二个参数视频高度建议480/720/1080不跟参数时默认使用640x480分辨率调试技巧测试阶段可以用模拟数据源./uvc_app -t 1 # 使用测试色条模式查看帧率统计cat /proc/uvc_stats内存泄漏检查valgrind --toolmemcheck ./uvc_appPC端推荐使用PotPlayer验证视频流在打开设备时选择UVC Camera设备。如果出现花屏检查开发板的像素格式是否为V4L2_PIX_FMT_YUYV。