源码获取与编译环境搭建

好,咱们正式开始动手了。这一章的目标很明确:把PX4源码拉下来,把编译环境配好,然后跑通第一次编译。别小看这一步,我见过太多人卡在环境配置上,一卡就是好几天。说白了,飞控开发的门槛不在算法多难,而在于你得先把这堆工具链伺候好。

从GitHub拉取PX4源码

我个人习惯用git clone--recursive参数。为什么?因为PX4依赖很多子模块,比如uORB、drivers这些,不加这个参数你后面还得手动拉,麻烦。

cd ~
git clone https://github.com/PX4/PX4-Autopilot.git --recursive

嗯,这里要注意:网络问题。GitHub有时候抽风,尤其是拉子模块的时候。我在项目中遇到过,公司内网连GitHub慢得要命,最后换了代理才搞定。如果你也遇到类似情况,可以试试用国内镜像,或者挂个稳定的VPN。

避坑指南:我曾经因为网络中断导致子模块拉取不完整,编译时报了一堆莫名其妙的错误。建议拉完后执行 git submodule update --init --recursive 确认一下。

拉完以后,你会看到PX4-Autopilot目录。进去看看,里面东西挺多的。别慌,咱们只关心几个关键目录:

  • src/ — 核心源码,飞控算法都在这里
  • boards/ — 板级支持包,不同硬件平台的配置
  • build/ — 编译产物,第一次编译后才会生成
  • Tools/ — 辅助脚本,比如仿真、调试工具

配置Ubuntu下的交叉编译环境

交叉编译,说白了就是在PC上编译出能在飞控板上运行的代码。你想想看,飞控板上的ARM芯片性能有限,不可能在上面直接跑编译器。所以咱们得在Ubuntu上装一套ARM交叉编译工具链。

PX4官方推荐用ubuntu.sh脚本一键安装。我个人建议先看看这个脚本里装了啥,别盲目跑。我踩过坑,脚本默认装的东西太多,有些根本用不上。

cd ~/PX4-Autopilot
bash ./Tools/setup/ubuntu.sh

这个脚本会帮你装好:

组件 用途
gcc-arm-none-eabi ARM交叉编译器
cmake 构建系统
python3-pip Python依赖管理
genromfs 文件系统生成工具
小技巧:如果你用的是Ubuntu 20.04或22.04,建议先更新一下软件源再跑脚本。我遇到过因为源太旧导致gcc版本不对,编译出来的固件飞控板不认。

脚本跑完以后,验证一下工具链是否装好:

arm-none-eabi-gcc --version

如果能看到版本号,说明交叉编译器装好了。嗯,这里有个细节:版本号不能太低。PX4对gcc版本有要求,太老的版本编译会报错。我建议至少10.3以上。

完成首次编译

环境配好了,咱们来编译一个目标。PX4支持很多硬件平台,比如Pixhawk系列、CUAV系列、甚至树莓派。咱们先拿px4_fmu-v5练手,这是Pixhawk 4的板子,最常见。

cd ~/PX4-Autopilot
make px4_fmu-v5

第一次编译会比较慢,因为要下载依赖、编译所有模块。我建议你泡杯咖啡等着。编译过程中你会看到很多输出,别被吓到,那是正常的。

如果一切顺利,最后会看到类似这样的信息:

-- Build finished
-- Firmware size: 1234567 bytes
-- Build root: /home/yourname/PX4-Autopilot/build/px4_fmu-v5_default

看到Build finished就说明成功了。编译产物在build/px4_fmu-v5_default目录下,其中px4_fmu-v5_default.px4就是咱们要的固件文件。

常见错误:如果你遇到arm-none-eabi-gcc: not found,说明工具链没装好。回去重新跑ubuntu.sh,或者手动安装gcc-arm-none-eabi。我曾经因为PATH没配置对,折腾了半小时才发现。

本章知识体系

为了让你更直观地理解这一章的内容,我画了一张流程图:

源码获取与编译环境搭建流程 git clone 拉取源码 运行 ubuntu.sh 安装工具链 验证 gcc 版本 make px4_fmu-v5 编译 检查 Build finished ✅ 编译成功,固件就绪 失败 检查错误信息

这张图把整个流程串起来了。从拉取源码开始,到配置工具链,再到编译验证。每一步都有对应的检查点,确保你不会漏掉什么。

核心要点
  • 拉取源码务必加 --recursive,否则子模块缺失
  • 工具链版本要匹配,太老或太新都可能出问题
  • 第一次编译耐心等待,后续增量编译会快很多

好了,环境搭好了,源码也编译通过了。接下来你就可以开始研究位置控制器的代码了。记住,环境配置是基础中的基础,这一步走稳了,后面才能跑得快。


专注资料整理