Linux系统下搭建PX4/Pixhawk原生固件编译环境

2023-05-16

  • 简介

PX4固件是Pixhawk飞行控制器的官方固件,Pixhawk官网也给出了Linux/windows下搭建开发环境的方法。由于种种原因,搭建开发环境时总会遇到各种各样的bug,致使PX4固件编译失败。虽然官方给出了一键搭建开发环境的shell脚本,但是我不建议大家使用脚本搭建编译环境。自己搭建,遇到问题、解决问题,还能够顺便学习一下Linux系统。

这里先给出官方的教程。

http://dev.px4.io/zh/setup/dev_env_linux.html

  • Linux系统下搭建编译环境

官网上说的一句话,我非常的赞同,“永远不要使用sudo来修复权限问题,否则会带来更多的权限问题,需要重装系统来解决”。当你不理解这句话的含义时,记住它即可,它是官方给出的警告;博主经过无数次血泪教训、重装系统,才发现sudo su就是许多问题根源。如果想体验一下权限带来的种种bug,可以尝试使用sudo su为每一句代码开启root权限……

权限问题可以这样理解,假设在root权限下下载了PX4源码,那这个源码相当于windows系统中的系统文件,必须要管理员(root)才有权动用这个文件。当某些程序/软件需要访问源码,进行编译时,此程序/软件没有root权限,就无法访问到代码,致使编译出现问题,所以“永远不要使用sudo来修复权限问题,否则会带来更多的权限问题,需要重装系统来解决”。

那么现在就开始搭建编译环境。

  • 权限设置

不做这一步会产生很多上述的权限问题,如果用sudo去修复,那就……可以重装系统了。

# 把用户添加到用户组 “dialout”
sudo usermod -a -G dialout $USER

之后需要注销、重新登陆使用户组生效。

  • 安装必备编译软件Cmake、QT、Python等

# 添加源
sudo add-apt-repository ppa:george-edison55/cmake-3.x -y
# 更新软件
sudo apt-get update
# 安装python、git、qt
sudo apt-get install python-argparse git-core wget zip \
    python-empy qtcreator cmake build-essential genromfs -y
# 添加源
sudo add-apt-repository ppa:openjdk-r/ppa
# 更新
sudo apt-get update
# 安装仿真软件和需要的库文件,注意体验下面两句的区别(一句代码后有 -y ,一句没有)
sudo apt-get install openjdk-8-jre
sudo apt-get install ant protobuf-compiler libeigen3-dev libopencv-dev openjdk-8-jdk openjdk-8-jre clang-3.5 lldb-3.5 -y

添加源操作一般成功后会跳出一个“OK”,update成功后会有个“done”。

  • 卸载modemmanager模式管理器

sudo apt-get remove modemmanager

Ubuntu配备了一系列代理管理,这会严重干扰相关的串口(或usb串口),最明显的表现就是硬件连接到PC机后,无法读出硬件,无法烧录上传固件。

  • 更新、安装相关的库文件

# 添加源 添加第一个源时可能会出现Failed,不过没关系,继续添加第二个
# gcc-arm-none-eabi源添加Failed的问题后面会解决
sudo add-apt-repository ppa:terry.guo/gcc-arm-embedded -y
sudo add-apt-repository ppa:team-gcc-arm-embedded/ppa
# 检查更新,由于上面那个Failed,检查更新时,部分链接也可能访问不到
sudo apt-get update
# 不管那么多了,先把能安装的软件/库文件安装上,后面编译时缺什么再补装什么
sudo apt-get install python-serial openocd \
    flex bison libncurses5-dev autoconf texinfo build-essential \
    libftdi-dev libtool zlib1g-dev \
    python-empy gcc-arm-none-eabi -y
  • 安装正确版本的gcc-arm-none-eabi

还记的上面出现的那个Failed吗?实际我们安装的gcc-arm-none-eabi版本不支持源码,所以需要安装正确的版本。输入一下代码可以查看gcc-arm-none-eabi版本信息。

arm-none-eabi-gcc --version

我们需要的是GCC4.9.4或GCC5.4.3,如果看到如下的信息那就代表gcc-arm-none-eabi版本安装正确,直接跳到代码编译步骤即可,否则就按下述步骤重新安装gcc-arm-none-eabi。

  • 下载GCC4.9.4或5.4.3

GCC4.9.4

wget https://launchpad.net/gcc-arm-embedded/4.9/4.9-2015-q3-update/+download/gcc-arm-none-eabi-4_9-2015q3-20150921-linux.tar.bz2

GCC5.4.3

wget https://launchpad.net/gcc-arm-embedded/5.0/5-2016-q2-update/+download/gcc-arm-none-eabi-5_4-2016q2-20160622-linux.tar.bz2
  • 安装GCC

这里以GCC4.9.4为例,5.4.3的步骤类似。

pushd .
# 卸载新版的gcc-arm-none-eabi
sudo apt-get remove gcc-arm-none-eabi
# 安装下载好的gcc-arm-none-eabi
# 解压
tar -jxf gcc-arm-none-eabi-4_9-2015q3-20150921-linux.tar.bz2
# 移动
sudo mv gcc-arm-none-eabi-4_9-2015q3 /opt
exportline="export PATH=/opt/gcc-arm-none-eabi-4_9-2015q3/bin:\$PATH"
if grep -Fxq "$exportline" ~/.profile; then echo nothing to do ; else echo $exportline >> ~/.profile; fi
# 使路径生效
. ~/.profile
popd
  • 编译源码

  • 源码下载

首先需要安装一个库文件

sudo apt-get install lsb-core

有些学习链接会安装一个叫git-all的软件,这里不建议大家安装。Ubuntu16.04安装git-all会莫名的出现包管理器崩溃的ERROR,然后用网上找到的解决方法,重启后会白屏,我在这重装了3、4次系统还是没有解决这个问题。所以不建议安装git-all,这样也能下载源码,只不过速度有些慢。

下载源码

# 创建src文件夹
mkdir -p ~/src
# 进入文件夹
cd ~/src
# 克隆源码
git clone https://github.com/PX4/Firmware.git

如果下载速度很慢、非常慢、慢到龟速,可以Ctrl+X然后Ctrl+Z强制终止。之后进入src文件夹文件夹,把文件夹中已clone的代码删除,然后回到终端,进入src文件夹重新clone。

如果出现下面error错误,没关系,再次输入git clone https://github.com/PX4/Firmware.git,继续clone即可。这个错误是因为,clone时网速过慢导致的。按照上面的步骤,删除重新clone也可以。

之后需要进入Firmware文件夹,进行初始化、更新子模块操作,耐心的等待……

cd Firmware
git submodule update --init --recursive

初始化时可能会遇到同样的问题,更新模块的速度过慢,两种解决办法:

1.把src文件夹中所有东西动删除,重新下载源码然后初始化

2.Ctrl+X然后Ctrl+Z,进入正在clone的文件夹中,把文件夹删除,然后重新git submodule update --init --recursive。

例如,如上图,假设Clone Tools/jMAVSim的速度很慢(几B/s),就Ctrl+X然后Ctrl+Z,进入Firmware/Tools,把jMAVSim文件夹删除,然后重新git submodule update --init --recursive。

同理,初始化失败时只需要重新输入初始化命令即可。

  • 源码编译

到了源码编译这一步,里成功就不远了。源码编译的过程可能会非常坎坷,会遇到很多问题需要注意。

在src/Firmware目录下输入下面指令,make编译固件。

# make是操作字符 px4fmu是固件名称 -v2是版本号 _default是默认配置
# 实际make之后是一个文件名称,需要编译的模块都在其中
# 可以输入make p 然后按Tab键,会跳出一连串p开头的文件
make px4fmu-v2_default

然后,大概会遇到下面这个问题:

自己需要准确的定位到错误的原因。例如,这个错误实际是少安装了python的一个module造成的。如果下面没给出解决方案,直接谷歌,把红框中的那一句话贴上去,一般都能找到解决方案(会教你如何安装jinja2),不过现在下面给出了解决方案,我们直接安装即可。

sudo apt-get install python-jinja2

安装完毕之后,直接再次输入make px4fmu-v2_default,再次编译。

又会跳出几个Error,再次定位Error。

从最开始进行查找,会发现实际出现Error的原因是“Required python packages not installed”(查找错误原因的能力必须要掌握)。然后可以尝试一下系统给出的建议的解决方案。

sudo pip install numpy toml

然后系统会出现 “sudo: pip:command not found ”,这时就需要谷歌/百度大法了。把错误贴到搜索引擎里,根据搜索的结果去解决(实际是没有安装python的pip,假装不知道,谷歌查一查)。然后会找到帖子教我们安装pip,这里我们选择安装python2的pip。

sudo apt-get install python-pip

安装完毕之后再次用pip安装numpy toml。

sudo pip install numpy toml

继续重新输入指令make……编译固件(按↑键可以调出历史输入的指令),然后在100%时出现了一个Error。

 

我已经把错误原因给贴出来了,建议自己把原因百度一下,尝试去查找解决方案。

出现这个问题的原因是因为,px4的默认配置中添加的模块太多,编译出来的固件大小超出了默认的Flash大小,有两个方法可以解决。

1.注释掉不需要的模块(不怎么建议使用,后续会知道如何注释);

2.修改默认的Flash大小。

按照图片进入nuttx-configs文件夹,nuttx-configs里面存放的所有的固件的配置。

我们需要修改的是px4fmu-v2的配置,所以需要找到并进入px4fmu-v2这个文件夹。

然后进入scripts文件夹,找到ld.script,里面存放这px4fmu-v2的默认配置。

按照图片所示,把默认的LENGTH修改成2032k,保存,重新make编译固件。

最终显示这个界面就OK了。

  • 编译工具与IDE

  • Ninja

上面我们进行编译时,清一色的输入make、make、make。实际我们是用make进行编译的,make的编译速度并不快,这里根据大神的建议,采用Ninja进行编译。直接贴上大神的代码。

mkdir -p $HOME/ninja
cd $HOME/ninja
wget https://github.com/martine/ninja/releases/download/v1.6.0/ninja-linux.zip
unzip ninja-linux.zip
rm ninja-linux.zip
exportline="export PATH=$HOME/ninja:\$PATH"
if grep -Fxq "$exportline" ~/.profile; then echo nothing to do ; else echo $exportline >> ~/.profile; fi
. ~/.profile

按上面的方法配置好ninja之后,以后每次一make都会调用它,这样编译速度会更快。

可以把src/Firmware/build文件夹中的所有文件删除(make px4fmu-v2_default之后会在build中生成两个文件夹,将其删除之后才能再次make,否则会显示no work to do不进行编译),然后在src/Firmware目录下再次make,此时系统会自动调用Ninja,是不是快了很多……

  • QT

Qt Creator是官方唯一支持的IDE,在Ubuntu上针对PX4固件使用,便于看代码的同时也可以进行编译烧录。

下面安装QT。

sudo apt-get install qtcreator

在打开Qt之前,应该创建project文件:

cd ~/src/Firmware
mkdir ../Firmware-build
cd ../Firmware-build
cmake ../Firmware -G "CodeBlocks - Unix Makefiles" -DCONFIG=nuttx_px4fmu-v2_default

在搜索栏搜索并打开QT。

 

选择Open Project,进入Firmware目录,选择CMakeLists.txt,open。

点击Projects选项,Build下不需要改动。

Run选项下,点击ADD,添加Custom Exectable。

在红框中的两行分别输入make upload,然后点击绿色按钮,QT就开始编译源码固件了。

点击build的那个黑色方框,就能看到编译的进程(注意,QT编译完成之后会自动上传固件,这里没有连接硬件,会卡在100%,没法上传,看到100% uploadpx4,直接点击红色按钮结束上传就可以)

至此,源码的编译环境就基本配置完成了,可以随心所欲的看源码了。

  • 结束语

PX4源码是个很大的工程文件,下一篇我会对源码进行稍微的讲解,这一篇就到这里吧。

本文部分内容来自于官网和FantasyJXF大神的教学帖,下面附上这两个链接。

https://blog.csdn.net/oqqENvY12/article/details/52035127#t6

https://dev.px4.io/zh/setup/dev_env_linux.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux系统下搭建PX4/Pixhawk原生固件编译环境 的相关文章

  • Mac Eclipse Failed to load JavaHL Library.

    转自 xff1a http blog csdn net wy10207010219 article details 42294293 写这一篇前我想发表一下感慨 xff1a 你所害怕的事 xff0c 你想要逃避的事 xff0c 在将来的某个
  • Jetson TX2更换软件源

    本文转自 xff1a https blog csdn net qlulibin article details 80271096 TX2的软件源为国外服务器 xff0c 网速会很慢 xff0c 需要换国内的ARM源 备份 etc lib路径
  • 工作一年回忆录

    7月8号跟公司签订劳动合同开始至今已有一周年了 xff0c 是时候坐下想想自己活了些什么东东 这里叙述的都是工作技术记录过程 1 工作环境搭建配置的学习 使用的工具 xff1a sts maven svn tomcat mysql 技术 x
  • 镜头畸变现象及其校正方法

    摄像机校准一般采用小孔成像模型 xff0c 理想的小孔模型是线性模型 xff0c 但是由于存在镜头畸变等原因 xff0c 线性模型通常要加上一些内部参数 xff0c 变成非线性模型 现对产生这一现象的原理以及解决方法进行整理 xff0c 如
  • 【FreeRTOS学习计划】第三节 数据结构—列表与列表项

    本节的目标 我们想从0到1开始实现FreeRTOS xff0c 就需要弄懂列表和列表项的操作 xff0c 因为在FreeRTOS中存在着大量的基础数据结构列表和列表项的操作 FreeRTOS源码里注释的list和list item翻译过来就
  • 【FreeRTOS学习计划】第四节 任务的定义与任务切换的实现

    本节目标 本节属于基础中的基础 xff0c 必须要学会创建任务 xff0c 并重点掌握任务是如何切换的 因为在FreeRTOS任务的切换是由汇编代码来完成的 xff0c 所以代码看起来比较难懂 xff0c 我们耐心细看 本小节我们会创建两个
  • 【FreeRTOS学习计划】 第六节 空闲任务与阻塞延时的实现

    本节目标 我们在第四节任务的定义与任务切换的实现中 xff0c 任务体内的延时用的是软件延时 xff0c 即还是让 CPU 空等来达到延时的效果 使用 RTOS 的很大优势就是榨干 CPU 的性能 xff0c 永远不能让它闲着 xff0c
  • ROS学习笔记(一)ROS安装和helloworld

    ROS学习笔记 xff08 一 xff09 ROS安装和helloworld 文章目录 一 ros安装及测试1 打开ubuntu软件和更新 xff0c 进行如下设置2 设置安装源3 设置安装密钥4 更新软件源5 安装ros6 添加命令7 初
  • 网络管理协议 SNMP V3安装配置

    简单网络管理协议 xff08 SNMP xff09 是常见的一种监控手段 xff0c 目前snmp定义了三个版本的网络管理协议 xff1a SNMP v1 xff0c SNMP v2c xff0c SNMP v3 SNMP v1 xff0c
  • 【计算机游戏开发】游戏交互界面设计

    github项目地址 一 实验目的与要求 熟悉交互界面设计原理 了解Cocos2d x中的用户交互 触摸事件 碰撞检测机制 二 实验内容与方法 完成游戏编译 50分 仿照实验一 英雄快跑 实验 xff0c 将教材源码和素材文件复制到自己的项
  • 电子爱好者常备的工具和材料有哪些?

    万用表 xff1a 也叫多用表 一般可用于电压 电流 电阻的测量 有的还具 有电容 电感 频率测量等功能 电烙铁 xff1a 这个不用多说 xff0c 主要是用来焊接元器件 xff0c 有时也拿来烫烫硅胶 或者塑料什么的 根据加热元件的位置
  • 腾讯笔试

    1 字典序最小 牛牛有个无环的单链表 xff0c 牛可以不停的旋转这个链表 xff0c 比如链表 1 gt 2 gt 3 gt 4 经过旋转后可以变成以下4种链表 4 gt 1 gt 2 gt 3 3 gt 4 gt 1 gt 2 2 gt
  • STM32学习心得(第一天)

    作为一名刚接触STM32的初学者 xff0c 今天通过观看网站上的视频 xff0c 对STM32有了最基础的了解 xff0c 并学到了一些STM32的学习方法 xff0c 自我感觉收获不错 一 学习方法 1 两个学习网址 xff1a 开源电
  • 组原7_程序查询和程序中断方式

    目录 1 I O 方式简介 2 程序查询方式 3 程序中断方式 1 I O 方式简介 2 程序查询方式 程序查询方式流程图 程序查询方式接口结构 一次只能传送一个字的原因在于 xff1a 这种方式下 xff0c 外设传过来的数据是放在寄存器
  • k-近邻实现手写数字识别

    1 k 近邻工作原理 简单地说 xff0c K近邻算法采用测量不同特征值之间的距离方法进行分类 该算法具有一下特点 优点 xff1a 精度高 对异常值不敏感 无数据输入假定 缺点 xff1a 计算复杂度高 空间复杂度高 K近邻算法的工作原理
  • 吴恩达教你读论文:持续而缓慢的学习,才是正道

    转载这篇文章 xff0c 主要是有两句话特别认同 xff1a 持续而缓慢的学习 xff0c 而不是临时抱佛脚 xff0c 才能带来长久的成长 吴恩达 智慧不是学校教育的产物 xff0c 而是终身学习的产物 阿尔伯特 爱因斯坦 以下为原文 x
  • The Lighting Handbook, Tenth Edition 读书札记

    这本照明书可以说是经典了 xff0c 对照明从微观到宏观 xff0c 从理性到感性 xff0c 从物理到艺术洋洋洒洒做了比较充分和严谨的说明 xff0c 书中引用的论文也是浩浩荡荡 xff0c 可以说是一本集结了众多头脑 xff0c 闪烁着
  • 国家电网公司标准化建设成果应用目录(2015)参考书目

    国家电网标准化图集有很多 xff0c 但有时找的时候又很难记住书名 xff0c 因此把2015年之前的书籍目录摘录出来以便查找 目前是最先的版本了 xff0c 另外有一些06年的废止的分册不再列出了 2016年又增加了一本 国家电网公司输变
  • pyecharts——WordCloud词云图

    转自 xff1a pyecharts学习笔记 WordCloud词云图 码农家园 基本 词云图 注意数据格式 xff0c word1 count1 word2 count2 xff0c 可使用 counter 做词频统计 xff0c 生成这
  • 一个中文词云项目的使用总结

    一个中文词云项目的使用总结 用一个pa wordcloud项目来生成词云图的时候碰到了好几个问题 xff0c 一个pillow库安装问题 xff0c 卸载重新安装了最新版本 xff0c 就是numpy版本不匹配问题 xff0c 安装了对应p

随机推荐

  • 圆周率怎么计算来的?教你利用欧拉恒等式,生成圆周率万能公式!

    原文链接 xff1a http www twoeggz com news 4791962 html 在古代 xff0c 缺少数学技巧的情况下 xff0c 圆周率的计算是相当困难的 xff0c 我们国家伟大的数学家 xff0c 天文学家祖冲之
  • 影片avi转rmvb教程

    昨天被迫压制 MS IGLOO 正好学习了下影片avi转rmvb的技术 找来找去发现篇文章似乎不错 现在根据自己的操作过程 xff0c 加点操作心得再内 xff0c 保留一篇备用 xff01 首先还是要有专门压制的的软件 xff0c 之前我
  • 手机摄像头的等效焦距

    笔者随意拿出一张最近评测文章中的样张 xff0c EXIF信息就位于照片的下方 我们看到 xff0c 光圈 ISO感光度 曝光时间 曝光补偿这样的参数都比较好理解 xff0c 唯独这个焦距确实让不少人生疑 焦距 4mm 光圈 f 2 4 I
  • 关于3D打印文件格式:STL、OBJ、AMF、3MF的详解

    很多人对3D打印的数据格式颇有微词 xff0c 辛辛苦苦用三维软件设计好的作品 xff0c 一转换成3D打印格式 xff0c 基本就从白天鹅变成丑小鸭了 xff0c 既没有颜色 xff0c 数据也不完整 xff0c 形状重叠表面破损那是常有
  • 在线绘制函数图像和在线图标绘制网址

    经过寻找 xff0c 找到了几个在线绘制函数图像的网址 xff0c 可以不用matlab和geogebra软件绘制了 数学函数图像 xff1a 第一个 xff1a Desmos 首推 第二个 xff1a fooplot 可以绘制分段函数比如
  • geogebra中函数的定义域的输入

    ggb中函数的输入有如下几种方式 xff1a 一 如果if做法 1 区间函数 xff1a 做出函数在某区间上的图象 xff1a f x 61 if x gt 61 0 amp amp x lt 61 2 x 2 43 2x 1 2 分段函数
  • 升级Ubuntu内核

    自己下载deb或使用某些其他工具 xff0c 无脑dpkg deb会导致Depends libc6 gt 61 2 33 but 2 31 ubuntu9 2 is to be installed的错误 xff08 猜测该错误产生的原因是没
  • 在ROS的noetic版本中通过rosrun运行python文件

    xff08 1 xff09 不要将python文件放入scr目录中 xff0c 否则后续编译工作空间会报如图所示的错误 首先要在功能包文件夹 xff08 catkin ws src learnning topic xff09 中创建一个sc
  • linux音量调节

    转自 xff1a https www jianshu com p fc8c8cad67d6 一 alsa设置默认声卡 alsa设置默认声卡 理解和使用Alsa的配置文件 alsa的配置文件是alsa conf位于 usr share als
  • FutureTask实际应用案例

    GetResultTask java package com cwp data service service task import com cwp data intelligence common exception RRExcepti
  • 异常检测算法综述

    一 异常检测 随着人工智能的火热 xff0c 运维人员也开始考虑将算法引入运维领域 xff0c 对传统DevOps的核心功能进行优化改进 异常检测是运维不可或缺的重要要功能模块之一 xff0c 可以提升企业运维能力和效率 xff0c 释放运
  • 每日一书丨嵌入式C语言自我修养:从芯片、编译器到操作系统

    最近 xff0c 阅读了王工 xff08 王利涛 xff09 赠送的一本由他编著的书籍 嵌入式C语言自我修养 xff0c 感觉写的挺不错 今天分享一下这本书籍 嵌入式C语言自我修养 xff1a 从芯片 编译器到操作系统 从芯片 编译器到操作
  • JSP提交仍然停留在当前页面

    在C S结构中 xff0c 用户提交内容以后 xff0c 系统任停留在当前页面上 xff0c 直到服务返回处理成功或者失败的提示 而用户录入的信息 xff0c 除非程序清除 xff0c 否则不会自动消失 xff0c 方便用户修改 为了解决这
  • FreeRTOS Queue

    变量定义 span class token keyword typedef span span class token keyword void span span class token operator span QueueHandle
  • 专门讲解无人机航拍图像处理的书【包括图像拼接!!!】

    最近正式开始做课设啦 xff0c 博主在网上搜集到有专门的书讲解无人机航拍图像的处理 xff0c 包括图像拼接 xff01 xff01 xff01 更非常激动的是博主在图书馆把两本书都找到了 xff0c 俺滴学校i了i了 两本书如下所示 x
  • 1.2 向量与线性代数

    向量与线性代数 图形学基础向量向量点乘向量叉乘矩阵 图形学基础 基础数学 xff1a 线性代数 统计学 微积分基础物理 xff1a 其他课程 xff1a 信号处理 数学分析一点点 xff1a 美学课程 向量 方向长度单位向量向量加法 向量点
  • 2.1 变换

    矩阵变换 二维变换齐次坐标齐次坐标下的二维变换矩阵逆变换 xff08 逆矩阵 xff09 复合变换三维空间仿射变换 modeling and viewing 模型变换和视角变换 二维变换 尺度变换 Scale 镜像变换 切变变换 旋转变换
  • 2.2 变换(模型、视图、投影)

    变换 xff08 模型 视图 投影 xff09 三维变换观测变换 xff08 Viewing transformation xff09 视图 xff08 View xff09 定义相机如何将相机移动到约定俗成位置 投影 xff08 Proj
  • 四轴飞行器入门——基础知识

    引言 从2016年起 xff0c 细细数来入门无人机已经有两年时间 两年期间 xff0c 自己边学边摸索 xff0c 组装过机架四轴无人机 xff0c 也修改过开源飞控的代码 xff0c 但是因为种种原因 xff0c 始终没有写过相关博客记
  • Linux系统下搭建PX4/Pixhawk原生固件编译环境

    简介 PX4固件是Pixhawk飞行控制器的官方固件 xff0c Pixhawk官网也给出了Linux windows下搭建开发环境的方法 由于种种原因 xff0c 搭建开发环境时总会遇到各种各样的bug xff0c 致使PX4固件编译失败