2. 开发环境搭建(Linux):Ubuntu 20.04/22.04安装、配置国内软件源、安装Git、安装必要的编译工具链

说实话,做嵌入式开发这么多年,我踩过最多的坑就是环境问题。很多新手一上来就急着写代码,结果编译报错一大堆,最后发现是工具链没装对。嗯,咱们先把地基打牢。

2.1 为什么选Ubuntu 20.04/22.04?

你可能要问,为什么非得用Linux?我用Windows不行吗?

我的回答是:当然可以,但你会很痛苦。ArduPilot的官方支持环境就是Linux,尤其是Ubuntu。我个人习惯用Ubuntu 20.04 LTS,因为它稳定,而且很多第三方库对它的支持最好。22.04也可以,但有些老旧的工具链可能需要额外处理。

核心建议:如果你刚入门,直接上Ubuntu 20.04。别折腾其他发行版,省下的时间够你喝三杯咖啡。

2.2 安装Ubuntu(双系统或虚拟机)

这里我不展开讲怎么装系统,网上教程一抓一大把。我只说几个关键点:

  • 双系统:性能最好,适合长期开发。注意分区时给根目录留至少50GB,不然以后装库会哭。
  • 虚拟机:适合尝鲜或临时用。VMware或VirtualBox都行,内存给4GB以上,硬盘20GB起步。
  • WSL2:Windows用户可以考虑,但USB设备直连比较麻烦,烧录固件时可能掉坑。

警告:我曾经见过有人用虚拟机编译ArduPilot,结果内存只给了2GB,编译到一半直接卡死。嗯,血的教训。

2.3 配置国内软件源

装好系统第一件事是什么?换源!不然你apt install一个包,下载速度能让你怀疑人生。

我个人习惯用清华源或阿里源,速度都很快。操作很简单:

# 备份原源文件
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

# 编辑源文件
sudo vim /etc/apt/sources.list

# 以清华源为例(Ubuntu 20.04),把内容替换成下面这些:
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse

# 更新
sudo apt update
sudo apt upgrade -y

小技巧:如果你是Ubuntu 22.04,把上面源里的"focal"换成"jammy"就行。别问我怎么知道的,我当年也是一个个试出来的。

2.4 安装Git

Git是版本控制的标配,ArduPilot的代码全在GitHub上。安装很简单:

sudo apt install git -y

# 配置基本信息(不改也能用,但建议设一下)
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"

# 验证安装
git --version

为什么要配用户名和邮箱?因为每次提交代码都会记录这些信息。我刚开始做开源贡献时忘了配,结果提交记录里显示"unknown",被维护者骂了一顿……

2.5 安装编译工具链

这是最核心的部分。ArduPilot的固件编译需要交叉编译工具链,说白了就是在一台电脑上编译出能在另一台设备(比如STM32、Pixhawk)上运行的代码。

2.5.1 安装gcc-arm-none-eabi

这是ARM Cortex-M系列芯片的编译器。ArduPilot的飞控固件主要跑在STM32上,所以这个必须装。

# 方法一:直接用apt安装(推荐)
sudo apt install gcc-arm-none-eabi -y

# 验证安装
arm-none-eabi-gcc --version

# 方法二:从ARM官网下载最新版(如果你需要特定版本)
# 下载链接:https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm
# 下载后解压,然后添加到PATH

注意:apt安装的版本可能不是最新的,但足够用。我建议新手直接用apt,省心。等以后需要调试特定bug时再考虑手动安装。

2.5.2 安装Python3和pip

ArduPilot的编译脚本和很多工具都是用Python写的。Ubuntu 20.04/22.04默认自带Python3,但pip可能需要单独装。

# 安装python3和pip
sudo apt install python3 python3-pip -y

# 验证
python3 --version
pip3 --version

# 安装一些常用的Python包(后面编译时会用到)
pip3 install --user pyserial empy future

为什么要装pyserial?因为烧录固件时需要通过串口和飞控板通信。empy是模板引擎,编译脚本里会用到。这些我都是在实际项目中踩坑后才明白的。

2.5.3 其他必要工具

还有一些小工具,虽然不直接参与编译,但少了它们你会很头疼:

sudo apt install cmake ninja-build ccache -y
  • cmake:构建系统,ArduPilot用它来管理编译过程。
  • ninja-build:加速编译,比make快不少。
  • ccache:缓存编译结果,第二次编译时能省一半时间。

个人经验:ccache这东西,你第一次编译时感觉不到它的存在,但当你改了一行代码重新编译时,它会让你感动到哭。

2.6 验证环境是否搭建成功

装完所有东西后,别急着高兴。先跑个简单的测试,确保环境没问题:

# 写一个简单的C程序
echo '#include <stdio.h>
int main() {
    printf("Hello, ArduPilot!\n");
    return 0;
}' > test.c

# 用arm-none-eabi-gcc编译
arm-none-eabi-gcc -mcpu=cortex-m4 -mthumb -o test.elf test.c

# 查看生成的elf文件
ls -lh test.elf

如果没报错,说明工具链装好了。如果报错说找不到头文件,嗯……回去检查一下gcc-arm-none-eabi有没有装对。

2.7 知识体系总览

下面这张图帮你理清本章的核心逻辑:

开发环境搭建核心流程 Ubuntu 20.04/22.04 配置国内软件源 安装Git gcc-arm-none-eabi Python3 + pip + 依赖包 cmake + ninja + ccache 按顺序安装,缺一不可

2.8 常见问题与避坑

最后,分享几个我实际遇到过的问题:

  • 问题1:apt install时提示"无法定位软件包"。多半是源没配好,或者没执行sudo apt update。
  • 问题2:arm-none-eabi-gcc装好了但编译报错"找不到头文件"。检查一下是不是装了32位版本的库,64位系统需要安装lib32ncurses5等兼容库。
  • 问题3:pip安装包时提示"externally-managed-environment"。这是Ubuntu 22.04的新特性,用pip3 install --user或者创建虚拟环境解决。

我曾经踩过的坑:有一次我装完所有工具链,编译ArduPilot时一直报错,折腾了两天。最后发现是ccache的缓存出了问题,清空缓存后一切正常。所以,如果遇到莫名其妙的编译错误,先试试ccache -C清空缓存。

好了,环境搭好了,下一章咱们就开始拉代码、编译固件。记住,环境搭建这一步慢一点没关系,后面会快起来的。


专注资料整理