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 安装步骤
- 用Rufus把ISO写入U盘,注意分区类型选GPT,目标系统选UEFI。
- 重启电脑,进BIOS(一般是F2/F12/Del),关闭Secure Boot,U盘启动设为第一项。
- 进入Ubuntu安装界面,选“Install Ubuntu”。
- 分区时选“Something else”,手动划分:
/boot:1GB,主分区/:剩余空间,逻辑分区swap:电脑内存大小(比如16GB内存就分16GB)
- 安装完成后重启,应该能看到GRUB引导菜单,可以选择进Ubuntu还是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
\\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 创建虚拟机
- 下载并安装VirtualBox。
- 点击“新建”,名称填“Ubuntu 20.04”,类型选Linux,版本选Ubuntu 64-bit。
- 内存分配至少4GB(我建议8GB)。
- 虚拟硬盘选VDI,动态分配,大小至少50GB。
- 在“设置”->“存储”里加载Ubuntu ISO镜像。
- 启动虚拟机,按正常流程安装Ubuntu。
2.4.2 增强功能与USB支持
安装完系统后,记得装VirtualBox增强功能:
sudo apt install build-essential dkms linux-headers-$(uname -r)
sudo /media/<用户名>/VBox_GAs_*/VBoxLinuxAdditions.run
然后在虚拟机设置里启用USB控制器,把飞控设备添加到USB筛选器。
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 知识体系总览
下面这张图把三种方案的定位和关系梳理清楚了。你想想看,其实核心就三个维度:性能、便利性、隔离性。没有完美的方案,只有最适合你的方案。