4. 开发环境搭建

RK3588 的 Linux BSP 开发属于典型的“宿主机编译、目标板运行”模式。宿主机负责代码编辑、内核与根文件系统编译、镜像打包;RK3588 开发板负责运行 U-Boot、Kernel、Rootfs 以及上层应用。因此,开发环境是否稳定、工具链是否匹配、SDK 是否完整,直接决定后续驱动调试与系统裁剪的效率。本节围绕 Ubuntu 主机配置、交叉编译工具链安装、SDK 获取与目录结构解析四个环节展开,帮助读者建立可复用的 BSP 开发环境。

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

RK3588 采用 ARM64 架构(Cortex-A76/A55 大小核),而开发主机通常是 x86_64 的 Ubuntu。若直接在开发板上编译内核,不仅速度慢,而且存储空间和内存都受限。交叉编译工具链的作用,是在 x86_64 主机上生成可在 ARM64 目标板上运行的二进制文件。它包含交叉编译器、链接器、汇编器、C 库以及目标平台头文件。工具链的 ABI、glibc 版本、内核头文件版本必须与 SDK 要求一致,否则会出现“编译通过、运行报错”或“无法链接”的问题。

RK3588 SDK 通常要求使用 Rockchip 提供的 aarch64 交叉编译工具链,例如 gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu,不建议随意替换为 Ubuntu 自带的 gcc-aarch64-linux-gnu,以免与 SDK 中的预编译库不兼容。

二、Ubuntu 主机配置

推荐使用 Ubuntu 20.04 LTS 或 Ubuntu 22.04 LTS,64 位桌面版或服务器版均可。主机建议至少 8 核 CPU、16GB 内存、200GB 以上可用磁盘空间,因为完整 SDK 编译一次可能占用 100GB 以上。首先更新系统并安装基础依赖:

sudo apt update
sudo apt install -y git ssh make gcc g++ libssl-dev \
  libncurses5-dev libncursesw5-dev bison flex \
  uuid-dev liblz4-tool expect gawk texinfo \
  python3 python3-pip device-tree-compiler \
  rsync bc cpio unzip zip

# 将默认 shell 指向 bash,避免 SDK 脚本兼容问题
sudo dpkg-reconfigure dash   # 选择 No

如果主机位于国内网络环境,建议配置 Git 代理或使用镜像源,否则 SDK 中 repo 同步会非常缓慢。同时应关闭可能干扰编译的防火墙策略,并确保当前用户对工作目录有读写权限。

三、交叉编译工具链安装

工具链安装的核心是“解压、加入 PATH、验证版本”。以 Rockchip 官方工具链为例:

# 1. 创建工作目录
mkdir -p ~/rk3588/toolchain
cd ~/rk3588/toolchain

# 2. 解压工具链(假设已下载压缩包)
tar -xvf gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu.tar.xz

# 3. 配置环境变量
echo 'export PATH=$PATH:~/rk3588/toolchain/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin' >> ~/.bashrc
source ~/.bashrc

# 4. 验证
aarch64-none-linux-gnu-gcc -v

验证时重点观察输出中的 Target: aarch64-none-linux-gnu 与 gcc version。若命令找不到,说明 PATH 未生效;若版本与 SDK 文档不一致,应更换工具链。部分 SDK 会在 buildroot 或 prebuilts 目录中自带工具链,此时应优先使用 SDK 内置版本,避免重复安装。

四、SDK 获取与目录结构解析

RK3588 SDK 通常通过 Rockchip 官方或代理商提供的 repo 清单获取。典型流程如下:

mkdir -p ~/rk3588/sdk
cd ~/rk3588/sdk
repo init -u https://github.com/rockchip-linux/manifests -b master -m rk3588_linux_release.xml
repo sync -c -j8
repo start rk3588-dev --all

同步完成后,SDK 根目录会出现多个关键子目录。理解这些目录的职责,是后续编译与裁剪的基础。下表给出常见目录及其作用:

目录作用关键内容
u-boot/引导加载程序RK3588 启动流程、DDR 初始化、SPL
kernel/Linux 内核设备树、驱动、defconfig
buildroot/根文件系统构建BusyBox、库、应用包
device/rockchip/板级配置分区表、编译脚本、板型配置
external/外部组件RKNN、多媒体、测试工具
prebuilts/预编译工具交叉工具链、烧录工具
tools/辅助工具打包、签名、镜像生成

其中 device/rockchip/rk3588/ 下的 BoardConfig 文件决定了目标板型、内核 defconfig、DTS 名称和分区布局。编译前通常需要执行 ./build.sh lunch 选择板级配置,再执行 ./build.sh 完成全量编译。

RK3588 Linux BSP 开发环境组成与数据流 Ubuntu 主机 (x86_64) • 系统:Ubuntu 20.04/22.04 • 依赖:git/make/gcc/bison • 磁盘:≥200GB 可用 • 内存:≥16GB 推荐 • 网络:可访问 repo 源 • Shell:bash 交叉编译工具链 • aarch64-none-linux-gnu • gcc-arm-10.3-2021.07 • 解压至 ~/rk3588/toolchain • 加入 PATH 环境变量 • 验证:gcc -v • 与 SDK 预编译库 ABI 匹配 RK3588 目标板 (ARM64) • U-Boot / SPL • Linux Kernel 5.10/6.1 • Rootfs (Buildroot/Debian) • 设备树 rk3588-*.dts • 驱动模块 .ko • 应用可执行文件 安装 编译产物 RK3588 SDK 目录结构 u-boot/ 引导加载 kernel/ 内核与驱动 buildroot/ 根文件系统 device/rockchip/ 板级配置 external/ RKNN/多媒体 prebuilts/ 预编译工具 编译流程: ./build.sh lunch 选择板型 → ./build.sh 全量编译 → 生成 update.img → 烧录到开发板

五、案例场景:从零搭建并编译一次完整镜像

假设拿到一块 RK3588 开发板,需要验证环境是否可用。可按以下顺序操作:

  1. 在 Ubuntu 中安装依赖并重启终端,确保 repo 可用。
  2. 下载并解压交叉工具链,执行 aarch64-none-linux-gnu-gcc -v 确认版本。
  3. 使用 repo init 与 repo sync 拉取 SDK,耗时取决于网络。
  4. 进入 SDK 根目录,执行 ./build.sh lunch,选择与开发板匹配的 BoardConfig。
  5. 执行 ./build.sh,等待 U-Boot、Kernel、Rootfs 依次编译完成。
  6. 在 rockdev/ 目录下查看生成的 update.img,使用瑞芯微烧录工具写入开发板。

若编译过程中出现“找不到交叉编译器”或“头文件版本不匹配”,优先检查 PATH 与工具链版本,而不是盲目修改 Makefile。

六、误区与复盘

常见误区一:使用 Ubuntu 自带的 gcc-aarch64-linux-gnu 替代 Rockchip 工具链。SDK 中的预编译库可能依赖特定 glibc 版本,替换后容易出现链接错误。

常见误区二:在 Windows 文件系统或 NTFS 分区中编译。Linux 内核编译对大小写、符号链接和权限敏感,应放在 ext4 分区中。

常见误区三:忽略 repo sync 的完整性。同步中断后未执行 repo sync -c --force-sync,导致部分目录缺失,编译时报“文件不存在”。

复盘建议:每次搭建环境后,记录工具链版本、SDK 分支、BoardConfig 名称和编译命令。后续换机或团队协作时,可直接复用该清单,减少重复踩坑。环境搭建不是一次性工作,而是 BSP 开发可重复性的基础。