4. RK3588开发环境搭建

RK3588 是 ARM64 架构的应用处理器,而我们的开发主机通常是 x86_64 的 Ubuntu。要在主机上编译出能在 RK3588 上运行的 rootfs、内核与应用程序,就必须先建立一套完整的交叉开发环境。本章围绕四件事展开:交叉编译工具链安装、SDK 获取、依赖包配置,以及串口与网络调试环境准备。这四者构成后续所有构建与部署工作的地基,任何一环缺失都会在编译或烧录阶段暴露问题。

一、核心原理:为什么需要交叉编译环境

交叉编译指在一种架构的主机上,生成另一种架构可执行文件的编译过程。RK3588 使用 ARM Cortex-A76/A55 大小核,运行 AArch64 指令集,主机无法直接执行这些二进制,因此需要一套面向 aarch64 的编译器、链接器与 C 库。工具链通常由三部分组成:binutils(汇编器、链接器)、gcc(C/C++ 编译器)、glibc 或 musl(目标系统 C 库)。三者必须与目标 rootfs 的 ABI 保持一致,否则会出现“编译通过、运行报错”的典型问题。

SDK 则是 Rockchip 官方提供的整套源码与构建脚本集合,包含 U-Boot、Kernel、Buildroot/Debian、设备树、烧录工具与打包脚本。它把工具链、依赖、配置和构建流程封装在一起,是 rootfs 构建的入口。理解“工具链负责编译、SDK 负责组织、依赖负责支撑、串口与网络负责验证”这条链路,是搭建环境的关键。

RK3588 交叉开发环境组成与数据流 开发主机 (x86_64 Ubuntu) 交叉编译工具链 aarch64-linux-gnu-gcc / binutils / glibc RK3588 SDK 源码树 U-Boot / Kernel / Buildroot / Debian 依赖包与构建工具 git / repo / make / bc / libssl-dev 串口与网络调试环境 minicom / picocom / tftp / nfs / ssh RK3588 目标板 (AArch64) U-Boot 引导 加载内核与设备树 Linux 内核 驱动、设备树、启动参数 Rootfs 根文件系统 Debian / Buildroot / 应用 调试接口 串口控制台 / 以太网 / ADB 编译产物 镜像烧录 rootfs 打包 串口日志 / 网络回传

二、方法流程:四步搭建可用的开发环境

  1. 安装交叉编译工具链。推荐使用 Rockchip SDK 自带的预编译工具链,或 Ubuntu 官方源中的 gcc-aarch64-linux-gnu。安装后必须验证版本与目标 ABI 是否匹配。
  2. 获取 SDK。通过 repo 工具同步 Rockchip 发布的 RK3588 SDK,或从官方 Git 仓库克隆。同步完成后检查目录结构与版本标签。
  3. 配置依赖包。安装编译内核、U-Boot、Buildroot 所需的全部主机依赖,避免构建中途因缺库失败。
  4. 准备串口与网络调试环境。连接串口控制台查看启动日志,配置 TFTP/NFS 用于快速下载镜像与挂载根文件系统,配置 SSH 用于登录目标系统。
# 1. 安装交叉编译工具链(Ubuntu 示例)
sudo apt update
sudo apt install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu

# 验证工具链
aarch64-linux-gnu-gcc -v
aarch64-linux-gnu-gcc -dumpmachine
# 期望输出:aarch64-linux-gnu

# 2. 获取 RK3588 SDK(repo 方式)
mkdir -p ~/rk3588 && cd ~/rk3588
repo init -u https://github.com/rockchip-linux/manifests -b master
repo sync -j8

# 3. 安装主机依赖包
sudo apt install -y git repo make bc bison flex \
  libssl-dev libncurses-dev device-tree-compiler \
  python3 python3-pip rsync cpio unzip

# 4. 串口与网络调试工具
sudo apt install -y minicom picocom tftp-hpa nfs-kernel-server openssh-client

三、依赖包配置与常见参数

依赖包配置不是“装得越多越好”,而是按构建阶段精确补齐。内核编译需要 bc、bison、flex、libssl-dev;设备树编译需要 device-tree-compiler;Buildroot 需要 rsync、cpio、unzip;打包镜像需要 python3 与相关 pip 包。下表给出关键依赖与用途对照,便于排查缺失。

依赖包 用途 缺失时的典型报错
gcc-aarch64-linux-gnu ARM64 交叉编译器 command not found: aarch64-linux-gnu-gcc
libssl-dev 内核模块签名与加密支持 fatal error: openssl/ssl.h: No such file
device-tree-compiler 编译 .dts 为 .dtb dtc: command not found
bc / bison / flex 内核配置与语法解析 recipe for target 'scripts' failed
rsync / cpio Buildroot 文件系统打包 rsync: command not found
python3 / pip3 镜像打包与工具脚本 ModuleNotFoundError: No module named 'xxx'
提示:建议在 SDK 根目录执行 ./build.sh help 查看官方支持的构建命令,再根据提示补齐依赖。Rockchip SDK 通常自带 apt install 依赖清单脚本,可直接参考。

四、串口与网络调试环境准备

串口是 RK3588 启动阶段最可靠的观察窗口。开发板通常通过 USB 转 TTL 模块连接主机的 /dev/ttyUSB0,波特率一般为 1500000。使用 minicom 或 picocom 即可查看 U-Boot 与内核日志。

# 查看串口设备
ls /dev/ttyUSB*

# 使用 picocom 连接串口控制台
sudo picocom -b 1500000 /dev/ttyUSB0

# 使用 minicom 配置
sudo minicom -s
# 设置 Serial port: /dev/ttyUSB0
# 设置 Bps/Par/Bits: 1500000 8N1

网络调试方面,TFTP 用于在 U-Boot 阶段快速下载内核与设备树,NFS 用于挂载根文件系统,SSH 用于系统启动后登录。三者配合可以大幅缩短“编译—烧录—验证”的循环时间。

# 主机配置 TFTP 根目录
sudo mkdir -p /srv/tftp
sudo chmod 777 /srv/tftp
# 将 Image、rk3588-xxx.dtb 放入 /srv/tftp

# 主机配置 NFS 导出
echo "/srv/nfs 192.168.1.0/24(rw,sync,no_subtree_check)" | sudo tee -a /etc/exports
sudo exportfs -ra

# 目标板 U-Boot 中设置网络参数
setenv ipaddr 192.168.1.100
setenv serverip 192.168.1.10
setenv bootargs console=ttyS2,1500000n8 root=/dev/nfs rw nfsroot=192.168.1.10:/srv/nfs ip=192.168.1.100

五、案例与误区复盘

案例场景:某开发者在 x86_64 主机上直接使用系统自带 gcc 编译了一个测试程序,拷贝到 RK3588 后执行报 cannot execute binary file: Exec format error。原因是没有使用 aarch64 交叉编译器,生成的是 x86_64 二进制。改用 aarch64-linux-gnu-gcc 后问题解决。

常见误区:

  • 工具链版本与 SDK 要求不一致,导致链接 glibc 符号缺失。
  • repo sync 中断后未重新同步,SDK 源码树不完整。
  • 依赖包只装了一部分,构建到内核阶段才报错,浪费大量时间。
  • 串口波特率设置错误,看到乱码就误判为板子启动失败。
  • NFS 导出路径权限不足,目标板挂载根文件系统时卡住。
注意:交叉编译工具链的 ABI 必须与目标 rootfs 的 C 库一致。若 rootfs 使用 musl,而工具链使用 glibc,即使编译通过,运行时也可能出现动态链接错误。搭建环境时务必先确认 SDK 默认使用的 C 库类型。

完成本章四步后,主机侧应具备可用的 aarch64 工具链、完整的 RK3588 SDK、齐全的构建依赖,以及串口与网络调试通道。此时再进入 rootfs 构建与系统部署,才能把精力集中在配置与功能验证上,而不是反复排查环境问题。