0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

RK平台Camera开发入门:从基础知识点到实战调试

jf_44130326 来源:Linux1024 2026-02-05 14:00 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

大家好!在安防监控、物联网设备、消费电子等领域,瑞芯微Rockchip)平台凭借出色的图像处理能力,成为很多开发者的首选。但Camera开发涉及硬件链路、驱动配置、调试优化等多个环节,新手很容易踩坑。今天这篇文章,我们就基于瑞芯微官方《RK VI驱动指南》,梳理RK平台Camera开发的核心基础知识点实战调试方法,帮你快速入门,解决常见问题。

wKgZO2kajD-AJmNeAAE51HE4gjI821.png

一、RK Camera开发基础知识点

想要做好RK平台Camera开发,首先要理清硬件架构-软件配置-关键概念这三大块,我们一步步拆解

1.先搞懂:适用平台与核心硬件模块

RK平台对Camera的支持覆盖多系列芯片,不同芯片的VIVideo Input)模块能力有差异,先明确你的开发目标平台:

芯片型号

软件系统

核心能力亮点

RV1126

Linux 4.19

支持3HDRVICAP Full/LiteIP

RV1109

Linux 4.19

RV1126,分辨率上限3072x2048

RK3566

Linux 4.19

VICAP,不支持HDR

RK3568

Linux 4.19

支持2HDR,分辨率上限4096x2304

RK3588

Linux 5.10

ISP +FEC,支持8K合成+ 7sensor

核心硬件模块解析

Camera数据从传感器到输出,要经过采集-处理-后处理三大模块,链路如下(建议收藏):

wKgZO2kajD-AWoHqAACK9k6ft40099.jpg  

RKVICAP:视频采集模块,负责接收Sensor的原始数据,支持MIPIDPHY/CPHY)、LVDSDVPBT601/BT656/BT1120接口,不同芯片的VICAP数量/能力不同(如RV1126VICAP Full+Lite)。

RKISP:图像信号处理器Camera大脑,支持HDR合成(2/ 3帧)、自动白平衡(AWB)、自动曝光(AE)、自动对焦(AF)等3A功能,还能处理RAW格式转换。

CISCMOS Image Sensor:相机传感器,通过I2C与主控通信,驱动需基于V4L2 Subdev框架实现,是数据的源头

2.再上手:关键软件配置

软件配置的核心是DTS设备注册驱动框架,这两步错了,Camera根本跑不起来。

1DTS配置:Camera注册的身份证

DTS(设备树)负责描述硬件连接关系,比如Sensor的接口类型、I2C地址、电源GPIO等,不同接口(MIPI/LVDS/DVP)的配置略有差异,这里以最常用的MIPI接口为例(基于RV1126+OS04A10 Sensor):

// 1. Sensor节点配置os04a10:os04a10@36{  compatible ="ovti,os04a10";// 与驱动匹配的字符串  reg = <0x36>;// Sensor I2C地址(7位)  clocks = <&cru CLK_MIPICSI_OUT>;// Sensor时钟  clock-names ="xvclk";  power-domains = <&power RV1126_PD_VI>;// 电源域 // 电源配置  avdd-supply = <&vcc_avdd>;  dovdd-supply = <&vcc_dovdd>;  dvdd-supply = <&vcc_dvdd>; // GPIO配置(断电/复位)  pwdn-gpios = <&gpio1 RK_PD4 GPIO_ACTIVE_HIGH>; // 模组信息(匹配IQ参数)  rockchip,camera-module-index = <1>;// 模组编号(不重复)  rockchip,camera-module-facing ="front";// 朝向(front/back) // MIPI端口链接  port {    ucam_out0: endpoint {      remote-endpoint = <&mipi_in_ucam0>;// 链接到MIPI DPHY     data-lanes = <1234>;// MIPI Lane数(必须配置,否则识别失败)    };  };};// 2. MIPI DPHY节点配置&csi_dphy0 {  status ="okay";  ports {   port@0{      mipi_in_ucam0:endpoint@1{        reg = <1>;        remote-endpoint = <&ucam_out0>;// 反向链接Sensor       data-lanes = <1234>;// 与Sensor一致      };    };   port@1{      csidphy0_out:endpoint@0{        remote-endpoint = <&isp_in>;// 链接到ISP      };    };  };};// 3. ISP虚拟节点配置(数据链路生效)&rkisp_vir0 {  status ="okay";  ports {   port@0{      isp_in:endpoint@0{        remote-endpoint = <&csidphy0_out>;// 反向链接MIPI DPHY      };    };  };};

关键注意点

compatible必须与Sensor驱动中的of_match_table一致,否则驱动无法匹配设备;

data-lanes必须明确(如4 Lane<1 2 3 4>),MIPI接口不配置会识别为其他类型;

Sensor注册时,需分配不同的camera-module-index,避免冲突(如RK3588支持7Sensor6MIPI+1DVP)。

2)驱动框架:基于I2C+V4L2 Subdev

RK平台Camera驱动遵循Linux标准框架,核心是CIS驱动Sensor驱动),基于I2C总线(Sensor与主控通信)和V4L2 Subdev(与上层框架交互),关键组成如下:

核心组件

作用

struct i2c_driver

I2C驱动结构体,定义probe(设备匹配)、remove(设备卸载)、匹配表等

struct v4l2_subdev_ops

V4L2子设备操作集,包含core(电源/ IOCTL)、video(流控制)、pad(格式)

关键API

set_fmt(设输出格式)、get_fmt(获格式)、s_stream(启停流)等

比如i2c_driver的示例代码(简化):

staticconststructof_device_id os04a10_of_match[] = {  { .compatible ="ovti,os04a10"},// 与DTS匹配  {},};staticstructi2c_driver os04a10_i2c_driver = {  .driver = {    .name ="os04a10",    .of_match_table = os04a10_of_match,  },  .probe = os04a10_probe,// 设备匹配成功后执行  .remove= os04a10_remove,};module_i2c_driver(os04a10_i2c_driver);

3.必掌握:核心技术概念

搞懂这些概念,才能应对复杂场景(如HDR、多摄):

1HDR模式:高动态范围成像

RKISP支持2帧(RK3568)或3帧(RV1126/RK3588HDR合成,原理是采集不同曝光时间的帧(短帧-欠曝、中帧-正常、长帧-过曝),通过ISP合成高动态范围图像,数据链路如下:

wKgZO2kajD-AVIIoAAA3DDqAAnM180.jpg

2RAW存储格式:紧凑vs非紧凑

RAWSensor输出的原始数据,存储格式影响内存占用和处理效率:

非紧凑型10bit/12bit数据按16bit存储(高位对齐),内存占用高,但处理简单,适用于VICAP采集(如RV1126 DVP仅支持非紧凑);

紧凑型12bit数据按8bit紧凑存储(4字节存3个像素),内存占用低,适用于ISP直接处理。

3)多摄同步(RK3588专属)

RK3588支持多摄同步,解决多Sensor数据时序不一致问题,主要有两种模式:

Master-Slave:从设备等待主设备的同步信号,仅收到信号才输出数据;

Master-Master:主设备发送同步信号,从设备独立输出,收到信号后同步(支持当前帧完成后同步或立即同步)。

核心知识点脑图

为了方便记忆,整理成脑图如下:

wKgZO2kajD-AUz3BAAIGnE2OpGs986.png

二、RK Camera实战调试方法

开发中遇到“Camera不识别”“预览闪烁”“图像发紫等问题,掌握以下调试方法,能快速定位问题。

1.必备工具:media-ctl + v4l2-ctl

这两个工具是RK Camera调试的左右手,前者管理媒体拓扑,后者操作视频设备。

1media-ctl:查看/配置拓扑

# 1. 查看media设备拓扑(X为0/1/2,需枚举)media-ctl -p -d /dev/mediaX# 示例输出:会显示Sensor→MIPI→ISP的链路,确认是否“ENABLED”# 2. 设置Sensor输出格式(如OS04A10设2688x1520,RAW12)media-ctl -d /dev/media0 --set-v4l2'"os04a10 1-0036":0[fmt:SBGGR12_1X12/2688x1520]'# 3. 切换ISP数据链路(如从ISPP切到MainPath抓RAW)media-ctl -l'"rkisp-isp-subdev":2->"rkisp_mainpath":0[1]'

2v4l2-ctl:抓帧/设控制参数

# 1. 抓RAW图(设分辨率、格式,保存到/tmp)v4l2-ctl -d /dev/video0 --set-fmt-video=width=2688,height=1520,pixelformat=RG10 --stream-mmap=4 # 4个MMAP缓存--stream-count=1 # 抓1帧--stream-to=/tmp/cap.raw # 保存路径--stream-skip=2# 跳过前2帧(避免初始帧异常)# 2. 设置曝光和增益(需先找到Sensor的subdev节点,如/dev/v4l-subdev4)v4l2-ctl -d /dev/v4l-subdev4 --set-ctrl'exposure=1216,analogue_gain=10'# 3. 查看支持的控制参数v4l2-ctl -d /dev/v4l-subdev4 --list-ctrls

2. Debug信息:定位问题的线索

遇到问题先看日志,RK提供了多个Debug入口:

1)查看proc文件

proc文件包含ISP/VICAP的实时状态,比如:

# 查看ISP状态(帧号、格式、模块开关)cat/proc/rkisp0# 查看VICAP状态(输入格式、帧率、中断统计)cat/proc/rkcif_mipi_lvds

示例输出关键信息:

Input Format:SGBRG10_1X10 Size:2688x1520@30fps:输入格式和帧率;

ErrCnt:0:无错误中断,若不为0,可能是MIPI链路异常;

HDRTMO ONHDR TMO模块已开启。

2寄存器Dump

若怀疑硬件配置问题,可Dump ISP/VICAP寄存器:

# RV1126 Dump ISP寄存器(地址0xffb50000,长度0x10000)io-4-l0x100000xffb50000 > /tmp/isp.reg# RK3568 Dump ISP寄存器io-4-l0x100000xfdff0000 > /tmp/isp.reg

3)开启驱动日志

# 开启ISP驱动日志(n=0~3,3级最详细)echo3 > /sys/module/video_rkisp/parameters/debug# 开启ISPP驱动日志echo3 > /sys/module/video_rkispp/parameters/debug# 查看日志dmesg | grep -i"rkisp"

3.常见问题排查:实战案例

1)问题1:预览闪烁

排查步骤

1.开启AE日志AE(自动曝光)异常是闪烁的常见原因,开启日志查看统计值:

exportpersist_camera_engine_log=0x1ff3# 开启AE logrkisp_demo# 运行测试程序

1.分析日志

TmoMeanLumaTMO合成后亮度)跳变,是TMO参数不匹配,需调整IQ参数;

MeanLuma稳定但画面闪烁,是ISP后处理模块问题,需联系瑞芯微工程师

time(曝光时间)和gain(增益)同时变化,检查生效帧配置(如sensortime通常n+2帧生效,需在IQ文件中设置time_delay=2)。

1.测试线性度:若gain线性度差,会导致亮度跳变,测试方法:

盖毛玻璃(均匀入光),固定gain=1,抓10ms/20ms/30msRAW图;

统计亮度值,减去黑电平(镜头遮黑抓图),若亮度与曝光时间成直线,线性度正常。

2)问题2:光源处紫色溢出

排查步骤

1.线性模式:检查gain值是否超Sensor手册限制(如驱动换算的gain寄存器值是否合法);

2.HDR模式

查看内核日志是否有MIPI报错(dmesg | grep -i "mipi err"),若有是短帧偏移导致合成错位;

确认短帧曝光是否超限制(如某sensor短帧最大2ms,若IQ配置3ms,实际仅2ms生效,导致合成ratio异常)。

调试流程图

wKgZO2kajD-ATDsbAAChqUld74o293.jpg

4.实用技巧

单独更新驱动:无需重新编译内核,生成补丁后应用:

# 生成补丁(A=老版本commit,B=新版本commit)git format-patch A..B drivers/media/... -o tmp_patch# 应用补丁git am tmp_patch/*

查看驱动版本

cat/sys/module/video_rkisp/parameters/version

判断ISP加载状态

# 查看video节点名称,确认RKISP节点grep''/sys/class/video4linux/video*/name# 查看拓扑是否正常media-ctl -p -d /dev/mediaX

三、总结与资源推荐

开发要点总结

1.硬件层面:明确芯片的VI模块能力(如RK3588的多摄同步),理清Sensor→VICAP→ISP的数据链路;

2.软件层面DTS配置要注意compatibledata-lanes等关键参数,驱动遵循I2C+V4L2 Subdev框架;

3.调试层面:先用media-ctl/v4l2-ctl验证链路,再通过proc日志和寄存器定位问题,常见问题优先查AE日志和参数限制。

参考资源

官方文档:《Rockchip_Driver_Guide_VI_CN》(本文基于v1.1.1版本);

希望这篇文章能帮你快速上手RK平台Camera开发!如果有其他问题,欢迎在评论区交流~

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    88

    文章

    11807

    浏览量

    219512
  • 瑞芯微
    +关注

    关注

    27

    文章

    841

    浏览量

    54647
  • Camera
    +关注

    关注

    1

    文章

    85

    浏览量

    22313
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    第18章 BSD Sockets基础知识

    最新网络教程第18章简介本章节为大家讲解BSD Sockets,需要大家对BSD Sockets有个基础的认识,方便后面章节Socket实战操作。 (本章的知识点主要整理自网络)18.1 初学者重要
    发表于 11-08 17:29

    第29章 NTP网络时间协议基础知识

    章节的实战操作。(本章的知识点主要整理自网络)29.1 初学者重要提示29.2 NTP基础知识参考资料29.3 NTP基础知识点 29.4 SNTP
    发表于 11-27 16:47

    第31章 Telnet远程登录基础知识

    转帖 本章节为大家讲解Telnet (Teletype Network) 的基础知识,方便后面章节的实战操作。(本章的知识点主要整理自网络)31.1 初学者重要提示31.2 Telnet基础知
    发表于 11-30 08:15

    第33章 SMTP简单邮件传输协议基础知识

    转帖 本章节为大家讲解SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)的基础知识,方便后面章节的实战操作。 (本章的知识点主要整理自网络)33.1 初学者重要提示33.2 SMTP
    发表于 12-10 08:52

    绝对好货 LABVIEW入门实战开发100例

    LABVIEW入门实战开发100例简介:《LabVIEW入门实战开发100例》全书
    发表于 08-03 23:10

    初级小白实战资料,零基础入门rk3399平台下linux4.4+android8.1开发

    app应用再到控制硬件设备,从上到下全链路打通知识点,让大家彻底搞懂一个完整的基于RK3399平台下Linux4.4+Android8.1的嵌入式系统是如何打造出来的。直播大纲:1. 认识嵌入式
    发表于 07-27 17:53

    关于Arduino入门必备基础知识点总结的太棒了

    关于Arduino入门必备基础知识点总结的太棒了
    发表于 09-26 06:12

    嵌入式开发入门知识点大合集

    嵌入式开发八大入门知识点
    发表于 11-16 06:33

    电力基础知识点合集

    电力基础知识点合集
    发表于 03-14 16:35 0次下载

    详解射频微波基础知识点

    详解射频微波基础知识点
    的头像 发表于 01-29 10:28 3498次阅读

    javaweb入门实战

    的学习和实践。本文将为大家详述JavaWeb的入门以及实战经验,希望能帮助到正在追求JavaWeb技术的开发者。 入门 1.1 Java基础知识
    的头像 发表于 12-03 11:44 2324次阅读

    【北京迅为】iTOP-RK3568OpenHarmony系统南向驱动开发GPIO基础知识

    【北京迅为】iTOP-RK3568OpenHarmony系统南向驱动开发GPIO基础知识
    的头像 发表于 03-06 11:23 1394次阅读
    【北京迅为】iTOP-<b class='flag-5'>RK</b>3568OpenHarmony系统南向驱动<b class='flag-5'>开发</b>GPIO<b class='flag-5'>基础知识</b>

    一文吃透RK平台OTA升级开发逻辑到调试的完整指南

    ,能让开发者高效解决固件更新、功能迭代等问题。本文将从升级逻辑、核心技巧、调试点到问题排查,全方位拆解 RK 平台 OTA 升级
    的头像 发表于 02-09 16:26 689次阅读
    一文吃透<b class='flag-5'>RK</b><b class='flag-5'>平台</b>OTA升级<b class='flag-5'>开发</b>:<b class='flag-5'>从</b>逻辑到<b class='flag-5'>调试</b>的完整指南

    RK平台Linux IOMMU开发原理到实战

    显示(VOP)、编解码(VPU/HEVC)等场景。今天就从原理、驱动、实战、问题排查、Linux 内存管理支撑五个维度,带大家快速上手 RK 平台 IOMMU 开发
    的头像 发表于 02-04 16:24 2668次阅读
    <b class='flag-5'>RK</b><b class='flag-5'>平台</b>Linux IOMMU<b class='flag-5'>开发</b>:<b class='flag-5'>从</b>原理到<b class='flag-5'>实战</b>

    RK 平台 Vendor Storage 开发指南:基础知识、流程与实用技巧

    在瑞芯微(RK平台的嵌入式开发中,vendor_storage 是一个核心模块,专门用于存储 SN(序列号)、MAC 地址、DRM 密钥等厂商专属数据。它不仅提供了跨环境的数据读写能力,还具
    的头像 发表于 11-22 07:11 1133次阅读
    <b class='flag-5'>RK</b> <b class='flag-5'>平台</b> Vendor Storage <b class='flag-5'>开发</b>指南:<b class='flag-5'>基础知识</b>、流程与实用技巧