2. RK平台开发环境搭建:RK SDK获取与编译、RKISP驱动加载、调试工具链安装与配置

在RK平台进行3A算法调试,首要任务是构建一个稳定、可复现的开发环境。本章将系统讲解从SDK获取、内核编译、驱动加载到调试工具链安装的完整流程,确保后续AE与AF联合调试工作能够顺利开展。

环境概览:本章所有操作基于RK3588/RK356x系列平台,SDK版本为RK Linux SDK v2.0+,Host PC推荐使用Ubuntu 20.04/22.04 LTS x86_64系统。

2.1 RK SDK获取与编译

RK SDK是开发的基础,包含U-Boot、Kernel、Buildroot/Ubuntu根文件系统以及ISP驱动源码。获取方式分为官方Release包和Git仓库同步两种途径。

2.1.1 SDK获取方式对比

方式 命令/操作 适用场景 注意事项
官方Release包 wget http://网址/RK3588_LINUX_SDK_V2.0.0.tar.gz 首次搭建、稳定基线 需解压后执行.repo/repo/repo sync -l
Git仓库同步 repo init -u ssh://git@网址/manifests -b master
repo sync -c -j8
持续开发、获取最新 需配置SSH Key,网络要求高
关键步骤:获取SDK后,务必执行.repo/repo/repo sync -l将远端仓库与本地manifest对齐,否则后续编译可能因文件缺失而失败。

2.1.2 SDK目录结构

完整的SDK目录结构如下,其中加粗部分为ISP调试核心目录:

RK3588_LINUX_SDK_V2.0.0/
├── u-boot/                 # Bootloader
├── kernel/                 # Linux内核(含RKISP驱动)
│   ├── drivers/media/platform/rockchip/isp/   # ISP驱动源码
│   └── arch/arm64/boot/dts/rockchip/          # 设备树文件
├── buildroot/              # 根文件系统构建
├── external/               # 外部库与工具
│   └── rkisp_tuner/        # ISP调优工具源码
├── device/rockchip/        # 板级配置
└── rkbin/                  # 固件与二进制文件

2.1.3 SDK编译流程

编译分为全自动编译和分步编译两种模式。推荐初次使用全自动编译,后续调试阶段使用分步编译以节省时间。

  1. 环境准备:安装依赖包
    sudo apt-get update
    sudo apt-get install repo git-core gitk git-gui gcc-arm-linux-gnueabihf u-boot-tools device-tree-compiler mtools parted libssl-dev dosfstools
  2. 全自动编译(首次使用)
    cd RK3588_LINUX_SDK_V2.0.0
    ./build.sh lunch     # 选择板型,如rk3588-evb1-lp4-v10
    ./build.sh           # 全自动编译,生成完整固件
  3. 分步编译(调试阶段)
    # 仅编译内核与设备树
    cd kernel
    make ARCH=arm64 rockchip_linux_defconfig
    make ARCH=arm64 rk3588-evb1-lp4-v10.img -j8
    
    # 仅编译U-Boot
    cd ../u-boot
    make rk3588_defconfig
    make -j8
  4. 固件打包
    ./build.sh updateimg   # 生成 update.img 用于烧录
常见编译错误:若编译过程中出现scripts/config/conf: not found,请执行make ARCH=arm64 mrproper后重新make defconfig。若出现dtc: invalid option -- '@',请升级device-tree-compiler至1.6.0以上版本。
RK SDK编译流程 RK SDK编译流程 SDK获取 环境配置 全自动编译 分步编译 固件打包 烧录验证 首次使用推荐 调试阶段推荐

2.2 RKISP驱动加载与验证

RKISP驱动是3A算法运行的底层支撑。驱动加载分为内核编译阶段和运行时阶段,需要确保设备树配置正确、驱动模块加载成功。

2.2.1 设备树配置

设备树(DTS)是RKISP驱动加载的关键。以RK3588 EVB1为例,核心配置如下:

// kernel/arch/arm64/boot/dts/rockchip/rk3588-evb1-lp4-v10.dts
&rkisp0 {
    status = "okay";
    rockchip,isp-subdev = <&csi2_dphy0>;
    port {
        isp0_in: endpoint {
            remote-endpoint = <&csi2_dphy0_out>;
        };
    };
};

&rkisp1 {
    status = "okay";
    rockchip,isp-subdev = <&csi2_dphy1>;
    port {
        isp1_in: endpoint {
            remote-endpoint = <&csi2_dphy1_out>;
        };
    };
};

&csi2_dphy0 {
    status = "okay";
    ports {
        #address-cells = <1>;
        #size-cells = <0>;
        port@0 {
            reg = <0>;
            csi2_dphy0_in: endpoint {
                remote-endpoint = <&sensor_out>;
                data-lanes = <1 2 3 4>;
            };
        };
    };
};
关键检查点:编译内核后,在arch/arm64/boot/dts/rockchip/目录下检查生成的.dtb文件是否包含rkisp0和rkisp1节点。使用fdtdump工具可查看dtb内容。

2.2.2 驱动加载验证

板卡启动后,通过以下命令验证ISP驱动是否加载成功:

# 检查ISP设备节点
ls -l /dev/video* | grep isp
# 预期输出:crw-rw---- 1 root video 81, 0 Jan 1 00:00 /dev/video0  (rkisp_mainpath)
#          crw-rw---- 1 root video 81, 1 Jan 1 00:00 /dev/video1  (rkisp_selfpath)

# 检查驱动模块
lsmod | grep rkisp
# 预期输出:rkisp_common       16384  0
#          video_rkisp        45056  0

# 检查媒体拓扑
media-ctl -d /dev/media0 -p
# 预期输出应包含 rkisp-isp-subdev 和 sensor 实体

2.2.3 驱动加载故障排查

现象 可能原因 解决方案
/dev/video*无ISP节点 设备树未使能ISP或CSI接口 检查DTS中status = "okay"配置
lsmod无rkisp模块 内核未编译ISP驱动 执行make menuconfig,确认CONFIG_VIDEO_ROCKCHIP_ISP为y或m
media-ctl无sensor实体 sensor驱动未加载或I2C通信异常 检查i2cdetect -y <bus>确认sensor地址
ISP流错误-22 数据通道配置不匹配 核对data-lanes与sensor输出能力
RKISP驱动加载架构 RKISP驱动加载架构 硬件层 Sensor + CSI + ISP 驱动层 rkisp_common + video_rkisp 设备节点层 /dev/video0 /dev/video1 用户空间层 RKISP_Tuner / 3A算法 设备树配置 DTS → DTB → 内核解析

2.3 调试工具链安装与配置

调试工具链是AE与AF联合调试的“眼睛”和“手”。核心工具包括RKISP_Tuner(ISP调优工具)和ADB(Android Debug Bridge,用于嵌入式Linux调试)。

2.3.1 RKISP_Tuner安装与配置

RKISP_Tuner是RK官方提供的ISP调试工具,支持实时参数调整、3A算法配置和图像质量分析。

  1. 获取安装包:从RK官方Release页面下载RKISP_Tuner_v2.x.x_linux.tar.gz,或从SDK的external/rkisp_tuner/目录编译。
  2. 解压安装
    tar -xzf RKISP_Tuner_v2.5.0_linux.tar.gz
    cd RKISP_Tuner_v2.5.0
    sudo ./install.sh
  3. 配置连接参数:编辑config/tuner_config.xml,设置目标板IP和端口。
    <?xml version="1.0" encoding="UTF-8"?>
    <config>
        <device>
            <ip>192.168.1.100</ip>
            <port>8888</port>
            <protocol>tcp</protocol>
        </device>
    </config>
  4. 启动服务端(在目标板上执行)
    # 启动ISP调优服务
    rkisp_tuner_server -p 8888 &
  5. 启动客户端(在Host PC上执行)
    ./rkisp_tuner
连接验证:启动客户端后,观察状态栏是否显示“Connected to device: 192.168.1.100:8888”。若连接失败,使用telnet 192.168.1.100 8888测试网络连通性。

2.3.2 ADB安装与配置

ADB是嵌入式Linux调试的通用工具,用于文件传输、命令执行和日志抓取。

步骤 命令/操作 说明
安装ADB sudo apt-get install adb Ubuntu下直接安装
启动ADB服务 adb start-server Host PC端启动
连接设备 adb connect 192.168.1.100:5555 通过网络连接目标板
验证连接 adb devices 应显示设备序列号
常用调试命令 adb shell
adb push/pull
adb logcat
进入shell、文件传输、日志查看

2.3.3 工具链协同工作流

在实际调试中,RKISP_Tuner和ADB协同工作,形成完整的调试闭环:

  • ADB:负责底层操作,如修改3A算法参数文件、重启ISP服务、抓取内核日志。
  • RKISP_Tuner:负责实时调优,如调整AE目标亮度、AF搜索步长、查看直方图和统计信息。
  • 协同流程:通过ADB将调优后的参数文件推送到目标板,重启ISP服务后,使用RKISP_Tuner验证效果。
高效调试技巧:在Host PC上编写自动化脚本,同时调用ADB和RKISP_Tuner的CLI接口,实现参数批量测试和结果自动记录。例如,使用adb shell "echo $value > /sys/class/isp/param"快速调整参数。
调试工具链协同工作流 调试工具链协同工作流 Host PC RKISP_Tuner 客户端 ADB 客户端 网络连接 TCP/IP 或 USB 端口8888 / 5555 Target Board rkisp_tuner_server ADB daemon 协同工作流 ADB推送参数文件 → 重启ISP服务 → RKISP_Tuner实时验证 → 循环迭代 ADB抓取日志 → 分析3A算法行为 → 调整参数 → 再次验证

2.4 环境验证与常见问题

完成上述步骤后,执行以下验证脚本,确保环境就绪:

#!/bin/bash
# environment_check.sh
echo "=== RK Development Environment Check ==="

# 1. 检查SDK编译
if [ -f kernel/arch/arm64/boot/Image ]; then
    echo "[OK] Kernel compiled"
else
    echo "[FAIL] Kernel not compiled"
fi

# 2. 检查ISP驱动
if ls /dev/video* 2>/dev/null | grep -q video; then
    echo "[OK] ISP device nodes exist"
else
    echo "[FAIL] No ISP device nodes"
fi

# 3. 检查RKISP_Tuner
if command -v rkisp_tuner &> /dev/null; then
    echo "[OK] RKISP_Tuner installed"
else
    echo "[FAIL] RKISP_Tuner not found"
fi

# 4. 检查ADB
if command -v adb &> /dev/null; then
    echo "[OK] ADB installed"
    adb devices | grep -q "device" && echo "[OK] Device connected" || echo "[WARN] No device connected"
else
    echo "[FAIL] ADB not installed"
fi

echo "=== Check Complete ==="
常见问题速查:
  • SDK编译失败:检查磁盘空间(至少50GB)、内存(至少8GB)、网络连接。
  • ISP驱动加载失败:确认设备树中status = "okay",检查dmesg | grep isp查看错误信息。
  • RKISP_Tuner连接失败:检查防火墙设置,确认目标板rkisp_tuner_server进程是否运行。
  • ADB连接不稳定:尝试更换USB线缆或使用网络连接(adb connect),避免Wi-Fi干扰。