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。