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 — 内核+设备树+ramdisk
  • rootfs.img — 根文件系统镜像
  • update.img — 完整固件包(可直接烧录)

2.4 开发环境验证

环境搭好了,怎么确认一切正常?我一般会做三个快速验证:

  1. 工具链验证:编译一个简单的C程序,确认能生成ARM架构的可执行文件。
  2. SDK编译验证:执行 ./build.sh kernel,确认内核能完整编译通过。
  3. 设备树编译验证:检查 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 本章知识体系

下面这张图帮你理清开发环境搭建的整体流程:

开发环境搭建流程 Ubuntu 22.04 系统安装 安装基础依赖包 安装交叉编译工具链 repo init & repo sync 获取SDK ./build.sh 编译SDK 验证:工具链测试 → 内核编译 → 设备树生成 → 确认无报错

环境搭建是整个开发流程的基石。我见过太多人因为工具链版本不对、依赖包缺失,浪费大量时间在排查编译错误上。按照上面的步骤一步步来,基本不会出问题。

如果你在搭建过程中遇到任何报错,先检查三个地方:工具链路径是否加入PATH、repo版本是否过旧、磁盘空间是否充足。这三个问题占了环境搭建报错的80%以上。