2. 开发环境搭建:Ubuntu系统安装、交叉编译工具链配置、必要软件包安装

做嵌入式Linux开发,第一步就是把开发环境搭好。我见过不少新手,一上来就急着写代码,结果编译报错折腾半天,最后发现是工具链没配对。说白了,环境搭好了,后面能省80%的坑。

这一章,我带你从零开始,把Ubuntu系统装好、交叉编译工具链配好、常用软件包装齐。嗯,都是些基本功,但每一步都别跳。

2.1 Ubuntu系统安装与基础配置

瑞芯微官方推荐用 Ubuntu 18.04 LTS 或 20.04 LTS。我个人习惯用20.04,因为软件源更新,兼容性也更好。你问为什么不用22.04?我在项目中遇到过,某些老版本SDK的Python脚本在22.04上会报语法警告,虽然能改,但没必要给自己添堵。

2.1.1 系统安装方式

三种主流方式,看你手头有什么硬件:

方式 适用场景 推荐配置
物理机安装 主力开发机,性能无损耗 CPU ≥ 4核,内存 ≥ 16GB,硬盘 ≥ 256GB
虚拟机安装 Windows/Mac用户,想保留原系统 分配CPU ≥ 4核,内存 ≥ 8GB,硬盘 ≥ 100GB
WSL2安装 Windows用户,轻量开发 Windows 10 2004+,内存 ≥ 8GB
我的建议: 如果你有闲置的旧电脑,直接装物理机。编译RK3588的SDK时,虚拟机磁盘IO容易成瓶颈,全量编译一次可能要等40分钟,物理机能快不少。

2.1.2 安装后的基础配置

装完系统后,先做三件事:

  1. 换源 —— 把apt源换成国内镜像,不然下载慢到怀疑人生。
  2. 更新系统 —— sudo apt update && sudo apt upgrade -y
  3. 创建普通用户 —— 别用root直接干活,权限太大会误删东西。
# 换源示例(阿里云镜像)
sudo sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
sudo sed -i 's/security.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
sudo apt update
注意: 换源后一定要执行 apt update,否则你装的包可能还是旧版本。我曾经因为忘了这步,装了个过时的Python库,排查了整整一下午。

2.2 交叉编译工具链配置

交叉编译,说白了就是在PC上编译出能在ARM芯片上跑的程序。瑞芯微的芯片是ARM架构,而你的PC是x86架构,所以需要一套专门的工具链。

2.2.1 工具链选择

瑞芯微官方提供了两种工具链:

工具链 适用芯片 下载方式
gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf RK3288, RK3399 (32位用户空间) ARM官网或SDK内置
gcc-arm-10.3-2021.07-x86_64-aarch64-linux-gnu RK3568, RK3588 (64位用户空间) ARM官网或SDK内置

我个人建议直接用SDK里自带的工具链。瑞芯微的SDK在 prebuilts/gcc/linux-x86/aarch64/ 目录下已经放好了,省得自己去ARM官网翻。

2.2.2 安装与配置

假设你下载了 gcc-arm-10.3-2021.07-x86_64-aarch64-linux-gnu.tar.xz:

# 解压到 /opt 目录
sudo tar -xvf gcc-arm-10.3-2021.07-x86_64-aarch64-linux-gnu.tar.xz -C /opt/

# 添加环境变量
echo 'export PATH=$PATH:/opt/gcc-arm-10.3-2021.07-x86_64-aarch64-linux-gnu/bin' >> ~/.bashrc
source ~/.bashrc

# 验证安装
aarch64-linux-gnu-gcc --version

如果看到版本号输出,说明配好了。如果提示 command not found,检查一下路径写没写对。

避坑指南: 我曾经把工具链解压到了带空格的目录下(比如 /home/user/my tools/),结果编译时路径解析出错,报了一堆莫名其妙的找不到头文件。记住,路径里不要有空格和中文。

2.3 必要软件包安装

瑞芯微的SDK编译依赖很多软件包。我整理了一份清单,你照着装就行。

2.3.1 基础编译工具

sudo apt install -y \
    build-essential \
    cmake \
    autoconf \
    automake \
    libtool \
    pkg-config \
    bison \
    flex \
    texinfo \
    gettext

2.3.2 版本管理工具

Git和Repo是必须的。Git管理代码,Repo管理多个Git仓库(瑞芯微SDK有上百个仓库)。

# 安装Git
sudo apt install -y git

# 配置Git用户信息
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

# 安装Repo
sudo apt install -y repo
# 或者手动安装
mkdir -p ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
export PATH=$PATH:~/bin
小技巧: 如果你在公司内网,Git拉代码慢的话,可以配代理:git config --global http.proxy http://proxy.example.com:8080。我在客户现场经常这么干。

2.3.3 Python与脚本工具

SDK里很多脚本是用Python写的,包括打包、签名、烧录工具。

sudo apt install -y \
    python3 \
    python3-pip \
    python3-dev \
    python3-venv \
    python3-setuptools

# 安装常用Python包
pip3 install \
    pyelftools \
    pycryptodome \
    rsa \
    requests

2.3.4 其他必要工具

sudo apt install -y \
    make \
    gcc \
    g++ \
    gawk \
    wget \
    curl \
    unzip \
    xz-utils \
    file \
    tree \
    vim \
    ssh \
    net-tools \
    device-tree-compiler \
    u-boot-tools \
    mtools \
    dosfstools \
    parted \
    gdisk

2.4 开发环境结构总览

下面这张图,帮你把整个开发环境的结构理清楚。你想想看,从PC到ARM板,中间经过了哪些环节?

开发环境结构总览 主机开发环境 (x86_64 Ubuntu) Ubuntu 20.04 LTS 交叉编译工具链 Git + Repo Python3 编译生成 编译产物 u-boot.img boot.img rootfs.img 烧录到目标板 目标板 (ARM64 Rockchip) RK3568 / RK3588 ARM64 Linux内核 用户空间应用

2.5 环境验证

装完所有东西后,跑一个简单的测试,确保环境没问题。

# 1. 验证交叉编译器
aarch64-linux-gnu-gcc --version

# 2. 验证Git
git --version

# 3. 验证Repo
repo --version

# 4. 写一个简单的C程序,交叉编译测试
cat > hello.c << EOF
#include <stdio.h>
int main() {
    printf("Hello Rockchip!\n");
    return 0;
}
EOF

aarch64-linux-gnu-gcc -o hello hello.c
file hello
# 输出应该包含 "ELF 64-bit LSB executable, ARM aarch64"
验证通过的标准: file hello 显示 ARM aarch64,说明交叉编译环境配好了。如果显示 x86-64,说明你用的是本地gcc,不是交叉编译器。

2.6 常见问题与解决

我整理了几个新手最容易踩的坑:

问题 原因 解决方法
/usr/bin/env: python3: No such file or directory 系统没有安装Python3 sudo apt install python3
aarch64-linux-gnu-gcc: command not found 工具链没加到PATH 检查 ~/.bashrc 中的PATH配置
repo: command not found Repo没安装或没加PATH 手动安装到 ~/bin/ 并导出PATH
编译时提示 cannot find -lxxx 缺少某个库文件 sudo apt install libxxx-dev
重要提醒: 每次打开新终端,记得先 source ~/.bashrc 或者重新登录,确保环境变量生效。我见过有人配好了PATH,但忘了source,然后跑来问我为什么工具链用不了。

环境搭好了,后面编译SDK就顺了。嗯,这一章就到这儿,你照着步骤走一遍,应该不会出大问题。