CSI 摄像头
Luckfox Pico RV1106 兼容 SC3336 3MP Camera (A) 和 MIS5001 摄像头,分别支持 300 万像素和 500 万像素,适用于多种场景。
- SC3336 3MP Camera (A) 采用思特威 SC3336 感光芯片,具备高灵敏度、高信噪比和低照度性能,能够呈现细腻、色彩真实的夜视全彩成像,并适应环境光线变化。
- MIS5001 摄像头 采用 MIS5001 感光芯片,支持 500 万像素,具有高灵敏度和低暗电流特性,在弱光环境下仍能清晰成像。提供 广角镜头 和 广角无畸变镜头 版本可选。
- 本教程仅适用于 buildroot系统,Ubuntu 系统暂时不支持。
- MIS5001 仅支持 RV1106 的板型(其中包括:Luckfox Pico Pro/Max/Ultra/Pi)
1. 硬件连接
Luckfox Pico Pro/Max 开发板连接摄像头时,请确保摄像头排线的金属面朝向开发板芯片。

2. 查看摄像头和 IP 地址
注意:摄像头出厂时蓝色排线的字体方向可能不固定。无论字体朝向哪个方向,确保摄像头排线的金属面朝向 RV1106 即可,请确保连接正常后开机。
查看摄像头,若成功识别摄像头会生成 rkipc.ini 文件。
# ls /userdata/
ethaddr.txt lost+found image.bmp video0 video2 rkipc . ini video1获取设备的 USB 静态 IP 地址 Luckfox Pico Pro/Max/Ultra/Pi/Zero 默认 IP 为 172.32.0.93
# ifconfig
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
usb0 Link encap:Ethernet HWaddr 9E:49:D7:C8:F4:A3
inet addr:172.32.0.93 Bcast:172.32.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:763 errors:0 dropped:116 overruns:0 frame:0
TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:149160 (145.6 KiB) TX bytes:1544 (1.5 KiB)对于 Luckfox Pico Pro/Max/Ultra/Pi/Zero 由于硬件上有网口,还可以查看到有线 IP 地址:
# ifconfig
eth0 Link encap:Ethernet HWaddr 82:D8:B7:D8:94:5A
inet addr:192.168.10.86 Bcast:192.168.11.255 Mask:255.255.252.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:144 errors:0 dropped:0 overruns:0 frame:0
TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:11210 (10.9 KiB) TX bytes:684 (684.0 B)
Interrupt:51
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
usb0 Link encap:Ethernet HWaddr F2:84:8E:BA:A0:E8
inet addr:172.32.0.93 Bcast:172.32.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:85 errors:0 dropped:39 overruns:0 frame:0
TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:13126 (12.8 KiB) TX bytes:1544 (1.5 KiB)
3. 配置 RNDIS 虚拟网口
若需使用静态 IP 进行推流,需配置 RNDIS,以确保虚拟网卡将电脑与开发板置于同一局域网。
Windows 安全中心—>防火墙和网络保护—>关闭防火墙。

配置 RNDIS 网卡的静态IP,打开设置—>高级网络设置—>更改适配器选项。
网卡一般是类似这样的名字Remote NDIS based nternet Sharing Device,右键属性。

双击 internet 协议版本(TCP/IPv4),IPV4地址设置为 172.32.0.100,避免和设备冲突。


4. 使用VLC media player 拉流
下载并安装 VLC media player 。
打开 VLC media player 软件,在媒体—>打开网络串流

输入默认的 IP 地址:rtsp://172.32.0.93/live/0

Luckfox Pico Ultra 版本也可以使用 eth0 的 IP地址串流。

点击播放,即可看到摄像头画面,可以旋转镜头来调焦。

5. 优化 VLC 网络串流
VLC软件就默认会缓存1秒(1000ms=1s)的视频,可以适度减小缓存时间,可以提高实时性,但是延迟太低 可能导致丢包或者卡顿,建议不低于300ms。
- 效果如下:

6. 模拟 UVC 设备
6.1 快速启动模式(fastboot)
由于rndis.sh与usb_config.sh不能同时使用,执行任一脚本后必须重启系统才能切换工作模式;每个启动周期内仅能激活一种模式(UVC 或 RNDIS)。
推流
烧录网盘快速启动的系统,需要使用串口登录开发板。
配置开发板的网络。
# USB 静态IP
rndis.sh
# 网口动态IP
udhcpc -i eth0激活 RTSP 服务进程。
echo rtsp_start > /tmp/smart_door.ini按照第四小节《4. 使用 VLC media player 推流》进行视频推流。
uvc
烧录网盘快速启动的系统,需要使用串口登录开发板。
启动 UVC
usb_config.sh
echo uvc_start > /tmp/smart_door.ini打开设备管理器,可以在照相机类别中看到新增的 UVC Camera 设备。

使用 PotPlayer 软件按 Ctrl+J,即可查看摄像头图像。
详细分辨率设置,右键打开 PotPlayer 菜单,依次选择 “打开” —> "设备设置"。
6.2 标准启动模式
在 SDK 环境中,打开
luckfox-pico/project/cfg/BoardConfig_IPC/BoardConfig-*-.mk配置文件,在 RK_APP_TYPE 选项中,添加 UVC_TINY 配置。export RK_APP_TYPE="RKIPC_RV1106 UVC_TINY"
修改完成后,选择对应的开发板型号即可一键编译。具体步骤请参考 SDK 章节。
关闭 rkipc 程序和 adb 服务。
RkLunch-stop.sh
killall S99usb0config #adb重连会导致uvc连接失败启动 UVC 服务。
usb_config.sh
rk_mpi_uvc &使用 PotPlayer 软件按 Ctrl+J,即可查看摄像头图像。
详细分辨率设置,右键打开 PotPlayer 菜单,依次选择 “打开” —> "设备设置"。
7. 使用 V4L2 读取原图
由于图像未经过 ISP(图像信号处理器)处理,通过 V4L2 接口采集的画面可能会出现偏暗、偏绿色的现象。若需要经过 ISP 处理的图像,可使用默认的 RKIPC 程序,或参考本手册中 RKMPI 章节 的示例程序。
7.1 V4L2 简介
V4L2,全称 Video for Linux 2,是Linux操作系统上用于支持视频设备的内核框架。它提供了一组 AP I和驱动程序接口,使用户空间应用程序能够与各种视频设备(如摄像头、电视卡等)进行交互。V4L2 是 Linux 内核的一部分,用于处理视频输入和输出。
7.2 V4L2 框架
V4L2 视频设备对应的设备节点有 /dev/videoX,视频设备以高频摄像头或 Camera 为输入源,Linux 内核驱动该类设备,接收相应的视频信息并处理
- User Space(用户空间)
- 应用程序通常通过
libv4l库来操作摄像头,也可以选择基于字符设备/dev/videoX自行编写应用程序。 guvcview通常适用于USB 摄像头,因为它提供了用户友好的图形界面,适合在桌面环境中操作。(Luckfox Pico 暂时不支持)yavta通常适用于 CSI 摄像头,因为 CSI 摄像头通常在嵌入式系统中使用,yavta是一个轻量级的命令行工具,适合在终端环境中进行测试和调试。(默认不开启)v4l2 utilities: v4l-utils 工具包主要包含两个常用工具,分别是 media-ctl 和 v4l2-ctl
- 应用程序通常通过
- Kernel Space(内核空间)
- RKVICAP 和 RKISP 驱动主要是基于v4l2 / media框架实现硬件的配置、中断处理、控制 buffer轮转,以及控制 subdevice (如 MIPI D-PHY及sensor)的上下电等功能。(更多详细信息查看文档Rockchip_Driver_Guide_VI_CN_v1.1.3.pdf)
- MIPI D-PHY是 MIPI 联盟定义的一种物理层协,通常用于连接图像传感器和图像处理器
- Video Buffer 2 是 Linux 内核中的一个子系统, vb2 负责在 Linux 系统中处理视频缓冲区的内存管理和设备I/O操作,通常用于处理摄像头和其他视频输入设备
- 摄像头通过D-PHY 将视频数据传输到处理单元,并在此过程中,vb2负责分配和管理用于存储视频帧的内存缓冲区
- CCI(Camera Control Interface,摄像头控制接口):摄像头控制接口是一种用于从图像处理器向摄像头发送控制命令的接口。主要是通过GPIO(供电、片选)、I2C(下发配置命令给sensor)实现配置 sensor
- Hardware(硬件)
- CSIC Controller: 主要功能是实现图像传感器和图像处理器之间的高速数据传输。
- I2C Controller: 用于与图像传感器的I2C块进行通信,这通常用于配置和控制传感器的参数,如曝光时间、增益等。
- GPIO Controller: 用于与图像传感器进行通信,通常用于提供电源或选择传感器,可能是通过控制传感器的供电或片选引脚。
- EHCI/OHCI:OHCI 主要用于 USB 1.1 设备,而 EHCI 用于支持 USB 2.0 高速设备。这两者的结合使得计算机可以同时支持不同速度的 USB 设备,并为 USB 控制器提供了一致的软硬件接口。这里指的是USB类型摄像头
- External Devices(外设)
- 摄像头的接口:CSI(2 x 2Lanes or 1 x 4Lanes 2.5Gbps/Lane)、DVP(BT601 / BT656 / BT1120 pclk: 150MHz)和 USB 2.0。
7.3 V4L2-utils 工具包
V4L2-utils 是一组用于测试和配置 V4L2 设备的实用工具,它们通过命令行界面提供了对 V4L2 接口的访问。Luckfox SDK 的 buildroot 包中默认已经开启了 v4l2-utils 工具。
7.4 v4l2-ctl
列出摄像头的设备
v4l2-ctl --list-devices# v4l2-ctl --list-devices
rkisp-statistics (platform: rkisp):
/dev/video23
/dev/video24
rkcif-mipi-lvds (platform:rkcif):
/dev/media2
rkcif (platform:rkcif-mipi-lvds):
/dev/video4
/dev/video5
/dev/video6
/dev/video7
/dev/video8
/dev/video9
/dev/video10
/dev/video11
/dev/video12
/dev/video13
/dev/video14
rkisp_mainpath (platform:rkisp-vir0):
/dev/video15
/dev/video16
/dev/video17
/dev/video18
/dev/video19
/dev/video20
/dev/video21
/dev/video22
/dev/media3
USB Camera: USB Camera (usb-xhci-hcd.0.auto-1.1):
/dev/video0
/dev/video1
/dev/media0
USB 2.0 Camera: USB Camera (usb-xhci-hcd.0.auto-1.2):
/dev/video2
/dev/video3
/dev/media1rkisp_mainpath:CSI摄像头USB Camera:USB 摄像头
列出摄像头支持的格式
v4l2-ctl --device=/dev/video15 --list-formats-ext
v4l2-ctl --device=/dev/video0 --list-formats-ext显示摄像头参数
v4l2-ctl --device=/dev/video15 --list-ctrls录制视频
#CSI 摄像头(需要先关掉自带的RKIPC)
killall rkipc
v4l2-ctl --device=/dev/video15 --set-fmt-video=width=640,height=480,pixelformat=NV12 --stream-mmap --stream-to=video50.yuv --stream-count=30
#USB 摄像头
v4l2-ctl --device=/dev/video0 --set-fmt-video=width=640,height=480,pixelformat=YUYV --stream-mmap --stream-to=video100.yuv --stream-count=30-device:摄像头对应设备文件--set-fmt-video:指定了宽高及 pxielformat (标识像素格式)--stream-mmap:指定 buffe r的类型为 mmap,即由内核分配的物理连续的或经过 iommu 映射的buffer--stream-to:指定帧数据保存的文件路径--stream-count:指定抓取的帧数,不包括--stream-skip丢弃的数量
如果出现“The pixelformat 'UYVY' is invalid” 字样说明摄像头不支持此格式,使用第二步的方法查看摄像头支持的格式
看到
<<<<<<<<< 25 fps说明成功录制视频
7.5 media-ctl
查看有几个 media 节点
# ls /dev/media*
/dev/media0 /dev/media1 /dev/media2查看拓扑结构命令为
media-ctl -d /dev/media3 -p上述命令如果读取不到 CSI 摄像头的 Entity,可以使用如下命令查看全部信息
# v4l2-ctl --all -d /dev/video15
Driver Info:
Driver name : rkisp_v7
Card type : rkisp_mainpath
Bus info : platform:rkisp-vir0
Driver version : 2.0.0
Capabilities : 0x84201000
Video Capture Multiplanar
Streaming
Extended Pix Format
Device Capabilities
Device Caps : 0x04201000
Video Capture Multiplanar
Streaming
Extended Pix Format
Media Driver Info:
Driver name : rkisp-vir0
Model : rkisp0
Serial :
Bus info :
Media version : 5.10.110
Hardware revision: 0x00000000 (0)
Driver version : 5.10.110
Interface Info:
ID : 0x03000007
Type : V4L Video
Entity Info:
ID : 0x00000006 (6)
Name : rkisp_mainpath
Function : V4L2 I/O
Pad 0x01000009 : 0: Sink
Link 0x0200000a: from remote pad 0x1000004 of entity 'rkisp-isp-subdev' (Unknown V4L2 Sub-Device): Data, Enabled
Priority: 2
Format Video Capture Multiplanar:
Width/Height : 2304/1296
Pixel Format : 'NV12' (Y/CbCr 4:2:0)
Field : None
Number of planes : 1
Flags :
Colorspace : Default
Transfer Function : Default
YCbCr/HSV Encoding: Default
Quantization : Full Range
Plane 0 :
Bytes per Line : 2304
Size Image : 4478976
Selection Video Capture: crop, Left 0, Top 0, Width 2304, Height 1296, Flags:
Selection Video Capture: crop_bounds, Left 0, Top 0, Width 2304, Height 1296, Flags:
Selection Video Output: crop, Left 0, Top 0, Width 2304, Height 1296, Flags:
Selection Video Output: crop_bounds, Left 0, Top 0, Width 2304, Height 1296, Flags:
Image Processing Controls查看哪个设备可以输出图像。
media-ctl -d /dev/media3 -e "rkisp_mainpath"
7.6 显示视频
上面抓取的图片或者视频可以拷贝到 Ubuntu 中借助借助工具ffplay查看。ffplay 是 FFmpeg 工具包中的一个命令行工具,用于播放音频和视频文件。它基于 FFmpeg 库,支持广泛的音视频格式,能够在命令行中实时播放或预览多媒体内容。
播放视频
ffplay -video_size 640x480 -pixel_format nv12 -framerate 10 -i video50.yuv
ffplay -video_size 640x480 -pixel_format yuyv422 -framerate 10 -i video100.yuv-video_size size设置帧尺寸 设置帧尺寸大小-pixel_format format设置像素格式-framerate 10: 设置视频的帧率为 10 帧/秒

转换视频格式
ffmpeg -f rawvideo -pixel_format yuyv422 -video_size 640x480 -framerate 30 -i video.yuv -c:v libx264 output.mp4