第二章:开发环境搭建——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 知识体系总览

下面这张图把本章的知识点串起来了。你可以把它当作一个检查清单:

开发环境搭建知识体系 PX4编译环境 Ubuntu 20.04 LTS 磁盘≥50GB · 64位系统 Git版本控制 SSH密钥 · 用户配置 ARM工具链 gcc-arm-none-eabi 10.3 系统依赖包 python3-* · ninja-build libgstreamer · ccache Python工具包 kconfiglib · jsonschema 验证编译 make px4_fmu-v5_default

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都行,但别用动态分配,固定大小性能更好。