K230 Linux 作为 UVC摄像头指南#
概述#
本文介绍 uvc-gadget demo 的使用方法,包括如何将 K230 Linux 设备配置为 UVC Gadget(USB 摄像头),以及在电脑上通过 USB 查看实时视频流。
功能演示#
硬件连接#
+---------+ +---------+
| K230 |---USB---| PC |
| Linux | | (宿主机)|
+---------+ +---------+
|
| UART
|
+---------+
| PC |
| (串口调试)|
+---------+
K230 端启动 uvc-gadget#
在 K230 Linux 命令行执行如下命令启动 uvc-gadget:
# 启动 uvc-gadget 服务
/root/app/uvc-gadget/uvc-gadget.sh start
# 或直接运行 uvc-gadget 程序
uvc-gadget -v /dev/video1
提示:使用
v4l2-ctl --list-devices命令确认摄像头设备,一般为/dev/video1。
PC 端查看视频#
在 PC 上打开视频软件(如 PotPlayer、OBS、Cheese 等)
选择 K230 对应的摄像头设备
设置视频格式为 MJPEG 1080p
打开摄像头即可查看视频流
说明:视频流延迟约大概为 220ms。
实现讲解#
配置说明#
需要在 Buildroot 配置中启用 BR2_PACKAGE_UVC_GADGET:
# buildroot-overlay/package/uvc-gadget/Config.in
config BR2_PACKAGE_UVC_GADGET
bool "uvc-gadget"
select BR2_PACKAGE_LIBV4L
如果未找到 uvc-gadget 程序,请确认已使能上述配置。
uvc-gadget.sh 脚本说明#
脚本位置:buildroot-overlay/package/uvc-gadget/uvc-gadget.sh
该脚本用于在嵌入式 Linux 系统中将设备配置为 USB 摄像头设备。
主要功能#
函数 |
功能 |
|---|---|
|
创建视频帧配置,支持三种格式(uncompressed/YUYV、MJPEG)和三种分辨率(360p、720p、1080p) |
|
启动 UVC 设备,加载内核模块、挂载 configfs、创建 USB Gadget 配置 |
|
停止 UVC 设备,终止进程、解绑 UDC、卸载内核模块 |
使用方式#
./uvc-gadget.sh start # 启动 UVC 设备
./uvc-gadget.sh stop # 停止 UVC 设备
./uvc-gadget.sh restart # 重启 UVC 设备
核心配置#
USB ID:Vendor ID:
0x29f1, Product ID:0x0104供应商信息:Canaan
USB 控制器:
91500000.usb
uvc-gadget 程序说明#
K230 的 uvc-gadget 基于 uvc-gadget 开源项目,增加了 K230 VPU 硬件编码支持。
代码位置:buildroot-overlay/package/uvc-gadget/
数据流#
Camera (V4L2) → FFmpeg → VPU Encoder → Packet Queue → UVC Streamer → USB Host
摄像头捕获:通过
libavformat从 V4L2 设备读取原始帧硬件编码:使用
mjpeg_v4l2m2m编码器进行 VPU 加速编码Packet 队列:编码后的数据存入循环队列(默认大小 2-4)
UVC 传输:从队列取出数据写入 UVC sink buffer
线程模型#
线程 |
职责 |
|---|---|
主线程 |
处理 UVC events loop,响应 sink buffer dequeue 事件 |
VPU 线程 |
持续捕获摄像头数据并送入编码器 |
线程间通过 mutex + condition variable 同步。
