RK3576——v4l2-ctl、media-ctl命令分析

📅 2026/8/4 22:39:25
RK3576——v4l2-ctl、media-ctl命令分析
背景需求通常在Linux系统下开发camera进行调试时v4l2-ctl、media-ctl是非常有用的调试工具。通常使用media-ctl配置拓扑结构再用v4l2-ctl配置具体设备节点。1.v4l2-ctl简介v4l2-ctl是Video for Linux TwoV4L2接口的命令行工具主要用于管理和控制Linux系统中的视频设备。功能特点1查询设备信息列出设备支持的格式、分辨率、帧率等。2设置视频格式调整分辨率、像素格式如 YUYV、MJPG、H264。3控制摄像头参数调整曝光、白平衡、增益、对焦等。4捕获图像/视频保存单帧图像或视频流。5流控制启动/停止视频流设置帧率。命令使用下述以RK3576为例进行演示1查看设备信息v4l2-ctl -d /dev/video0 --infov4l2-ctl -d /dev/video55 --list-formats 列出设备支持的图像格式。v4l2-ctl -d /dev/video55 --list-formats-ext列出支持的格式和分辨率。2设置参数 将 /dev/video55 设备的图像格式设置为YUYV分辨率为640x480。v4l2-ctl -d /dev/video55 --set-fmt-videowidth640,height480,pixelformatNV12查看配置是否成功v4l2-ctl -d /dev/video55 --get -fmt-video3 捕捉视频帧设备捕获10帧视频数据并保存为test_frame.yuv文件。v4l2-ctl -d /dev/video55 --stream-mmap --stream-count10 --stream-totest_frame.yuv更详细参数命令v4l2-ctl -d /dev/video55 --set-fmt-videowidth1920,height1080,pixelformatNV12 --stream-mmap4 --stream-skip3 --stream-to/userdata/1080p60_nv12.rgb --stream-count1 --stream-poll参数说明-d /dev/video55 指定video设备–set-fmt-video 指定宽高及pxielformatpixelformatNV12 格式 FourCC编码–stream-mmap 指定 buffer 的类型为 mmap–stream-skip 指定丢弃不保存到文件 前 3 帧–stream-to 指定帧数据保存的文件路径–stream-count 指定抓取的帧数–stream-poll 该选项指示 v4l2-ctl 采用异步 IO4列出所有 V4L2 设备v4l2-ctl --list-devices2.media-ctl简介media-ctl是 Linux 系统中用于配置和管理 V4L2Video for Linux 2子设备的命令行工具它主要用于配置媒体控制器Media Controller框架下的复杂视频设备如摄像头、图像传感器、CSI/DSI接口、图像处理单元等的拓扑结构和数据流路径。2.1.media拓扑结构了解需要了解拓扑知道每个字段的含义才能看懂拓扑结构修改其配置以RK3576为例entity代表实体以entity 63为例表示一个sensor的实体实体名称m01_b_ov13850 6-0036。pads表示该实体输入(Sink或输出(Source)entity 63实体为例该实体作为输出。link表示一条链接entity 63实体为例- rockchip-csi2-dphy0:0 [ENABLED]表示链接到了rockchip-csi2-dphy0实体。2.2.功能特点1查看和配置媒体设备拓扑结构管理视频硬件链路中的实体entities和链接links。2设置格式Format配置子设备的输入/输出pad格式如分辨率、像素格式等。3设置路由Routing控制数据流在实体间的路径。4调试和可视化生成设备拓扑图便于理解硬件链路。命令使用1列出设备media-ctl -p -d /dev/media0输出所有媒体设备及其实体entities、链接links和pad属性2生成拓扑图生成 media0.png文件可视化设备链路。media-ctl -d /dev/media0 --print-dot media0.dot利用graphviz工具转换成图片方便查看sudo apt install graphvizdot -Tpng media0.dot -o media0.png图形拓扑结构查看绿色表示链路已使能media0media5media10从这里就可以看出上面就是sensor到isp的一个完整路线3设置格式Formatmedia-ctl -V entity:pad [fmt:format/widthxheight]示例设置 CSI-2 接收器的输入格式为 SBGGR10_1X10分辨率 1920x1080。注意只有支持缩放的节点才支持修改分辨率media-ctl -d /dev/media5 --set-v4l2 rkisp-isp-subdev:0[fmt:SBGGR10_1X10/1920x1080]media-ctl -d /dev/media5 --set-v4l2 rkisp-isp-subdev:0[crop:(0,0)/1920x1080]4配置链路关闭摄像头media-ctl -l m01_b_ov13850 6-0036:0-rockchip-csi2-dphy0:0[0]开启摄像头media-ctl -l m01_b_ov13850 6-0036:0-rockchip-csi2-dphy0:0[1]5设置路由Routingmedia-ctl -r source_entity:source_pad - sink_entity:sink_pad [enable]示例将摄像头传感器输出连接到dphy接收器输入media-ctl -r m01_b_ov13850 6-0036:0 [1] - rockchip-csi2-dphy0:0 [1]配置完后需要重新使能否则不生效media-ctl -l m01_b_ov13850 6-0036:0-rockchip-csi2-dphy0:0[1]5配置摄像头传感器设置传感器输出格式为 SRGGB10 (RAW10), 分辨率 2592x1944media-ctl -V m01_b_ov13850 6-0036:0 [fmt:SBGGR10_1X10/1920x1080]这里配置完后不生效猜测是驱动不支持有知道原因的可以留言。6验证配置media-ctl --get-v4l2 entity:pad检查实体 m01_b_ov13850 6-0036 的 pad 0 的格式media-ctl --get-v4l2 m01_b_ov13850 6-0036:0拓展知识如何确认视频设备节点/dev/video55对应的是ov13850摄像头分析设备树sensorphy:mipi_csi2:rkcifisp:到这里最终确认OV13850对应的ISP的虚拟vir0节点。与其对应的media5设备节点其下的MP节点即/dev/video55是经过ISP处理后的视频节点。————————————————版权声明本文为CSDN博主「嵌入式Linux小白」的原创文章遵循CC 4.0 BY-SA版权协议转载请附上原文出处链接及本声明。原文链接https://blog.csdn.net/m0_49857167/article/details/145603913