2. 开发环境搭建:Ubuntu 22.04 环境配置、交叉编译工具链安装、SDK源码获取与编译
做嵌入式Linux开发,环境搭建是第一道坎。很多新手在这一步就被劝退了——不是装错工具链版本,就是SDK拉不下来。我刚开始搞Rockchip平台时也踩过不少坑,今天就把这些经验整理出来,帮你一次搞定。
2.1 Ubuntu 22.04 基础环境配置
我个人习惯用Ubuntu 22.04 LTS做主力开发机。为什么选这个版本?因为Rockchip官方SDK对它的支持最成熟,包管理器的软件源也够新。
系统要求速览
- 操作系统:Ubuntu 22.04 LTS (64-bit)
- 磁盘空间:至少100GB(建议200GB+)
- 内存:8GB起步,16GB更舒服
- CPU:4核以上,编译速度快很多
装完系统后,第一件事就是更新软件源并安装基础依赖包。别偷懒,这一步漏了后面会各种报错。
# 更新软件源
sudo apt update && sudo apt upgrade -y
# 安装基础开发工具
sudo apt install -y git curl wget vim build-essential \
cmake autoconf automake libtool \
python3 python3-pip python3-dev \
bison flex texinfo \
libncurses5-dev libssl-dev \
u-boot-tools device-tree-compiler \
dosfstools mtools parted
# 安装repo工具(用于管理多仓库SDK)
sudo apt install -y repo
小技巧:我习惯在 ~/.bashrc 里加几个alias,比如 alias ll='ls -alF' 和 alias croot='cd $(repo root)',能省不少事。
2.2 交叉编译工具链安装
交叉编译,说白了就是在PC上编译出能在ARM芯片上跑的程序。Rockchip官方提供了两种工具链:一种是基于GCC的通用工具链,另一种是ARM的GNU工具链。
我建议直接用Rockchip官方提供的工具链,版本匹配度最好。曾经有个项目,我图省事用了Ubuntu源里的gcc-arm-linux-gnueabihf,结果编译出来的内核模块加载就崩——后来发现是工具链版本和内核ABI不兼容。
2.2.1 下载与安装
# 创建工具链目录
mkdir -p ~/toolchains
cd ~/toolchains
# 下载Rockchip官方工具链(以RK3588为例)
wget https://developer.rock-chips.com/static/toolchains/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu.tar.xz
# 解压
tar -xvf gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu.tar.xz
# 配置环境变量
echo 'export PATH=$PATH:~/toolchains/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin' >> ~/.bashrc
source ~/.bashrc
# 验证安装
aarch64-none-linux-gnu-gcc --version
注意:不同Rockchip芯片使用的工具链版本可能不同。RK3566/RK3568用gcc-arm-10.3,RK3399用gcc-linaro-7.5.0。一定要看对应SDK的文档确认版本。
2.2.2 工具链验证
装完工具链后,我习惯写个简单的测试程序验证一下:
# 创建测试文件
cat > hello.c << EOF
#include <stdio.h>
int main(void)
{
printf("Hello, Rockchip!\n");
return 0;
}
EOF
# 交叉编译
aarch64-none-linux-gnu-gcc -o hello hello.c
# 查看生成的文件类型
file hello
# 输出应为:ELF 64-bit LSB executable, ARM aarch64, ...
看到 ARM aarch64 字样就说明工具链工作正常了。
2.3 SDK源码获取与编译
Rockchip的SDK采用repo管理,包含u-boot、kernel、buildroot等多个仓库。我第一次拉SDK时没注意网络环境,结果断断续续拉了三天——后来发现是代理没配好。
2.3.1 获取SDK源码
# 创建SDK工作目录
mkdir -p ~/rk3588_sdk
cd ~/rk3588_sdk
# 初始化repo仓库(以RK3588 Linux SDK为例)
repo init -u https://github.com/rockchip-linux/manifests -b master -m rk3588_linux_release.xml
# 同步源码(这一步耗时较长)
repo sync -c -j4
# 如果同步中断,可以继续执行
repo sync -c --no-clone-bundle
避坑指南:我曾经在同步过程中遇到 fatal: unable to access 错误,原因是GitHub访问不稳定。解决方案是配置代理或使用国内镜像源:
# 使用清华镜像
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/rockchip/manifests -b master -m rk3588_linux_release.xml
2.3.2 SDK目录结构
同步完成后,你会看到这样的目录结构:
| 目录/文件 | 说明 |
|---|---|
u-boot/ |
U-Boot引导加载程序源码 |
kernel/ |
Linux内核源码(基于Rockchip分支) |
buildroot/ |
Buildroot根文件系统构建系统 |
device/rockchip/ |
板级设备树、分区表、配置文件 |
external/ |
第三方库和工具 |
rkbin/ |
Rockchip闭源二进制文件(如DDR初始化、M0固件) |
docs/ |
开发文档和芯片手册 |
2.3.3 编译SDK
Rockchip SDK提供了统一的编译脚本,你不需要手动敲复杂的make命令。嗯,这里要注意:第一次编译前一定要检查 device/rockchip/ 下有没有你的板级配置。
# 进入SDK根目录
cd ~/rk3588_sdk
# 选择板级配置(以RK3588 EVB为例)
./build.sh evb-rk3588
# 一键编译(包含u-boot、kernel、rootfs)
./build.sh
# 或者分步编译
./build.sh uboot # 只编译U-Boot
./build.sh kernel # 只编译内核
./build.sh rootfs # 只编译根文件系统
编译产物说明:编译完成后,在 output/ 目录下会生成以下文件:
uboot.img— U-Boot镜像boot.img— 内核+设备树+ramdiskrootfs.img— 根文件系统镜像update.img— 完整固件包(可直接烧录)
2.4 开发环境验证
环境搭好了,怎么确认一切正常?我一般会做三个快速验证:
- 工具链验证:编译一个简单的C程序,确认能生成ARM架构的可执行文件。
- SDK编译验证:执行
./build.sh kernel,确认内核能完整编译通过。 - 设备树编译验证:检查
kernel/arch/arm64/boot/dts/rockchip/下是否生成了.dtb文件。
常见问题:如果编译过程中遇到 /bin/bash: line 1: python: command not found,是因为系统默认的python命令指向python3,而某些脚本写死了python。解决方案:sudo ln -s /usr/bin/python3 /usr/bin/python
2.5 本章知识体系
下面这张图帮你理清开发环境搭建的整体流程:
环境搭建是整个开发流程的基石。我见过太多人因为工具链版本不对、依赖包缺失,浪费大量时间在排查编译错误上。按照上面的步骤一步步来,基本不会出问题。
如果你在搭建过程中遇到任何报错,先检查三个地方:工具链路径是否加入PATH、repo版本是否过旧、磁盘空间是否充足。这三个问题占了环境搭建报错的80%以上。