问题描述
K230 Linux SDK重磅开放三路MIPI摄像头并行能力,配套专用v4l2-drm-three-camera三路同步采集Demo,完整操作文档现已更新至官网。依托VVCAM MCM多通道架构,三路独立ISP并行出图,双目避障、全景监控、多工位工业检测等场景开箱调试。K230硬件原生搭载CSI0/CSI1/CSI2三路独立MIPI控制器,支持逻辑slot与物理CSI自由映射,01Studio、LCKFB主流板型预置三路硬件映射配置,仅需修改设备树即可开启多路采集。
一、硬件底层多路架构说明
芯片CSI硬件资源
| 物理CSI | ID | 寄存器基地址 | 中断号 |
|---|---|---|---|
| CSI0 | 0 | 0x90009800 | 115 |
| CSI1 | 1 | 0x9000a000 | 118 |
| CSI2 | 2 | 0x9000a800 | 121 |
逻辑slot0/slot1/slot2可自由绑定任意物理CSI,互不抢占硬件资源。
MCM多路输出规则
系统默认加载vvcam_videomcm_mask=1,每路摄像头分配MP主输出、SP1/SP2辅输出三组V4L2节点:
- 单路:vvcam-video.0.0 ~ 0.2
- 双路:vvcam-video.0.0 ~ 0.5
- 三路:vvcam-video.0.0 ~ 0.8
⚠️ 关键提醒:/dev/videoX由内核动态分配,业务代码禁止硬编码设备号,必须通过vvcam-video.0.N entity名称匹配通路。 查看摄像头通路命令:
for d in /sys/class/video4linux/video*;
do echo "$(basename "$d"): $(cat "$d/name")";
done
media-ctl -d /dev/media0 -p
二、设备树配置 单/双/三路摄像头
核心配置规则
- slot必须从0连续启用,禁止跳开(仅开slot0+slot2无法识别第二、三路);
- 启用mipi.N同步开启对应I2C总线、复位GPIO;
- &v4l2isp完整配置devN-sensor-name/mode/i2c-bus;
1)单路默认配置
&i2c4 { status = "okay"; };
&mipi0 { status = "okay"; };
&mipi1 { status = "disabled"; };
&mipi2 { status = "disabled"; };
&v4l2isp {
dev0-sensor-name = "gc2093";
dev0-sensor-mode = <0>;
dev0-sensor-i2c-bus = <4>;
};
2)双路双目配置
&i2c0 { status = "okay"; };
&i2c4 { status = "okay"; };
&mipi0 { status = "okay"; };
&mipi1 { status = "okay"; };
&mipi2 { status = "disabled"; };
&v4l2isp {
dev0-sensor-name = "gc2093";
dev0-sensor-mode = <0>;
dev0-sensor-i2c-bus = <4>;
dev1-sensor-name = "gc2093";
dev1-sensor-mode = <0>;
dev1-sensor-i2c-bus = <0>;
};
3)三路三目完整配置
&i2c0 { status = "okay"; };
&i2c1 { status = "okay"; };
&i2c4 { status = "okay"; };
&mipi0 { status = "okay"; };
&mipi1 { status = "okay"; };
&mipi2 { status = "okay"; };
&v4l2isp {
dev0-sensor-name = "gc2093";
dev0-sensor-mode = <0>;
dev0-sensor-i2c-bus = <4>;
dev1-sensor-name = "gc2093";
dev1-sensor-mode = <0>;
dev1-sensor-i2c-bus = <0>;
dev2-sensor-name = "gc2093";
dev2-sensor-mode = <0>;
dev2-sensor-i2c-bus = <1>;
};
镜像编译更新命令
make linux-dirclean
make linux-rebuild
make
编译完成烧录镜像即可生效。
三、官方v4l2-drm-three-camera Demo完整使用教程
Demo基础说明
v4l2-drm-three-camera为SDK内置三路同步采集渲染专用程序,源码路径buildroot-overlay/package/vvcam,编译后自动安装至开发板/usr/bin;支持三路画面分屏显示、独立分辨率、独立图层、画面旋转/裁剪。
前置校验命令
运行前确认ISP服务、VVCAM模块正常,枚举全部V4L2设备:
v4l2-ctl --list-devices
cat /proc/vsi/isp_subdev0
ls /dev/vvcam-mipi.*
优先选用每路MP输出设备:vvcam-video.0.0 / vvcam-video.0.3 / vvcam-video.0.6。
完整运行示例命令
v4l2-drm-three-camera \
-d1 -w 240 -h 240 -x 0 -y 0 -l 1 --rotation 0 \
-d4 -w 240 -h 400 -x 240 -y 0 -l 2 --rotation 0 \
-d7 -w 480 -h 800 -x 480 -y 0 -l 3 --rotation 0
全参数说明
| 参数 | 作用 |
|---|---|
| -d N | 指定该路/dev/videoN设备 |
| -w/-h | 单路画面显示宽高 |
| -x/-y | 画面在屏幕左上角起始坐标 |
| -l 1/2/3 | 选用DRM硬件VIDEO图层1/2/3 |
| --rotation 0/1/2/3 | 画面0°/90°/180°/270°旋转 |
| -n | 缓冲区数量 |
| -f | 像素格式,支持NV12/NV16 |
| -s | 仅采集图像,不输出显示 |
运行交互按键
d:保存三路当前帧图片至当前目录
q:退出Demo程序 终端实时打印三路采集帧率、整体渲染帧率。
配套其他V4L2 Demo补充
v4l2-drm:单路基础预览,支持镜像、裁剪、分辨率切换;
v4l2-drm-scene:单路ISP场景动态切换(昼夜模式切换)。
四、Sensor替换适配步骤
- 修改对应slot devN-sensor-name为目标驱动名(OV13850/IMX335等);
- 匹配驱动内modes[]数组下标,修改devN-sensor-mode;
- 同步调整硬件I2C总线、Sensor复位GPIO、MIPI时序;
- Buildroot开启对应Sensor驱动,导入配套ISP标定文件。
五、多路调试避坑指南
- 无多路/dev/vvcam-mipi.*节点:检查mipi.N是否连续使能、对应I2C总线开启;
- 单路黑屏:核对复位GPIO、I2C地址、mode下标是否匹配Sensor;
- 画面乱序:必须通过entity名称匹配通路,不依赖固定/dev/videoX;
- 多路高负载场景:保证稳定供电、合理散热,按需调低采集分辨率。
六、官方完整开发文档直达
三路摄像头V4L2 Demo完整手册:
https://www.kendryte.com/k230_linux/zh/main/app_develop_guide/user_develop/media.html
多路摄像头设备树配置指南:
https://www.kendryte.com/k230_linux/zh/main/advanced_adaptation_guide/sensor_switch_doc.html
