2、开发环境搭建:安装Linux主机、配置交叉编译工具链、获取RK3568 SDK、验证开发环境
RK3568 作为一款高性能、低功耗的国产化 SoC,其根文件系统定制与系统构建工作必须依托于一套完整、稳定且可复现的开发环境。本章节将系统讲解从零开始搭建 RK3568 开发环境的完整流程,涵盖 Linux 主机的安装与配置、交叉编译工具链的部署、Rockchip SDK 的获取与校验,以及最终的环境验证方法。一个规范的环境是后续所有编译、调试和定制工作的基石,能够有效避免因工具链版本不一致、依赖缺失或 SDK 损坏导致的各类“玄学”问题。
2.1 Linux 主机安装与基础配置
核心原理:RK3568 的 SDK 编译过程涉及大量的 shell 脚本、Makefile 和 Python 工具,对操作系统的文件系统大小写敏感性、符号链接支持以及 GNU 工具链的版本有严格要求。Windows 的 WSL 或虚拟机虽然可以运行 Linux 命令,但在处理复杂的 repo 多仓库同步、设备节点映射和长时间编译任务时,容易出现文件权限错乱或 I/O 性能瓶颈。因此,官方推荐使用原生安装的 Ubuntu 20.04 或 22.04 LTS 64 位系统作为开发主机。
操作流程:安装完成后,需要执行以下基础配置步骤:
- 更新软件源:使用
sudo apt update和sudo apt upgrade将系统内核与基础库更新至最新稳定版。 - 安装基础依赖:执行以下命令安装编译所需的软件包集合:
sudo apt install -y git ssh make gcc libssl-dev liblz4-tool \
expect g++ patchelf chrpath gawk texinfo chrpath diffstat \
binutils binfmt-support build-essential device-tree-compiler \
flex bison libncurses5-dev libssl-dev libsqlite3-dev libudev-dev \
libusb-1.0-0-dev python3-pip python3-dev python3-setuptools \
swig libtool libglib2.0-dev gtk-doc-tools m4 bc u-boot-tools \
nfs-kernel-server nfs-common dosfstools mtools fakeroot tar zip unzip
案例拆解:某项目组在 Ubuntu 18.04 上编译 RK3568 SDK 时,频繁报错 crypto/af_alg.c: undefined reference to `EVP_MD_CTX_new'。排查发现是系统自带的 OpenSSL 1.1.0 版本过旧,而 SDK 中的某些加密模块需要 OpenSSL 1.1.1 以上版本。通过升级至 Ubuntu 20.04 并重新安装 libssl-dev 后,问题彻底解决。这提示我们,主机系统的版本直接影响 SDK 的编译成功率,不要使用过于古老的发行版。
2.2 交叉编译工具链配置
核心原理:交叉编译是指在 x86_64 主机上编译生成 ARM64 (aarch64) 架构可执行代码的过程。RK3568 使用的是 ARMv8-A 架构,因此需要 aarch64-linux-gnu- 前缀的 GCC 工具链。Rockchip 官方提供的工具链基于 GCC 10.3,针对 Cortex-A55 内核进行了优化,支持 LTO(链接时优化)和 SVE(可扩展向量扩展)特性。
配置步骤:工具链的安装本质上是解压并设置环境变量,具体如下:
# 1. 创建工具链目录
sudo mkdir -p /opt/arm
cd /opt/arm
# 2. 解压工具链(假设已下载 gcc-arm-10.3-x86_64-aarch64-none-linux-gnu.tar.xz)
sudo tar -xvf gcc-arm-10.3-x86_64-aarch64-none-linux-gnu.tar.xz
# 3. 设置环境变量(建议写入 ~/.bashrc 永久生效)
export PATH=/opt/arm/gcc-arm-10.3-x86_64-aarch64-none-linux-gnu/bin:$PATH
export ARCH=arm64
export CROSS_COMPILE=aarch64-none-linux-gnu-
# 4. 验证版本
aarch64-none-linux-gnu-gcc --version
对比分析:下表列出了不同工具链的适用场景,帮助开发者做出正确选择:
| 工具链类型 | 前缀 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|---|
| Rockchip 官方工具链 | aarch64-none-linux-gnu- | SDK 默认编译 | 与 SDK 版本严格匹配,稳定性高 | 版本较旧,不支持最新语言特性 |
| Linaro 工具链 | aarch64-linux-gnu- | 通用 Linux 用户态程序 | 更新频繁,支持新特性 | 可能与内核模块编译不兼容 |
| 发行版自带工具链 | aarch64-linux-gnu- | Debian/Ubuntu 包管理 | 安装方便 | 版本过旧,无法编译最新内核 |
2.3 获取 RK3568 SDK
核心原理:Rockchip 的 SDK 采用 repo 多仓库管理机制,由数百个 Git 仓库组成,包括 U-Boot、Kernel、Buildroot、App 层等。通过 repo 工具可以一次性同步所有仓库并锁定到特定版本。SDK 的获取有两种方式:一是通过 repo 从 Git 服务器同步(适合持续开发),二是直接下载官方发布的完整压缩包(适合快速搭建基线环境)。
操作流程(repo 方式):
# 1. 安装 repo 工具
mkdir -p ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
export PATH=~/bin:$PATH
# 2. 创建 SDK 目录并初始化
mkdir -p ~/rk3568_sdk
cd ~/rk3568_sdk
repo init -u https://gitlab.com/rockchip_linux/rk3568-manifest.git -b master
# 3. 同步全部代码(耗时较长,建议使用 -j4 控制并发)
repo sync -j4 -c --no-tags
案例拆解:某开发者在同步 SDK 时,网络中断导致 repo sync 失败。此时直接重新执行 repo sync 会从头开始下载,浪费大量时间。正确的做法是使用 repo sync -j4 --force-sync 强制同步,repo 会基于已有的 .git 目录进行增量更新,只下载缺失的对象。此外,如果公司内部有 Git 镜像服务器,可以通过修改 ~/.gitconfig 中的 URL 替换规则,将外网地址替换为内网镜像地址,大幅提升同步速度。
kernel/:Linux 4.19 或 5.10 内核源码,包含 Rockchip 平台补丁。u-boot/:U-Boot 引导加载程序源码。buildroot/:Buildroot 构建系统,用于生成根文件系统。device/rockchip/:板级配置、设备树文件、分区表定义。external/:第三方库和应用程序。app/:Rockchip 提供的系统应用。
2.4 验证开发环境
核心原理:环境验证的目的是确认工具链、SDK 和主机系统三者之间的兼容性。验证分为两个层面:编译验证和运行验证。编译验证确保工具链能正确生成 ARM64 代码;运行验证则通过 QEMU 用户态模拟或直接在开发板上运行,确认生成的二进制文件可执行。
验证流程:
- 编写测试程序:创建一个简单的 hello.c 文件。
- 交叉编译:使用
aarch64-none-linux-gnu-gcc hello.c -o hello生成可执行文件。 - 检查文件类型:执行
file hello,输出应包含ELF 64-bit LSB executable, ARM aarch64。 - 运行验证:如果开发板已连接,可通过 NFS 或 adb push 将程序拷贝至板端运行;若无板子,可使用
qemu-aarch64运行。
# 编译验证
cat <<EOF > hello.c
#include <stdio.h>
int main() {
printf("RK3568 Env OK!\n");
return 0;
}
EOF
aarch64-none-linux-gnu-gcc hello.c -o hello
file hello
# 输出: hello: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), dynamically linked
# 运行验证(无板子时使用 QEMU)
sudo apt install qemu-user-static
./hello
# 输出: RK3568 Env OK!
常见误区与复盘:
- 误区一:只验证了
gcc --version就认为环境 OK。实际上,工具链的库文件(libgcc、libstdc++)可能缺失,导致链接阶段失败。必须通过实际编译一个包含标准库调用的程序来验证。 - 误区二:忽略磁盘空间。SDK 完整编译需要约 150GB 空间,如果
/home分区空间不足,编译会在链接阶段报No space left on device。建议将 SDK 放在/opt或独立数据盘。 - 误区三:使用 root 用户直接编译。SDK 中的某些脚本会检测当前用户,root 用户可能导致文件属主混乱。建议创建普通用户并加入 sudo 组。
file 命令输出的架构不是 ARM aarch64,而是 x86-64,说明编译器没有使用交叉编译工具链。请检查 PATH 环境变量是否被后续配置覆盖,或者是否在 Makefile 中显式指定了 CC 变量。
完成上述四个步骤后,开发环境即搭建完毕。此时建议执行一次 SDK 的 ./build.sh lunch 命令,选择 rk3568 对应的配置文件,然后执行 ./build.sh kernel 进行一次完整的内核编译,以进一步验证 SDK 的完整性。如果内核编译通过,说明整个工具链、SDK 和主机系统的配合已经达到生产可用状态,可以开始后续的根文件系统定制工作。