第一章 PX4-Pixhawk-程序编译过程解析

2023-05-16


第一章 PX4程序编译过程解析

PX4是一款软硬件开源的项目,目的在于学习和研究。其中也有比较好的编程习惯,大家不妨可以学习一下国外牛人的编程习惯。这个项目是苏黎世联邦理工大学的一个实验室搞出来的。该方案是基于NUTTX系统上开发的。开发系统上面最好使用Ubuntu系统进行开发(开发效率高),程序修改和读写可以用Source Insight 。后期的文章将会陆续将软硬件进行开源和分析。

PX4的固件下载地址:https://github.com/PX4/Firmware

PX4的硬件下载地址:https://github.com/3drobotics/Pixhawk_OS_Hardware

         这一章节主要是对PX4程序代码的编译过程进行讲解。首先要说的是makefile,现在windows下面的编程很多都是基于IDE进行开发。但是很多大型工程为了追求更好的开发和维护都用到了Makefile。Makefile定义了很多的开发和编译的规则,PX4的开发还涉及到Cmake使用。Cmake也是类似于Makefile文件,只是它是一个更高一级的编译配置工具,它是一个txt格式的文件。这里我们把它看成一个子Makefile文件。

         好了我们进入到正题。首先我们进入到PX4固件文件的根目录如果是原始下载根目录在scr/Firmware下面。在该目录下有一个Makefile文件


(注意:所有的编译过程都是从需要编译的根目录下的Makefile文件开始),打开该文件我们开始进行分析。

         首先对git是否存在进判断,然后运行check_cmake.sh对cmake的相关规则进行判断(主要是对cmake的版本号进行判断)。注:每行前面带“#”就是注释而已,没有什么用。


         这里主要是对使用开发环境进行选择,这个对我们开发来说关系不大。


         进入cmake的编译规则配置,这个不用管。


进入无人机的的编译配置选项,这个比较重要。主要选择你的硬件开发环境和类型。我们主要讲解的是编译px4fmu-v2_defalt,我们编译的语句是“make px4fmu-v2_defalt”,在这里就体现了。px4fmu-v1_defalt是适用于px4的v1硬件。这个可以从开源的硬件中找到。


         此后的命令都是类似,都是选择不同的编译模式,其中清除指令是make clean,这个指令在后面也能找到的。

         找到了编译源我们就要找到编译文件,对于我们的学习来说编译指令是make px4fmu-v2_defalt。说明一下APM的固件也是一样哦,都是可以找到的,APM是经过PX4的源码修改的哦这个从他的固件中看的出的。

         px4fmu-v2_defalt这个文件在该目录下

。这个在构建整个架构的时候就包含了该文件目录。这里就进入文件的配置选项了哦。当然这个命名是

因为camke组建包含的就是nuttx_px4fmu-v2_defalt文件,注意到了没?

         首先当然是把编译的工具导进来,因为那些模块都是用cmake写的,所以导入的是cmake工具。


         接着就是一些驱动程序。到相应的目录都能找到这个cmake文件的。

这里举一个例子,比如drivers/mup6000。因为包含的关系我们很容易就可以查到这个文件在该目录下

。这个路径找到的是src/Firmware/src路径,然后引导到drivers路径,找到mup6000路径下的cmake文件。注意哦这里有个module drivers __mpu6000。这里的名字是mpu6000,这里在后面说到启动文件的时候会说到哦。这里就是要包含的c++文件,如果要编译自己的也可以写一个cmake文件或者在某个包含的cmake文件中加入自己的程序就行了,不然就不会参与编译哦,至于编写规则你随便找一个cmake文件模仿就行了,然后在这个文件中包含路径就行了。从这些cmake文件中也可以查哪些文件是参与编译的哪些是不参与编译的哦。很多人在看代码的时候总会出现有的文件是相同的然后又不知道时哪个文件参与编译的,那么从这些cmake文件中就可以知道了哦。



在这个camke文件中就有很多的模块和相应的库文件,在这里都是可以找到的哦。那么编译过程就讲到这里,注意这里只是编译过程,真正哪些模块会用到就要到下一章节的启动文件分析去了。

有什么错误欢迎提出来,大家一起修正一起学习。

原作者链接:http://blog.csdn.net/qq_18112493/article/details/69951055

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

第一章 PX4-Pixhawk-程序编译过程解析 的相关文章

  • @Documented注解的作用

    目录 在哪里用到了 96 64 Documented 96 注解 xff1f 那么 64 Documented的作用是什么 xff1f 在哪里用到了 64 Documented注解 xff1f 64 Documented是元注解 xff0c
  • 球的表面积公式是怎么推导出来的?

    球的体积公式的推导 球的表面积公式是 xff1a 证明方式一 xff1a 体积求导 基本思路 xff1a 可以把半径为R的球 xff0c 从球心到球表面分成n层 xff0c 每层厚为 r n xff0c 像洋葱一样 半径获得增量是 r xf
  • Android广播实现进程间通信,很简单

    应用A发送广播 xff1a span class token keyword public span span class token keyword class span span class token class name MainA
  • 下载JDK8 JVM源码

    性子急的可以直接看快速下载步骤 xff1a 目录 详细步骤快速下载步骤 详细步骤 打开openJDK官网 xff1a https openjdk org 找到左侧的Mercurial xff0c 点击进入新界面 选择jdk8 xff0c 点
  • Git查看分支的创建人

    开发小组人多的时候 xff0c 仓库里会有跟多分支 xff0c 需要看下某个分支具体是谁创建的 命令 xff1a git for each ref format 61 39 committerdate 09 authorname 09 re
  • kotlin的this关键字几种用法

    与java不同的是 xff0c 原先MainActivity this这种写法在kotlin中会报错 如下 正确的写法有许多 xff0c 直接就写this也可以识别到 xff0c 如下 xff1a span class token clas
  • Android之ScrollView嵌套ListView解决工具

    public class Utility public void setListViewHeightBasedOnChildren ListView listView 获取ListView对应的Adapter ListAdapter lis
  • kotlin中匿名内部类的写法

    原本java开发安卓常用的setOnClickListener xff0c 用kotlin写 xff0c 也变得五花八门了 span class token keyword var span view span class token op
  • Spring与SpringMVC的区别和联系是啥?

    Spring Spring是一个开源容器框架 xff0c 可以接管web层 xff0c 业务层 xff0c dao层 xff0c 持久层的组件 xff0c 并且可以配置各种bean 和维护bean与bean之间的关系 其核心就是控制反转 I
  • “在XML文件中给代码加注释”请注意注释的位置

    先科普一下eclipse加注释的快捷键 xff1a eclipse中编辑Java文件时 xff0c 注释和取消注释的快捷键都是 xff1a 34 CTRL 43 34 编辑xml文件时 xff0c 注释 xff1a CTRL 43 SHIF
  • “无法识别的USB设备”如何解决

    昨天 xff0c 我把USB数据线插入笔记本电脑做真机调试 xff0c 电脑右下角提示显示 无法识别的USB设备 xff0c 我开始百度 xff08 还不会搭梯子用google xff09 xff0c 搜索结果大多说是要更新驱动 xff0c
  • 解决Android studio 模拟器闪烁黑屏问题

    首先 xff0c 必须感谢csdn大神给我的启示 xff0c 但是原文并没有解决我的问题 我在看 第一行代码 的时候 xff0c 跟着郭霖大神的思路 xff0c 想利用cmd命令查看虚拟机中的 db文件中的数据表 因为真机需要root才能查
  • 关于使用SDKManager刷机出现No SDKs are available for your account的解决办法

    今天刷机出现 No SDKs are available for your account 这个错误 xff0c 所以连第一步都进不去 xff08 下图是用别人的错误图 xff09 最后在GG上找到了一个解决方案 xff0c https f
  • Mac系统装android开发环境无法创建SD卡解决方案

    无法创建SD卡是小事 xff0c 但是引起的问题却是大事 xff0c 模拟器无SD卡则android项目无法正常生成R文件 xff0c 导致HelloWorld都无法跑起来 xff0c 头大 xff0c 折腾了几天 xff0c 终于找到原因
  • Matlab App Designer编译打包exe后读取文件路径问题

    首先 xff0c 标题略长 其次 xff0c 当你看到这个长长的标题并点进来的时候 xff1a bro xff0c 恭喜你终于找到了一个行之有效的解决方案 xff01 好了 xff0c 下面我们言归正传 关于MATLAB App Desig
  • Arduino程序结构,数据类型,变量

    Arduino程序结构 Arduino程序可以分为三个主要部分 xff1a 结构 xff0c 值 xff08 变量和常量 xff09 和函数 span class token keyword void span span class tok
  • 前端基础之《ECMAScript 6(6)—数组》

    一 扩展运算符 1 扩展运算符能将 数组 转换为逗号分隔的 参数序列 声明一个数组 const school 61 39 张三 39 39 李四 39 39 王五 39 用 转换成逗号分隔的序列 xff1a 39 张三 39 39 李四 3
  • linux 安装npm

    1 下载源码安装 cd wget https nodejs org dist v14 15 4 node v14 15 4 linux x64 tar xz 2 解压并放入指定目录 tar xf node v14 15 4 linux x6
  • 【安博.牛耳】嵌入式培训介绍

    培训简介 安博教育集团联手中南地区最大的IT人才输出机构 牛耳软件教育 xff0c 在湖南地区首开专业嵌入式开发工程师培训 嵌入式开发工程师专业培训课程 xff0c 由安博联合各知名企业合作伙伴的精英专家 一线项目总监 经理 优秀技术人员共
  • 最受推荐的10本C/C ++书籍

    链接 xff1a https hackr io blog 10 best c cpp books C和C 43 43 是世界上最流行的编程语言之二 C 43 43 是C语言的扩展 xff0c 这两门语言的潜力都是不可估量的 xff0c 这就

随机推荐

  • Leetcode: Decode ways

    A message containing letters from A Z is being encoded to numbers using the following mapping 39 A 39 gt 1 39 B 39 gt 2
  • 调剂【非全日制】之前必看!关于非全就业情况的一点感想

    原文作者 秦时明月123fly 17年考入帝都的一所985级别的学校非全研究生 xff0c 学制是两年 xff0c 专业是土木口的工程管理 因为是辞职读的非全 xff0c 所以目前也在参加秋招 学土木的都知道 xff0c 要么去施工单位 x
  • 360分!这是某985计算机非全分数线!

    前几天 xff0c 武汉大学公布了计算机相关专业的分数线 xff1a 计算机学院 计算机科学与技术 xff08 学硕 xff09 xff1a 总分 xff1a 380 政治 xff1a 50 外语 xff1a 50 专业课1 xff1a 8
  • 计算机非全日制,究竟值得读吗?

    非全值得读吗 xff1f 作者 xff1a 四川大学 图像所 非全日制 研究生 文章为原创 非全值得读吗 xff1f 我想有这个疑问的大都是应届生 xff0c 而不是往届生或者已经工作的人 xff0c 特别是工作后工资相对较高 xff0c
  • 【非全研究生】到底哪些公司接受?

    很多同学都知道 xff0c 虽然非全在2017年改革了 xff0c 考试难度和毕业难度都加大了 xff0c 但是社会对于非全日制研究生的认可程度依然是个未知数 前几天小编在微博看到一位同学发的 统招非全日制研究生企业认可情况汇总表 xff0
  • 非全凉凉!武汉大学不允许18级19级非全日制硕士研究生参加校招?

    转载于知乎 链接 https www zhihu com question 343870391 作者 xff1a 张铁匠 链接 xff1a https www zhihu com question 343870391 answer 8118
  • 关于博士招生“申请-考核制”,教育部这样说!

    转载于 青塔 近日 xff0c 教育部在官网上就十三届全国人大二次会议 关于改进博士生招生 申请 考核制 的建议 进行答复 答复中称 xff1a 教育部在着力探索建立博士生招生质量第三方评价机制 xff0c 推动招生单位建立健全以自我评价为
  • Keil5.26、Keil5.27、Keil5.30下载地址

    亲测有效 xff0c 速速下载 mdk5 26下载地址 http www keil com fid vquv2wwtdy9j1w9xagw1om5eu9xbkks1e66vd1 files eval mdk526 exe mdk5 27下载
  • EEPROM和flash的区别

    之前对各种存储器一直不太清楚 xff0c 今天总结一下 存储器分为两大类 xff1a ram和rom ram就不讲了 xff0c 今天主要讨论rom rom最初不能编程 xff0c 出厂什么内容就永远什么内容 xff0c 不灵活 后来出现了
  • git merge最简洁用法

    一 开发分支 xff08 dev xff09 上的代码达到上线的标准后 xff0c 要合并到 master 分支 git checkout dev git pull git checkout master git merge dev git
  • 汇编cmp比较指令详解

    刚刚看到了cmp指令 xff0c 一开始有点晕 后来上网找了些资料 xff0c 终于看明白了 xff0c 为了方便初学者 xff0c 我就简单写下我的思路吧 高手绕过 xff0c 谢谢 xff01 cmp compare 指令进行比较两个操
  • vim中复制粘贴

    在vim中要进行复制粘贴 需要使用yy和p指令 但是会发现当我们想讲从vim外面复制的内容粘贴进文本中时 光使用p达不到效果 原因是 在vim中维护者许多的clipboard 而不是只有一个 我们从vim外部 如浏览器 复制的文本所在的cl
  • NP问题真的很难理解

    希望通过这篇文章可以不仅让计算机相关专业的人可以看懂和区分什么是P类问题什么是NP类问题 xff0c 更希望达到的效果是非专业人士比如学文科的朋友也可以有一定程度的理解 有一则程序员界的笑话 xff0c 就是有一哥们去google面试的时候
  • USB转TTL、USB转串口、USB转232的区别

    PO主作为一个没有专业背景的小白 xff0c 在初玩单片机时曾被上面的几个名词所混淆 xff0c 不过后来终于大彻大悟 xff0c 现在把自己的理解写在这里 xff0c 同样准备入门单片机的小白可以看看 xff0c 或许对你有所帮助 首先
  • STM32的时钟系统RCC详细整理

    一 综述 xff1a 1 时钟源 在 STM32 中 xff0c 一共有 5 个时钟源 xff0c 分别是 HSI HSE LSI LSE PLL HSI 是高速内部时钟 xff0c RC 振荡器 xff0c 频率为 8MHz xff1b
  • 第一章 PX4程序编译过程解析

    版权声明 xff1a 本文为博主原创文章 xff0c 未经博主允许不得转载 第一章 PX4程序编译过程解析 PX4是一款软硬件开源的项目 xff0c 目的在于学习和研究 其中也有比较好的编程习惯 xff0c 大家不妨可以学习一下国外牛人的编
  • 第二章 PX4-RCS启动文件解析

    版权声明 xff1a 本文为博主原创文章 xff0c 未经博主允许不得转载 第二章 PX4 RCS启动文件解析 RCS的启动类似于linux的shell文件 xff0c 如果不知道shell文件是什么东西可以理解成是为程序的流程框 xff0
  • pixhawk position_estimator_inav.cpp思路整理及数据流

    写在前面 xff1a 这篇blog主要参考pixhawk的高度解算算法解读 xff0c 并且加以扩展 xff0c 扩展到其他传感器 xff0c 其实里面处理好多只是记录了流程 xff0c 至于里面实际物理意义并不是很清楚 xff0c 也希望
  • git创建新分支

    1 创建本地分支 git branch 分支名 xff0c 例如 xff1a git branch 2 0 1 20120806 注 xff1a 2 0 1 20120806是分支名称 xff0c 可以随便定义 2 切换本地分支 git c
  • 第一章 PX4-Pixhawk-程序编译过程解析

    第一章 PX4程序编译过程解析 PX4是一款软硬件开源的项目 xff0c 目的在于学习和研究 其中也有比较好的编程习惯 xff0c 大家不妨可以学习一下国外牛人的编程习惯 这个项目是苏黎世联邦理工大学的一个实验室搞出来的 该方案是基于NUT