2. PX4固件编译与烧录方法:Ubuntu开发环境搭建(双系统/WSL/虚拟机)

做PX4开发,第一步就是搭环境。这事说简单也简单,说坑也多。我见过不少新手在环境搭建上卡了一两天,最后发现是某个小细节没注意。

Ubuntu是PX4官方推荐的主开发系统。但问题来了——很多人电脑上已经有Windows了,不想重装。那怎么办?三种主流方案:双系统、WSL、虚拟机。我三种都用过,今天把各自的优缺点和实操步骤掰开揉碎讲清楚。

2.1 三种方案怎么选?先看对比

别急着动手,先搞清楚自己适合哪种。我直接给结论:

方案 性能 硬件直通 磁盘占用 适合人群
双系统 原生性能,满血 完全直通 大(独立分区) 主力开发,长期使用
WSL2 接近原生 USB需额外配置 小(动态扩展) Windows重度用户,轻度编译
虚拟机 有损耗(约10-20%) USB可映射 中等(固定大小) 尝鲜、测试、不想动系统

我个人习惯:如果打算长期搞PX4开发,直接上双系统。WSL适合临时改个代码、跑个编译。虚拟机嘛……说实话,我只有在给别人做演示时才用,因为方便快照回滚。

2.2 方案一:双系统(推荐)

双系统是最稳的方案。Ubuntu直接跑在裸机上,编译速度最快,USB直连飞控没有任何中间层。我在项目中遇到过好几次,虚拟机下USB识别不稳定,换双系统后一次搞定。

2.2.1 准备工作

  • 一个至少8GB的U盘(做启动盘)
  • Ubuntu 20.04 LTS或22.04 LTS的ISO镜像(我建议用20.04,兼容性更好)
  • Windows下用Rufus或balenaEtcher写盘工具
  • 硬盘预留至少50GB空闲空间(我建议100GB,因为后面要装依赖、下载源码、编译)

2.2.2 安装步骤

  1. 用Rufus把ISO写入U盘,注意分区类型选GPT,目标系统选UEFI。
  2. 重启电脑,进BIOS(一般是F2/F12/Del),关闭Secure Boot,U盘启动设为第一项。
  3. 进入Ubuntu安装界面,选“Install Ubuntu”。
  4. 分区时选“Something else”,手动划分:
    • /boot:1GB,主分区
    • /:剩余空间,逻辑分区
    • swap:电脑内存大小(比如16GB内存就分16GB)
  5. 安装完成后重启,应该能看到GRUB引导菜单,可以选择进Ubuntu还是Windows。
注意:安装前一定要备份Windows数据!我曾经手滑选错了分区,把整个盘格了……嗯,血的教训。

2.3 方案二:WSL2(Windows Subsystem for Linux)

如果你不想重启电脑,又想要Linux环境,WSL2是目前最好的折中方案。它不像虚拟机那样有完整内核,但编译PX4完全够用。

2.3.1 启用WSL2

在Windows PowerShell(管理员)里执行:

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

重启电脑后,去微软商店搜索“Ubuntu 20.04”并安装。

2.3.2 配置WSL2

安装完成后,打开Ubuntu终端,先更新:

sudo apt update && sudo apt upgrade -y

然后设置默认版本为WSL2:

wsl --set-default-version 2
小技巧:WSL2的文件系统在Windows里可以通过 \\wsl$\Ubuntu-20.04 访问。我经常在Windows下用VS Code直接编辑WSL里的代码,非常方便。

2.3.3 USB设备直通

WSL2默认不支持USB。要连接飞控,需要安装usbipd-win:

winget install --interactive --exact dorssel.usbipd-win

然后在Windows终端里绑定USB设备:

usbipd wsl list
usbipd wsl attach --busid <你的设备BUSID>

嗯,这一步确实比双系统麻烦。所以我建议:如果经常要插拔飞控调试,还是双系统省心。

2.4 方案三:虚拟机(VirtualBox / VMware)

虚拟机适合不想动现有系统、或者只是临时测试的情况。我一般用VirtualBox,免费且够用。

2.4.1 创建虚拟机

  1. 下载并安装VirtualBox。
  2. 点击“新建”,名称填“Ubuntu 20.04”,类型选Linux,版本选Ubuntu 64-bit。
  3. 内存分配至少4GB(我建议8GB)。
  4. 虚拟硬盘选VDI,动态分配,大小至少50GB。
  5. 在“设置”->“存储”里加载Ubuntu ISO镜像。
  6. 启动虚拟机,按正常流程安装Ubuntu。

2.4.2 增强功能与USB支持

安装完系统后,记得装VirtualBox增强功能:

sudo apt install build-essential dkms linux-headers-$(uname -r)
sudo /media/<用户名>/VBox_GAs_*/VBoxLinuxAdditions.run

然后在虚拟机设置里启用USB控制器,把飞控设备添加到USB筛选器。

注意:虚拟机下编译PX4,我实测比双系统慢15%左右。如果电脑配置不高(比如8GB内存),编译时可能会卡死。建议至少16GB内存。

2.5 环境搭建后的验证

不管用哪种方案,装完Ubuntu后都要验证一下环境是否正常。我习惯先跑几个基础命令:

uname -a
lsb_release -a
gcc --version
python3 --version

然后安装PX4的依赖包。官方脚本一键搞定:

git clone https://github.com/PX4/PX4-Autopilot.git --recursive
cd PX4-Autopilot
bash ./Tools/setup/ubuntu.sh

这个脚本会安装所有编译工具链。跑完大概20-30分钟,取决于网速。我建议用代理,不然有些包下载很慢。

核心要点:

  • 双系统:性能最好,适合长期开发
  • WSL2:方便切换,USB直通稍麻烦
  • 虚拟机:隔离性好,性能有损耗
  • 无论哪种方案,Ubuntu 20.04 LTS是最稳妥的选择

2.6 知识体系总览

下面这张图把三种方案的定位和关系梳理清楚了。你想想看,其实核心就三个维度:性能、便利性、隔离性。没有完美的方案,只有最适合你的方案。

Ubuntu开发环境搭建方案对比 PX4开发环境 双系统 WSL2 虚拟机 特性 ✅ 原生性能 ✅ USB直通 ❌ 需重启切换 特性 ✅ 接近原生 ✅ 无缝切换 ⚠️ USB需配置 特性 ✅ 隔离性好 ✅ 快照回滚 ❌ 性能损耗 推荐场景 长期开发、主力机 推荐场景 轻度编译、临时改代码 推荐场景 测试、演示、尝鲜 核心原则:性能优先选双系统,便利优先选WSL2,隔离优先选虚拟机 没有完美的方案,只有最适合你的方案