2. 开发环境准备:在 Ubuntu 22.04 上搭建基础开发环境

说实话,很多新手在 ArduPilot 仿真联调上栽跟头,十有八九是环境没搭对。我见过太多人花了一整天装工具链,结果编译报错,最后发现是交叉编译链版本不对。所以这一章,咱们把基础打牢。

Ubuntu 22.04 是我个人比较推荐的版本。它稳定,软件源也新。你想想看,如果系统本身就有兼容性问题,后面排查起来会非常痛苦。下面我带你一步步把 Git、Python3、pip 和 gcc-arm-none-eabi 装好,并且验证它们都能正常工作。

2.1 更新系统与安装 Git

拿到一台新 Ubuntu 机器,第一件事就是更新软件源。这就像出门前检查轮胎气压一样,是个好习惯。

sudo apt update
sudo apt upgrade -y

然后安装 Git。Git 是版本控制的基础,ArduPilot 的代码仓库就托管在 GitHub 上。

sudo apt install git -y

装完之后,验证一下版本:

git --version

你应该会看到类似 git version 2.34.1 的输出。如果没看到,检查一下网络或者源配置。

我的习惯: 装完 Git 后,我会顺手配一下用户名和邮箱。虽然不配也能用,但提交代码时会有提示,挺烦人的。
git config --global user.name "你的名字"
git config --global user.email "你的邮箱@example.com"

2.2 安装 Python3 与 pip

ArduPilot 的编译脚本、仿真工具很多都是用 Python 写的。Ubuntu 22.04 默认带了 Python3,但咱们得确认一下版本,顺便把 pip 装上。

python3 --version
sudo apt install python3-pip -y

我建议你检查一下 pip 的版本:

pip3 --version

如果一切正常,你会看到类似 pip 22.0.2 from /usr/lib/python3/dist-packages/pip (python 3.10) 的信息。

注意: 千万不要用 sudo pip install 来装系统级的 Python 包。我曾经因为这样干,把系统自带的包管理器搞坏了,最后只能重装系统。建议用 --user 参数或者创建虚拟环境。

2.3 安装 gcc-arm-none-eabi 交叉编译链

这是最关键的一步。ArduPilot 编译出来的固件要跑在 STM32 这类 ARM 单片机上,所以咱们需要交叉编译链。说白了,就是在 PC 上编译出能在 ARM 芯片上运行的机器码。

Ubuntu 的官方源里其实有 gcc-arm-none-eabi,但版本比较老。我个人习惯从 ARM 官方获取最新版,避免踩坑。

方法一:通过 apt 安装(简单,但版本可能较旧)

sudo apt install gcc-arm-none-eabi -y

方法二:从 ARM 官方下载(推荐)

去 ARM 的开发者网站下载最新的 Linux 版本。我写这个教程时,推荐的是 10.3-2021.10 或更新的版本。下载后解压,然后把 bin 目录加到 PATH 里。

# 假设你下载到了 ~/Downloads 目录
cd ~/Downloads
tar -xjf gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2
sudo mv gcc-arm-none-eabi-10.3-2021.10 /opt/

# 配置环境变量(加到 ~/.bashrc 或 ~/.zshrc 里)
echo 'export PATH=$PATH:/opt/gcc-arm-none-eabi-10.3-2021.10/bin' >> ~/.bashrc
source ~/.bashrc
验证安装:
arm-none-eabi-gcc --version
你应该能看到类似 arm-none-eabi-gcc (GNU Arm Embedded Toolchain 10.3-2021.10) 10.3.1 20210824 (release) 的输出。

2.4 验证环境:一个简单的编译测试

光装完不行,得跑个例子验证一下。咱们写一个最简单的 C 程序,用交叉编译链编译成 ARM 的机器码。

创建一个测试文件 test.c:

#include <stdio.h>

int main() {
    printf("Hello, ArduPilot!\n");
    return 0;
}

然后编译它:

arm-none-eabi-gcc --specs=nosys.specs -o test.elf test.c

如果没报错,说明交叉编译链工作正常。你可以用 file 命令看看生成的文件:

file test.elf

输出应该是 ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV) 之类的信息。看到 ARM 字样,就说明咱们的交叉编译环境没问题。

避坑指南: 我曾经在编译 ArduPilot 时遇到 arm-none-eabi-gcc: not found 的错误。排查了半天,发现是 PATH 没生效。记得 source ~/.bashrc 或者重新打开终端。

2.5 知识体系总览

下面这张图帮你理清今天装的所有东西之间的关系。别小看这些基础工具,它们是整个仿真联调环境的基石。

开发环境知识体系 Ubuntu 22.04 操作系统 Git (版本控制) Python3 + pip gcc-arm-none-eabi git --version python3 --version arm-none-eabi-gcc --version ArduPilot 仿真联调环境 每个组件安装后都必须验证,确保 PATH 正确、版本兼容

2.6 常见问题与排查

问题现象 可能原因 解决方法
git: command not found Git 未安装或 PATH 未更新 重新执行 sudo apt install git
pip3: command not found python3-pip 未安装 执行 sudo apt install python3-pip
arm-none-eabi-gcc: not found 交叉编译链未加入 PATH 检查 /opt/ 目录,重新配置 ~/.bashrc
编译时提示 stdio.h: No such file or directory 缺少 newlib 库 重新安装完整版的 gcc-arm-none-eabi,或添加 --specs=nosys.specs
重要提醒: 如果你用的是 WSL2 或者虚拟机,记得给 Ubuntu 分配至少 4GB 内存和 20GB 磁盘空间。ArduPilot 源码编译时挺吃资源的,我曾经在 2GB 内存的虚拟机上编译,等了两个小时还没结束,最后直接卡死了。

好了,到这里基础开发环境就搭好了。你手头现在应该有 Git、Python3、pip 和交叉编译链,并且都验证通过了。这些工具就像厨师手里的刀和砧板,后面咱们切菜(写代码)、炒菜(编译固件)就全靠它们了。