第二章:开发环境搭建——Ubuntu系统安装、Git工具配置、交叉编译工具链安装、依赖包安装
说实话,做嵌入式飞控开发,环境搭建这一步最容易被忽视。很多人急着写代码,结果编译报错一查就是工具链没装对。我当年刚接触PX4时也踩过这个坑——折腾了两天才发现是依赖包版本不匹配。这一章咱们就把这些基础工作做扎实,后面编译固件才能一气呵成。
本章核心目标:在Ubuntu系统上搭建一套完整的PX4固件编译环境,包括Git版本控制、交叉编译工具链以及所有必要的依赖包。完成后,你能从零开始编译一份PX4固件。
2.1 Ubuntu系统安装与基础配置
PX4官方推荐使用Ubuntu 20.04 LTS(长期支持版)。为什么?因为它的软件源稳定,依赖包兼容性好。我试过在22.04上编译,虽然也能跑,但有些库需要手动降级,挺麻烦的。
安装要点:
- 版本选择:Ubuntu 20.04.6 LTS(64位),别用32位,PX4编译需要64位环境
- 磁盘分区:建议给根目录(/)至少50GB空间。我有个项目编译了三次就把30GB撑爆了,你想想看
- 网络配置:确保能访问GitHub和Ubuntu软件源,必要时配置代理
装好系统后,第一件事就是更新软件源:
sudo apt update
sudo apt upgrade -y
嗯,这里要注意:upgrade可能会更新内核,如果不想重启,可以用sudo apt dist-upgrade替代。我个人习惯装完系统先重启一次,确保内核加载正常。
2.2 Git工具配置
Git是PX4开发的命脉。你要从GitHub拉取源码、切换分支、提交修改,全都靠它。配置其实不复杂,但有几个细节容易忽略。
基础配置:
git config --global user.name "你的名字"
git config --global user.email "你的邮箱@example.com"
git config --global core.editor vim
git config --global color.ui auto
这里有个坑:邮箱必须和GitHub账号绑定的邮箱一致,否则提交记录不会关联到你的账号。我曾经因为用了公司邮箱,结果GitHub上贡献图一片空白……
SSH密钥配置(推荐):
用HTTPS拉取代码每次都要输密码,太烦了。配置SSH密钥一劳永逸:
ssh-keygen -t rsa -b 4096 -C "你的邮箱"
# 一直回车,默认路径即可
cat ~/.ssh/id_rsa.pub
# 复制输出内容,添加到GitHub Settings → SSH and GPG keys
配置完后测试一下:
ssh -T git@github.com
# 看到 "Hi xxx! You've successfully authenticated" 就对了
小技巧:如果你同时有多个GitHub账号(比如工作和个人),可以在~/.ssh/config里配置不同的Host别名,避免冲突。我一般用github-work和github-personal区分。
2.3 交叉编译工具链安装
交叉编译,说白了就是在PC上编译出能在ARM芯片上运行的代码。PX4飞控用的STM32系列就是ARM Cortex-M内核,所以我们需要ARM交叉编译工具链。
安装GCC ARM工具链:
sudo apt install gcc-arm-none-eabi
# 验证安装
arm-none-eabi-gcc --version
如果看到版本号,说明装好了。但要注意:Ubuntu软件源里的版本可能比较旧。PX4官方推荐使用GCC 10.3-2021.10或更新版本。你可以从ARM官网下载最新版:
# 下载并解压到 /opt
wget https://developer.arm.com/-/media/Files/downloads/gnu-rm/10.3-2021.10/gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2
sudo tar xjf gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2 -C /opt/
# 添加环境变量
echo 'export PATH=$PATH:/opt/gcc-arm-none-eabi-10.3-2021.10/bin' >> ~/.bashrc
source ~/.bashrc
注意:不要同时安装多个版本的ARM工具链,否则arm-none-eabi-gcc可能会指向旧版本。我建议只保留一个,或者用update-alternatives管理优先级。
2.4 依赖包安装
PX4编译需要一堆依赖库。别怕,一条命令全搞定:
sudo apt install \
python3-pip \
python3-empy \
python3-jinja2 \
python3-yaml \
python3-numpy \
python3-matplotlib \
python3-pygments \
ninja-build \
protobuf-compiler \
libprotobuf-dev \
libxml2-dev \
libxslt1-dev \
libssl-dev \
libcurl4-openssl-dev \
libgstreamer1.0-dev \
libgstreamer-plugins-base1.0-dev \
libudev-dev \
libsdl2-dev \
ccache
这里面有几个关键包:
- python3-empy、jinja2、yaml:PX4的构建系统(CMake + Python)依赖它们生成配置文件
- ninja-build:比make更快的构建工具,PX4默认用ninja
- ccache:编译缓存,第二次编译能快50%以上。我强烈建议装上
- libgstreamer:如果你要用摄像头或视频流,这个必须装
装完依赖后,还需要安装PX4的Python工具包:
pip3 install --user kconfiglib jsonschema
# 注意:不要用sudo pip,容易破坏系统Python环境
2.5 验证环境:编译一次PX4固件
环境搭没搭好,跑一次编译就知道了。咱们用PX4官方的make命令来验证:
# 克隆PX4源码(如果还没克隆)
git clone https://github.com/PX4/PX4-Autopilot.git --recursive
cd PX4-Autopilot
# 编译px4_fmu-v5(Pixhawk 4的固件)
make px4_fmu-v5_default
第一次编译会比较慢,因为要下载子模块、编译所有依赖。我的经验是:20分钟到1小时不等,取决于你的网络和CPU性能。如果看到类似这样的输出,说明成功了:
[100%] Built target px4_fmu-v5_default
-- Build finished: 0 errors, 0 warnings
加速技巧:用make px4_fmu-v5_default -j$(nproc)可以并行编译,充分利用多核CPU。我一般设成-j4,因为编译时内存占用会飙升,太多线程容易卡死。
2.6 知识体系总览
下面这张图把本章的知识点串起来了。你可以把它当作一个检查清单:
2.7 常见问题与避坑指南
| 问题现象 | 可能原因 | 解决方法 |
|---|---|---|
arm-none-eabi-gcc: command not found |
工具链未安装或PATH未配置 | 检查/opt/gcc-arm-none-eabi-*/bin是否存在,重新source ~/.bashrc |
fatal: unable to access 'https://...' |
网络问题或Git配置错误 | 检查代理设置,或改用SSH方式克隆 |
编译报错No module named 'empy' |
Python依赖未安装 | pip3 install empy 或 sudo apt install python3-empy |
编译卡在Fetching submodule |
子模块下载慢或失败 | 使用git submodule update --init --recursive --depth=1减少下载量 |
重要提醒:如果你用的是虚拟机(如VirtualBox、VMware),建议给虚拟机分配至少4GB内存和2个CPU核心。我试过2GB内存编译,直接卡死……另外,虚拟机磁盘类型选VDI或VMDK都行,但别用动态分配,固定大小性能更好。