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 知识体系总览
下面这张图帮你理清本章的核心逻辑:
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清空缓存。
好了,环境搭好了,下一章咱们就开始拉代码、编译固件。记住,环境搭建这一步慢一点没关系,后面会快起来的。