1. 搭建RK3399开发环境

任务说明

在Ubuntu主机上搭建RK3399交叉编译环境,安装必要依赖与SDK,并通过编译一个最小可执行程序验证工具链可用。本案例以RK3399 Linux SDK为例,聚焦于环境搭建与验证闭环。

环境与依赖

  • 主机系统:Ubuntu 18.04/20.04 x86_64
  • 目标平台:RK3399 (ARMv8-A, 64位)
  • 所需包:git, ssh, make, gcc, libssl-dev, libncurses5-dev, expect, python2.7(SDK脚本依赖)

1. 安装交叉编译工具链

使用Linaro提供的64位ARM工具链,直接下载并解压到/opt目录:

# 下载工具链(若网络受限,可提前下载后拷贝)
wget https://releases.linaro.org/components/toolchain/binaries/7.5-2019.12/aarch64-linux-gnu/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz
sudo tar -xvf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz -C /opt
export PATH=/opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin:$PATH
echo 'export PATH=/opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

# 验证工具链
aarch64-linux-gnu-gcc --version

2. 获取RK3399 SDK

SDK通过repo管理,需先安装repo工具并同步代码(以官方rk3399-linux分支为例):

# 安装repo
sudo apt update
sudo apt install -y repo git ssh make gcc libssl-dev libncurses5-dev expect python2.7

# 创建SDK目录并初始化(使用国内镜像加速)
mkdir -p ~/rk3399-sdk && cd ~/rk3399-sdk
repo init -u https://github.com/rockchip-linux/manifests.git -b linux -m rk3399-linux.xml --repo-url=https://github.com/nicholasgasior/git-repo.git
repo sync -j8

同步完成后,SDK根目录包含kernel/、u-boot/、buildroot/等子目录。若仅需验证工具链,可跳过完整SDK同步,直接使用第3节的独立编译验证。

3. 最小交叉编译验证

创建独立测试文件,不依赖SDK即可验证工具链可用性:

// hello_rk3399.c
#include <stdio.h>

int main() {
    printf("RK3399 toolchain OK\n");
    return 0;
}
# 编译
aarch64-linux-gnu-gcc -o hello_rk3399 hello_rk3399.c

# 检查文件类型
file hello_rk3399

预期输出(由file命令根据二进制格式直接判定):

hello_rk3399: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, not stripped

若输出包含ARM aarch64,说明交叉编译工具链工作正常。

4. 验证SDK编译环境(可选但推荐)

若已完成SDK同步,可进入SDK目录执行一次轻量编译验证:

cd ~/rk3399-sdk
source build/envsetup.sh
lunch rk3399_all-userdebug
make -j$(nproc) uboot

编译过程会输出大量日志,最终在u-boot/目录下生成uboot.img和trust.img即表示SDK环境配置正确。此步骤耗时较长(约10-30分钟),首次编译需下载额外依赖。

验证判定标准

  • 工具链验证:第3节中file命令输出包含ARM aarch64,且编译过程无报错。
  • SDK验证(若执行):make uboot命令正常结束,生成uboot.img文件。
  • 环境持久性:新开终端后aarch64-linux-gnu-gcc --version仍可执行,说明PATH配置已写入~/.bashrc。

常见问题

  • repo sync失败:多为网络问题,可尝试repo sync --no-clone-bundle或更换镜像。
  • 缺少python2:Ubuntu 20.04默认无python2,需通过sudo apt install python2.7安装,并确认python --version指向2.7。
  • 编译时找不到libncurses.so.5:SDK中部分脚本依赖ncurses5,安装libncurses5-dev后若仍报错,可创建软链接:sudo ln -s /usr/lib/x86_64-linux-gnu/libncurses.so.6 /usr/lib/x86_64-linux-gnu/libncurses.so.5。