RK平台Sensor驱动框架与MIPI CSI接口实战工程 - 第1节
1. RK平台概述
Rockchip(瑞芯微)是国内领先的SoC设计公司,其芯片广泛应用于AIoT、平板、智能显示、工业控制及车载领域。在Sensor与MIPI CSI驱动开发中,我们主要关注带有ISP(图像信号处理器)或支持MIPI CSI接口的芯片。
1.1.1 主流RK芯片产品线
| 系列 | 代表型号 | CPU架构 | ISP能力 | MIPI CSI Lane | 典型应用 |
|---|---|---|---|---|---|
| RK35xx | RK3588 / RK3568 / RK3566 | Cortex-A76 + A55 | 双ISP,支持HDR、多路拼接 | 4 Lane × 2 | AI摄像头、NVR、平板 |
| RK33xx | RK3399 / RK3326 | Cortex-A72 + A53 | 单ISP,支持基础3A | 4 Lane × 1 | 商显、广告机、入门AI |
| RK21xx | RK2108 / RK2118 | Cortex-M3 + DSP | 轻量ISP,低功耗 | 2 Lane × 1 | 智能门锁、低功耗IPC |
| RV11xx | RV1109 / RV1126 | Cortex-A7 + NPU | 3DNR、WDR | 4 Lane × 1 | AI IPC、车载DVR |
开发选型建议: 对于Sensor驱动开发入门,推荐使用RK3568或RV1126。这两款芯片文档齐全、社区活跃,且具备完整的MIPI CSI + ISP链路,便于调试RAW图和3A流程。
1.1.2 RK芯片Camera子系统架构
RK平台的Camera子系统采用典型的V4L2(Video for Linux 2)框架,硬件上由Sensor、MIPI D-PHY、CSI Host Controller、ISP以及DDR控制器组成。软件上分为用户空间(Camera HAL / 3A库)和内核空间(V4L2驱动、Media Controller)。
1.2 RK Linux SDK架构
RK官方提供的Linux SDK基于Yocto/Buildroot或直接提供完整的Android/Linux BSP。对于Sensor驱动开发,我们主要关注内核源码树中的以下目录结构:
1.2.1 SDK目录结构
RK_LINUX_SDK/
├── kernel/ # Linux内核源码
│ ├── drivers/media/i2c/ # Sensor驱动存放位置
│ ├── drivers/media/platform/rockchip/ # RK平台ISP/CSI驱动
│ ├── arch/arm64/boot/dts/rockchip/ # 设备树文件
│ └── ...
├── u-boot/ # 引导加载程序
├── buildroot/ # 根文件系统构建
├── external/ # 第三方库与工具
│ ├── rkisp_3a/ # 3A算法库
│ └── camera_engine/ # Camera引擎
├── device/rockchip/ # 板级配置与HAL层
└── docs/ # 开发文档与数据手册
关键路径说明:
drivers/media/i2c/—— 所有Sensor驱动(如ov5648.c、imx415.c)都放在这里,遵循V4L2 Subdev框架。drivers/media/platform/rockchip/—— RK自研的ISP驱动、CSI Host控制器驱动,负责DMA、MIPI协议解析。arch/arm64/boot/dts/rockchip/—— 设备树中定义Sensor的I2C地址、MIPI Lane映射、时钟频率等硬件拓扑。
1.2.2 驱动分层模型
RK平台的Sensor驱动采用分层设计,从上到下依次为:
- 应用层:Camera App通过V4L2 API调用。
- 框架层:Camera HAL + 3A库,负责ISP参数调节。
- 内核V4L2层:Video Device、Subdev、Media Controller。
- 硬件抽象层:I2C通信、GPIO控制、MIPI D-PHY配置。
- 物理层:Sensor芯片、MIPI总线、时钟晶振。
1.3 RK驱动开发环境搭建
搭建一个高效的RK驱动开发环境是后续实战的基础。下面以RK3588 EVB + Ubuntu 22.04主机为例,给出标准搭建流程。
1.3.1 硬件准备清单
| 组件 | 推荐型号/规格 | 备注 |
|---|---|---|
| 开发板 | RK3588 EVB / RK3568 EVB | 必须带有MIPI CSI接口 |
| Sensor模组 | OV5648 / IMX415 / SC2336 | 优先选RK官方支持的型号 |
| 调试工具 | USB转UART模块、逻辑分析仪 | 用于打印和MIPI信号分析 |
| 电源 | 12V/3A DC适配器 | 确保供电稳定 |
| 主机 | Ubuntu 22.04 x86_64 | 至少16GB RAM,200GB磁盘 |
1.3.2 主机开发环境配置
在Ubuntu主机上安装必要的工具链和依赖包:
# 更新系统
sudo apt update && sudo apt upgrade -y
# 安装基础编译工具
sudo apt install -y git make gcc g++ gawk flex bison \
libssl-dev libncurses-dev u-boot-tools
# 安装交叉编译工具链 (aarch64)
sudo apt install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
# 安装SDK管理工具
sudo apt install -y repo python3 python3-pip device-tree-compiler
# 安装调试工具
sudo apt install -y minicom picocom screen
常见踩坑点:
- 交叉编译器版本必须与SDK要求的版本一致,否则内核模块可能无法加载。RK SDK通常使用
gcc-arm-10.3-2021.07或更新版本。 - 如果使用repo同步SDK,请确保网络稳定,建议使用国内镜像源。
1.3.3 SDK获取与编译
以RK官方Linux SDK为例,通过repo获取完整源码:
# 创建工作目录
mkdir rk3588_sdk && cd rk3588_sdk
# 初始化repo (使用官方manifest)
repo init -u https://github.com/rockchip-linux/manifests.git \
-b linux-5.10-gen-rkr4.1
# 同步源码 (耗时较长)
repo sync -c -j8
# 编译内核 (以RK3588 EVB为例)
cd kernel
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-
make rockchip_linux_defconfig
make rk3588-evb1-lp4-v10.img -j$(nproc)
1.3.4 烧录与调试
编译完成后,使用RK烧录工具将镜像写入开发板:
# 进入烧录模式 (按住RECOVERY键,上电)
# 使用 rkdeveloptool 或 Windows 端 RKDevTool
# 烧录内核 (以rkdeveloptool为例)
sudo rkdeveloptool db rk3588_spl_loader_v1.08.bin
sudo rkdeveloptool wl 0x00008000 kernel.img
sudo rkdeveloptool rd
# 查看内核启动日志
sudo minicom -D /dev/ttyUSB0 -b 1500000
调试技巧: 在Sensor驱动开发初期,建议在设备树中先关闭ISP,仅使用V4L2 Subdev直接读取Sensor的RAW数据,通过
media-ctl和v4l2-ctl工具验证MIPI链路是否通调。这样可以先排除硬件连接问题,再深入ISP调试。
1.3.5 开发环境验证
搭建完成后,通过以下命令验证环境是否就绪:
# 检查交叉编译器
aarch64-linux-gnu-gcc --version
# 检查内核源码树
ls kernel/drivers/media/i2c/
# 检查设备树编译工具
dtc --version
# 检查串口工具
minicom --version