
OrangePi 5 开发板补齐 OV13855 JSON 和 3A 算法全过程笔记先放上前后对比图片3A算法启动前3A算法启动后之前偏绿是因为缺少 RKAIQ/3A 和正确 IQ 文件启动 3A 后颜色、曝光、白平衡明显改善。相机实现自动白平衡,自动曝光等功能,最重要的是ov13855_CMK-OT2016-FV1_default.json文件和rkaiq_3A_server程序.这两个文件都属于瑞芯微 (Rockchip)平台的摄像头处理框架RKAIQ (Rockchip AIQ)。它们共同负责摄像头的图像信号处理ISP和 3A 算法自动曝光、自动白平衡、自动对焦的运行。1.ov13855_CMK-OT2016-FV1_default.json这是一个摄像头效果配置文件通常被称为IQ 文件或Tuning 文件。文件名解析ov13855代表摄像头的传感器型号OmniVision 13855一款1300万像素的传感器。CMK-OT2016-FV1代表摄像头模组的厂家和型号以及搭配的镜头信息。.json文件格式内部存储了大量的配置参数。主要作用参数库它存储了针对该特定摄像头硬件感光芯片 镜头调试出的最优参数。3A 初始化包含 AE自动曝光的亮度目标、AWB自动白平衡的色温曲线、AF自动对焦的搜索步长等。图像增强包含降噪NR、锐化、去畸变LSC、色彩校正CCM等 ISP 模块的配置参数。适配性如果没有这个文件或者文件不匹配摄像头虽然可能出图但会出现画面偏色、亮度异常、对焦模糊等问题。2.rkaiq_3A_server这是一个用户态服务程序Daemon/Server是整个摄像头引擎的核心运行实体。主要作用算法引擎它负责运行 3A 算法逻辑。它从内核ISP 驱动获取统计数据如画面亮度、色彩分布计算出下一步的曝光时间、增益和白平衡参数。加载配置在启动时它会去扫描系统目录通常是/etc/iqfiles/根据当前接入的摄像头型号加载上述的.json配置文件。硬件通信它充当了上层应用如拍照 App与底层硬件驱动之间的桥梁。它通过 V4L2 接口将计算好的参数下发给 ISP 硬件控制器。实时调试它通常还支持调试功能可以配合 PC 端的瑞芯微调试工具RKISP Tuner实时修改图像效果。两者的关系简单来说ov13855...json是“乐谱”记录了声音图像应该如何表现。rkaiq_3A_server是“演奏者”他读取乐谱并根据实际情况环境光线变化实时调整演奏方式最终产生清晰、准确的视频画面。常见应用场景如果你在开发基于 RK3568、RK3588 等芯片的嵌入式设备当你更换了不同型号的摄像头模组时就需要将对应的.json文件放到指定位置并确保rkaiq_3A_server正常运行否则摄像头将无法达到最佳显示效果。0. 问题背景开发板使用 OV13855 摄像头设备树中已经有ov1385536 { compatible ovti,ov13855; status okay; };但板子中最初只有/etc/iqfiles/ov13850_CMK-CT0116_default.json缺少 OV13855 对应 IQ 文件ov13855_CMK-OT2016-FV1_default.json同时板子中最初也没有rkaiq_3A_server所以问题不是单纯缺 JSON而是缺 OV13855 IQ 文件 缺 RKAIQ/3A 用户态程序一、确认运行时设备树中确实有 OV138551. 导出运行时设备树一开始在/boot/dtb/rockchip/overlay目录执行sudodtc-Ifs-Odts /proc/device-treerunning.dts报错bash: running.dts: Permission denied报错原因sudo只作用于dtc但重定向是普通用户执行的并且当前目录/boot/dtb/rockchip/overlay普通用户无写权限。解决方式切换到用户目录导出cd~sudodtc-Ifs-Odts /proc/device-treerunning.dts然后查 OV13855grep-nov13855running.dts查模组名和镜头名grep-ncamera-module-name\|camera-module-lens-namerunning.dts确认设备树中有compatible ovti,ov13855; rockchip,camera-module-name CMK-OT2016-FV1; rockchip,camera-module-lens-name default;因此 IQ 文件名应为ov13855_CMK-OT2016-FV1_default.json二、确认 OV13855 是通过 overlay 启用的这个部分我单独写了一篇笔记记录:查看启动配置cat/boot/orangepiEnv.txtorangepiEnv.txt里面的内容是我通过orangepi-config修改的输出中有fdtfilerockchip/rk3588s-orangepi-5.dtb overlaysi2c3-m0 lcd2 ov13855-c3 pwm15-m2说明当前系统启动时加载了rk3588-ov13855-c3.dtbo所以运行时设备树是基础 DTB i2c3-m0 overlay lcd2 overlay ov13855-c3 overlay pwm15-m2 overlay /proc/device-tree 中的最终运行时设备树三、从.img镜像中查找 OV13855 JSON原因:我ubuntu里面下载的SDK版本里面没有OV13855 JSON思路:找一个发布时间比较近的ubuntu镜像,在.img文件中尝试提取OV13855 JSON(不一定有)1. 绑定镜像虚拟机中执行IMGOrangepi5_1.2.2_ubuntu_jammy_desktop_gnome_linux5.10.160.imgsudolosetup-Pf--show$IMG输出/dev/loop1查看分区lsblk /dev/loop1你的镜像只有一个分区/dev/loop1p12. 挂载镜像sudomkdir-p/mnt/opirootsudomount-oro /dev/loop1p1 /mnt/opiroot3. 查找 JSON精确查找sudofind/mnt/opiroot-inameov13855_CMK-OT2016-FV1_default.json扩大查找sudofind/mnt/opiroot-iname*ov13855*.json查所有 IQ 文件sudofind/mnt/opiroot-path*iqfiles*-typef-iname*.json后来你在 SDK 中找到了ov13855_CMK-OT2016-FV1_default.json四、把 OV13855 JSON 拷到开发板在开发板上确认/etc/iqfiles存在ls/etc/iqfiles然后复制 JSONsudomkdir-p/etc/iqfilessudocpov13855_CMK-OT2016-FV1_default.json /etc/iqfiles/sudochmod644/etc/iqfiles/ov13855_CMK-OT2016-FV1_default.jsonsync验证ls-lh/etc/iqfiles/ov13855_CMK-OT2016-FV1_default.json你后来的输出是-rw-r--r-- 1 root root 346K May 15 09:34 /etc/iqfiles/ov13855_CMK-OT2016-FV1_default.json说明 JSON 已经放好。五、检查开发板是否有 3A 程序在开发板上查sudofind/-namerkaiq_3A_server2/dev/null没有结果。继续查sudofind/-iname*rkaiq*2/dev/nullsudofind/-iname*aiq*2/dev/nullsudofind/-iname*3a*2/dev/null也没有有效的 RKAIQ/3A 程序。再查 RKISPsudofind/-iname*rkisp*2/dev/null结果能看到/usr/lib/librkisp.so /sys/devices/platform/fdcc0000.rkisp /sys/devices/platform/fdcb0000.rkisp /sys/module/video_rkisp /dev/v4l/by-path/platform-rkisp1-vir0-video-index*进程检查ps-ef|grep-Eirkaiq|aiq|3a|rkisp只有grep本身。开发板上没有找到rkaiq_3A_serve分析这说明RKISP 内核驱动存在 但 RKAIQ/3A 用户态程序不存在所以只放 JSON 不够必须补上rkaiq_3A_server librkaiq.so你上传的搜索结果也显示板端未找到rkaiq_3A_server、rkaiq、aiq但存在 rkisp 相关内核设备和节点。六、从.img镜像中提取 rkaiq_3A_server虚拟机中执行sudofind/mnt/opiroot-namerkaiq_3A_server找到/mnt/opiroot/usr/bin/rkaiq_3A_server确认架构file/mnt/opiroot/usr/bin/rkaiq_3A_server输出ELF 64-bit LSB pie executable, ARM aarch64说明它可以在 OrangePi 5 上运行。查看依赖readelf-d/mnt/opiroot/usr/bin/rkaiq_3A_server|grepNEEDED输出包含Shared library: [librkaiq.so] Shared library: [libpthread.so.0] Shared library: [libdl.so.2] Shared library: [libstdc.so.6] Shared library: [libm.so.6] Shared library: [libgcc_s.so.1] Shared library: [libc.so.6] Shared library: [ld-linux-aarch64.so.1]在开发板上查找依赖重点缺的是librkaiq.so七、复制 3A 程序到开发板虚拟机执行scp/mnt/opiroot/usr/bin/rkaiq_3A_server orangepi开发板IP:/home/orangepi/开发板执行sudocp~/rkaiq_3A_server /usr/bin/sudochmodx /usr/bin/rkaiq_3A_server八、解决 librkaiq.so 缺失问题1. 开发板检查依赖ldd /usr/bin/rkaiq_3A_server最初报错librkaiq.so not found报错原因rkaiq_3A_server是动态链接程序运行时需要librkaiq.so但开发板系统中没有这个库。2. 在镜像中查找库虚拟机执行sudofind/mnt/opiroot-namelibrkaiq.so*找到后复制到开发板scp/mnt/opiroot/实际路径/librkaiq.so* orangepi开发板IP:/home/orangepi/3. 开发板安装库sudocp~/librkaiq.so* /lib/aarch64-linux-gnu/sudochmod644/lib/aarch64-linux-gnu/librkaiq.so*sudoldconfig再次检查ldd /usr/bin/rkaiq_3A_server后来的输出变为librkaiq.so /lib/aarch64-linux-gnu/librkaiq.so说明依赖已经解决。九、启动 rkaiq_3A_server 时遇到参数错误你执行sudo/usr/bin/rkaiq_3A_server-a/etc/iqfiles报错/usr/bin/rkaiq_3A_server: invalid option -- a ERR: Usage: /usr/bin/rkaiq_3A_server to start 3A engine --silent, optional, subpress debug log命令行前面是一个蓝色实心的圆说明指令执行成功;如果是一个红色空心圆,里面是红×说明执行失败.报错原因这个版本的rkaiq_3A_server不支持-a/etc/iqfiles它只支持直接启动或者加--silent它大概率默认从固定路径读取 IQ 文件例如/etc/iqfiles/十、正确启动 3A 程序前台启动sudo/usr/bin/rkaiq_3A_server如果程序不退出说明正在运行。后台启动sudo/usr/bin/rkaiq_3A_server静默后台启动sudo/usr/bin/rkaiq_3A_server--silent带日志启动推荐排错用sudosh-c/usr/bin/rkaiq_3A_server /tmp/rkaiq.log 21 查看日志cat/tmp/rkaiq.log检查进程ps-ef|grep-irkaiq如果看到/usr/bin/rkaiq_3A_server说明 3A 服务已经运行。十一、最终验证 ISP / 3A 是否生效1. 检查 OV13855 IQ 文件ls-lh/etc/iqfiles/ov13855_CMK-OT2016-FV1_default.json2. 检查 3A 进程ps-ef|grep-irkaiq3. 检查 media 链路media-ctl-p|grep-iEov13855|rkisp|rkcif|mipi|csi4. 检查日志dmesg|grep-Eiov13855|rkisp|rkcif|mipi|csi|rkaiq|iq5. 测试采集画面gst-launch-1.0 v4l2srcdevice/dev/video11!video/x-raw,formatNV12,width1280,height720!videoconvert!autovideosink使用3A算法后使用3A算法前之前偏绿是因为缺少 RKAIQ/3A 和正确 IQ 文件启动 3A 后颜色、曝光、白平衡明显改善。十二、当前最终状态总结已经完成1. 确认运行时设备树中有 OV13855 2. 确认模组名是 CMK-OT2016-FV1 3. 找到对应 IQ 文件 ov13855_CMK-OT2016-FV1_default.json 4. 拷贝 IQ 文件到 /etc/iqfiles/ 5. 从 .img 中提取 rkaiq_3A_server 6. 从 .img 中提取并安装 librkaiq.so 7. 解决 ldd 中 librkaiq.so not found 问题 8. 明确当前 rkaiq_3A_server 不支持 -a 参数现在正确启动命令是sudo/usr/bin/rkaiq_3A_server--silent然后验证ps-ef|grep-irkaiq gst-launch-1.0 v4l2srcdevice/dev/video11!video/x-raw,formatNV12,width1280,height720!videoconvert!autovideosink核心结论OV13855 设备树有了IQ JSON 有了3A 程序和依赖库也补齐了。 接下来只需要用正确方式启动 rkaiq_3A_server并验证画面效果。