2. 开发环境搭建:Ubuntu 22.04虚拟机配置、必要工具链安装、Repo工具配置

做嵌入式Linux开发,环境搭建是第一道坎。很多新手一上来就卡在这里——不是虚拟机装不上,就是工具链版本对不上。我刚开始搞Rockchip平台时也踩过不少坑,今天就把这些经验一次性说清楚。

2.1 为什么选择Ubuntu 22.04?

说白了,选哪个Ubuntu版本直接决定了你后面会不会被依赖问题折磨。我个人习惯用LTS版本,稳定、社区支持好、软件包新。

Ubuntu版本 内核版本 GCC默认版本 推荐指数
20.04 LTS 5.4 9.3 ⭐⭐⭐
22.04 LTS 5.15 11.2 ⭐⭐⭐⭐⭐
24.04 LTS 6.8 13.2 ⭐⭐⭐⭐

为什么我推荐22.04?因为Rockchip官方SDK(比如RK3588的Linux SDK)在22.04上测试最充分。24.04虽然新,但有些老工具链的兼容性问题还没完全解决。嗯,这里要注意:千万别用非LTS版本,半年一升级能把人搞疯。

2.2 虚拟机配置要点

我建议用VMware Workstation Pro 17或VirtualBox 7.x。配置给够,但别贪多。

推荐虚拟机配置(RK3588级别项目):

  • CPU:4-8核(物理机的一半以内)
  • 内存:16GB起步,建议32GB
  • 硬盘:200GB以上(SDK编译一次就要吃掉80-120GB)
  • 网络:NAT模式 + 主机端口转发

我曾经犯过一个低级错误——给虚拟机分配了全部物理核心,结果宿主机卡死,编译到一半直接崩了。记住:虚拟机不是越猛越好,要给宿主机留余地。

2.3 必要工具链安装

装完系统第一件事,更新源并安装基础依赖。别跳过这步,我见过有人直接编译报错,查了半天发现是缺少libssl-dev。

# 更新软件源
sudo apt update && sudo apt upgrade -y

# 安装基础开发工具
sudo apt install -y \
    git \
    vim \
    build-essential \
    cmake \
    python3 \
    python3-pip \
    python3-venv \
    libssl-dev \
    libncurses5-dev \
    u-boot-tools \
    device-tree-compiler \
    bison \
    flex \
    swig \
    libpython3-dev \
    bc \
    rsync \
    cpio \
    unzip \
    wget \
    curl \
    file \
    lzop \
    zstd \
    pkg-config \
    libtool \
    autoconf \
    automake \
    texinfo \
    help2man \
    gawk \
    chrpath \
    diffstat \
    ninja-build \
    meson

小技巧:如果你网络不好,可以配置国内镜像源。我个人习惯用清华源,速度稳定。配置方法:修改/etc/apt/sources.list,把archive.ubuntu.com换成mirrors.tuna.tsinghua.edu.cn。

2.4 交叉编译工具链

Rockchip平台用ARM64架构,所以需要aarch64交叉编译工具链。有两种方式获取:

  1. 从Linaro官方下载(推荐,版本可控)
  2. 使用apt直接安装(方便但版本固定)
# 方式一:apt安装(适合快速验证)
sudo apt install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu

# 方式二:Linaro工具链(推荐生产环境)
wget https://releases.linaro.org/components/toolchain/binaries/latest-7/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/
echo 'export PATH=$PATH:/opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin' >> ~/.bashrc
source ~/.bashrc

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

避坑指南:我曾经用apt装的gcc-aarch64-linux-gnu版本是9.x,结果编译RK3399的kernel时链接报错。后来换成Linaro 7.5.0才搞定。建议:先查SDK文档要求的工具链版本,再动手装。

2.5 Repo工具配置

Repo是Google开发的Git仓库管理工具,Rockchip SDK动辄上百个Git仓库,没有Repo根本管不过来。

2.5.1 安装Repo

# 创建bin目录
mkdir -p ~/bin

# 下载Repo脚本
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
# 国内用户可以用清华源
# curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo

# 添加执行权限
chmod a+x ~/bin/repo

# 配置环境变量
echo 'export PATH=$PATH:~/bin' >> ~/.bashrc
source ~/.bashrc

# 验证
repo --version

2.5.2 配置Git用户信息

Repo依赖Git,所以先配好Git身份:

git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
git config --global color.ui auto

2.5.3 初始化SDK仓库

以RK3588 SDK为例:

# 创建工作目录
mkdir rk3588_sdk && cd rk3588_sdk

# 初始化manifest仓库
repo init -u https://github.com/rockchip-linux/manifests -b master -m rk3588_linux.xml

# 同步所有子仓库(这一步很慢,建议用-j参数)
repo sync -j8 --no-tags

经验之谈:repo sync如果中途断了,重新执行就行,它会断点续传。我第一次同步RK3588 SDK时,200多个仓库同步了将近2小时。建议用repo sync -c -j8只同步当前分支,能省不少时间。

2.6 环境验证

装完所有东西后,跑一个快速验证脚本:

#!/bin/bash
echo "=== 环境验证脚本 ==="

# 检查工具链
echo -n "交叉编译工具链: "
aarch64-linux-gnu-gcc --version &>/dev/null && echo "OK" || echo "FAIL"

# 检查Repo
echo -n "Repo工具: "
repo --version &>/dev/null && echo "OK" || echo "FAIL"

# 检查必要工具
for tool in git make cmake python3; do
    echo -n "$tool: "
    which $tool &>/dev/null && echo "OK" || echo "FAIL"
done

echo "=== 验证完成 ==="

2.7 开发环境全景图

下面这张图把整个环境搭建的脉络理清楚了,你对照着看,哪一步漏了一目了然。

Rockchip嵌入式Linux开发环境搭建全景图 宿主机(Windows/macOS/Linux) 虚拟机:Ubuntu 22.04 LTS(VMware/VirtualBox) 基础环境:Git + Build-Essential + Python3 + CMake + Meson + Ninja 交叉编译工具链 aarch64-linux-gnu-gcc Repo工具 Git仓库管理 Rockchip SDK repo init + repo sync 环境验证:工具链版本 + Repo版本 + 必要工具 💡 提示:每一步都建议验证通过后再进行下一步,避免连锁问题

2.8 常见问题与解决

问题现象 原因 解决方案
repo: command not found PATH未包含~/bin 检查~/.bashrc中是否有export PATH=$PATH:~/bin
fatal: Unable to connect to github.com 网络问题或DNS 配置代理或使用国内镜像源
aarch64-linux-gnu-gcc: not found 工具链未安装或PATH未配置 重新执行source ~/.bashrc或手动添加PATH
编译报错undefined reference to ... 工具链版本不匹配 对照SDK文档,使用指定版本的Linaro工具链

最后提醒一句:环境搭建别图快。我见过太多人急着编译,结果环境没配好,报错后花几小时排查,最后发现是少装了一个libncurses-dev。按步骤来,每一步验证通过再往下走,反而最快。