4. 开发环境搭建:SDK获取、交叉编译工具链、内核配置、设备树编译
在开始 RK3588 MIPI DSI 显示驱动移植之前,必须搭建一套完整、可复现的开发环境。本章将引导你完成 SDK 获取、交叉编译工具链安装、内核配置以及设备树编译的全流程。环境搭建的规范性直接影响后续调试效率,请务必按步骤操作。
环境概览: 本课程基于 Ubuntu 22.04 LTS(x86_64)宿主机,目标平台为 RK3588 EVB 或自研板卡。所有操作均在非 root 用户下执行,必要时使用
sudo 提权。
4.1 SDK 获取与目录结构
Rockchip 官方提供基于 repo 工具的 SDK 管理方式。SDK 包含 U-Boot、Linux 内核、设备树、根文件系统及工具链等全部源码。
4.1.1 获取 SDK
- 安装 repo 工具:
mkdir -p ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
export PATH=~/bin:$PATH
- 初始化 SDK 仓库:
mkdir rk3588_sdk && cd rk3588_sdk
repo init -u https://github.com/rockchip-linux/manifests -b master -m rk3588_linux_release.xml
repo sync -c --no-tags -j4
网络提示: 国内开发者建议使用 Gitee 镜像加速,将 manifest 仓库地址替换为
https://gitee.com/rockchip-linux/manifests。同步过程可能耗时 30-60 分钟,请保持网络稳定。
4.1.2 SDK 目录结构
同步完成后,SDK 根目录结构如下表所示:
| 目录/文件 | 说明 |
|---|---|
kernel/ |
Linux 内核源码(5.10 / 6.1 LTS) |
u-boot/ |
U-Boot 引导程序源码 |
device/rockchip/ |
板级设备树(.dts / .dtsi)及配置文件 |
external/ |
第三方库与工具(如 rkbin、drm 库) |
buildroot/ |
Buildroot 根文件系统构建框架 |
prebuilts/ |
预编译工具链与二进制工具 |
rkbin/ |
Rockchip 闭源固件(ATF、DDR 初始化) |
4.2 交叉编译工具链配置
RK3588 基于 ARMv8.2-A 架构,必须使用 aarch64 交叉编译工具链。SDK 的 prebuilts/ 目录已提供预编译版本,推荐直接使用以避免版本兼容问题。
4.2.1 工具链路径设置
将工具链添加到 PATH 环境变量,建议写入 ~/.bashrc 以持久化:
export RK_TOOLCHAIN=~/rk3588_sdk/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu
export PATH=$RK_TOOLCHAIN/bin:$PATH
export CROSS_COMPILE=aarch64-none-linux-gnu-
export ARCH=arm64
验证工具链是否生效:
aarch64-none-linux-gnu-gcc --version
# 输出示例:aarch64-none-linux-gnu-gcc (GCC) 10.3.1 20210621
4.2.2 工具链参数说明
| 环境变量 | 值示例 | 作用 |
|---|---|---|
CROSS_COMPILE |
aarch64-none-linux-gnu- |
指定交叉编译前缀,内核构建系统自动追加 gcc、ld 等 |
ARCH |
arm64 |
指定目标 CPU 架构,影响内核 Kconfig 和 Makefile 行为 |
CC |
${CROSS_COMPILE}gcc |
显式指定 C 编译器(通常由 CROSS_COMPILE 推导) |
避坑指南: 不要使用 Ubuntu 软件源中的
gcc-aarch64-linux-gnu 包(版本通常为 9.x),它与 Rockchip 内核的某些内联汇编和头文件不兼容,会导致编译失败或运行时异常。
4.3 内核配置
内核配置是启用 MIPI DSI 显示驱动的关键步骤。RK3588 使用 defconfig 加 fragment 的方式管理配置,避免直接修改默认配置。
4.3.1 加载基础配置
cd ~/rk3588_sdk/kernel
make ARCH=arm64 rockchip_linux_defconfig
该命令会生成 .config 文件,包含 RK3588 平台的基础支持(如 PCIe、USB、GMAC 等),但显示相关驱动默认未全部开启。
4.3.2 启用 MIPI DSI 相关配置
使用 menuconfig 图形界面或直接编辑 .config 添加以下关键选项:
# 进入图形配置界面
make ARCH=arm64 menuconfig
# 以下为必须启用的配置项(路径与选项名)
# Device Drivers --->
# Graphics support --->
# <*> Rockchip DRM driver
# [*] Rockchip VOP2 support
# <*> Rockchip MIPI DSI controller driver
# <*> DRM panel driver for MIPI DSI panels
# <*> Backlight & LCD device support
也可通过脚本批量验证:
grep -E "CONFIG_DRM_ROCKCHIP|CONFIG_ROCKCHIP_VOP2|CONFIG_DRM_ROCKCHIP_MIPI_DSI|CONFIG_DRM_PANEL" .config
预期输出应包含以下内容:
CONFIG_DRM_ROCKCHIP=y
CONFIG_ROCKCHIP_VOP2=y
CONFIG_DRM_ROCKCHIP_MIPI_DSI=y
CONFIG_DRM_PANEL_SIMPLE=y
4.3.3 保存配置
make ARCH=arm64 savedefconfig
cp defconfig arch/arm64/configs/rockchip_linux_defconfig
最佳实践: 建议将显示相关配置单独保存为
display.fragment 文件,后续通过 scripts/kconfig/merge_config.sh 合并,便于版本管理和复用。
4.4 设备树编译
设备树(Device Tree)是描述硬件拓扑和资源配置的核心文件。RK3588 的 MIPI DSI 接口、背光、面板时序等参数均在 .dts / .dtsi 文件中定义。
4.4.1 设备树文件位置
RK3588 相关设备树位于:
~/rk3588_sdk/kernel/arch/arm64/boot/dts/rockchip/
├── rk3588.dtsi # SoC 级通用定义(DSI 控制器、VOP、GRF 等)
├── rk3588-evb1.dtsi # EVB 板级外设定义
├── rk3588-evb1-lp4.dts # EVB 最终设备树(包含面板节点)
└── rk3588s.dtsi # RK3588S 精简版 SoC 定义
4.4.2 编译设备树
在 SDK 内核目录下执行:
cd ~/rk3588_sdk/kernel
make ARCH=arm64 dtbs
编译生成的 .dtb 文件位于:
arch/arm64/boot/dts/rockchip/rk3588-evb1-lp4.dtb
验证设备树是否包含 MIPI DSI 节点:
fdtdump arch/arm64/boot/dts/rockchip/rk3588-evb1-lp4.dtb | grep -i dsi
# 应输出类似:
# dsi@fde20000 { ... };
# dsi@fde30000 { ... };
4.4.3 常见编译错误与解决
| 错误信息 | 原因 | 解决方案 |
|---|---|---|
DTC: dts->dtb on file "xxx.dts" 后跟语法错误 |
设备树语法错误(缺少分号、括号不匹配) | 检查 dts 文件,使用 dtc -I dts -O dtb xxx.dts 单独调试 |
label 'dsi0' not found |
引用了未定义的 label | 确认 rk3588.dtsi 中已定义 dsi0: dsi@...,检查 include 路径 |
clock-names mismatch |
panel 节点中 clock 名称与驱动不匹配 | 对照 panel 驱动源码(如 panel-simple.c)修正 clock-names |
重要: 每次修改设备树后,必须重新执行
make dtbs 并确认新生成的 .dtb 已更新。建议在编译脚本中加入 md5sum 校验,避免烧录旧版本。
4.5 环境验证清单
完成上述步骤后,建议执行以下验证清单,确保环境就绪:
- 工具链验证:
aarch64-none-linux-gnu-gcc -v输出版本号,无报错。 - 内核配置验证:
grep CONFIG_DRM_ROCKCHIP .config返回y或m。 - 设备树编译验证:
ls -l arch/arm64/boot/dts/rockchip/*.dtb文件存在且时间戳为最新。 - SDK 完整性验证:
ls ~/rk3588_sdk/kernel/include/dt-bindings/包含clock、power、display等子目录。
推荐: 将上述验证步骤写入
env_check.sh 脚本,每次进入开发环境时执行一次,可快速定位环境漂移问题。