iNavFlight飞控固件学习-1《开发环境搭建》

目录

文章目录

  • 目录
  • 摘要
  • 1.官网
  • 2.形成Linux开发环境工具
    • 2.1 简介
    • 2.2 相关工具
      • 2.2.1 Ubuntu / Debian系统配置命令
      • 2.2.2 Fedora系统配置命令
      • 2.2.3 Fedora系统配置命令
    • 2.3 克隆存储库
    • 2.4 构建工具
    • 2.5 使用cmake
    • 2.6 构建固件
    • 2.7 清除
    • 2.8 cmake 缓存维护
    • 2.9 编译通过ninja
    • 2.10 更新和重建
  • 3.高级用法
  • 4.不受支持的平台


摘要


本节主要学习如何配置编译iNavFlight的linux开发环境,我用的是ubuntu开发环境,版本是Ubuntu 18.04.4 LTS,之前配置过APM的开发环境,很多都可以直接不用配置。


1.官网


最好的学习资料就是官网:
官网代码网址
官网linux开发环境配置


2.形成Linux开发环境工具


2.1 简介


本文致力于提供在 Linux 上为 INAV 2.6 及更高版本编译 INAV 的通用指南。INAV 需要相当新的版本的 gcc-arm-none-eabi 交叉编译器。不同的 Linux 发行版将提供不同版本的交叉编译器。范围从过时版本(例如 Debian、Ubuntu LTS)到最新稳定版本(Arch Linux)。


为了提供统一且合理的交叉编译器,INAV 提供了“已知良好/工作正常”交叉编译器的安装,以及如果您的发行版提供了更新的选项(例如 Arch Linux)则覆盖此机制。一般来说,从安全角度来看,Linux 发行版不鼓励从官方发行版存储库和“批准”来源(Ubuntu PPA、Arch AUR)以外的来源安装软件。然而,INAV 提供推荐编译器的方法既合理又合理:

  • 交叉编译器是从信誉良好的来源安装的(ARM,生产我们的飞行控制器中使用的 CPU 的公司)
  • Disto 交叉编译器通常比推荐的 INAV 编译器旧安装的交叉编译器
  • 已安装的交叉编译器仅用于构建 INAV,并且在 INAV 构建环境之外显然/通常不可用。
    但是,在某些特殊情况下,应优先使用发行版交叉编译器,而不是 INAV 安装的编译器:
  • 您正在使用安装了更现代的编译器(Arch)的发行版
  • 您正在使用 ARM 未提供编译器的主机平台(例如 Linux ia32)。

2.2 相关工具


除了交叉编译器之外,还需要安装一些其他工具:

  • git :克隆和管理 INAV 代码存储库
  • cmake :生成构建环境
  • make :运行固件编译
  • ruby : 根据 JSON 定义构建一些生成的源文件
  • gcc :用于生成设置和运行测试的本机编译器

请注意,INAV 需要 cmake 3.13 或更高版本;任何提供 cmake 3.13 的发行版也将提供其他工具的适当版本。另请注意,Ubuntu 18.04 LTS 没有提供足够现代的 cmake;建议您升级到提供该功能的 Ubuntu 20.04 LTS。


请注意,您可能更喜欢使用 ninja 而不是 make 作为构建管理器。这将在下面描述。

2.2.1 Ubuntu / Debian系统配置命令

#第一步确保这个系统是更新 make sure the system is updated first
sudo apt update && sudo apt upgrade
sudo apt install git make ruby cmake gcc

这里要说下,我没有按照上面的步骤执行,我是提前知道自己的cmake版本比较低,我直接按照cmake的按照教材直接配置到最新,具体cmake的配置可以看出:cmake环境配置
还有需要安装gcc-arm-none-eabi开发环境,具体怎么配置可以看我的gcc-arm-none-eabi开发环境

2.2.2 Fedora系统配置命令

# make sure the system is updated first
sudo dnf -y update
sudo dnf install git make ruby cmake gcc

2.2.3 Fedora系统配置命令

# make sure the system is updated first
sudo pacman -Syu
sudo pacman -S git make ruby cmake gcc

安装这些先决条件后,我们可以克隆存储库以提供 INAV 源代码的本地实例。


2.3 克隆存储库


git clone https://github.com/iNavFlight/inav.git

注意:如果您有一个已注册 ssh 密钥的 Github 帐户,则可以用 git clone git@github.com:iNavFlight/inav.git 替换 git clone 命令,而不是 https 链接。

git clone 会创建一个 inav 目录;我们可以进入这个目录,配置构建环境并构建固件。


2.4 构建工具


对于 2.6 及更高版本,INAV 使用 cmake 作为其主要构建工具。cmake 简化了交叉编译多个目标所需的各种平台和硬件依赖关系。cmake 仍然使用 GNU make 来调用实际编译器。在构建任何固件之前,必须使用 cmake 配置构建环境。


2.5 使用cmake


使用 cmake 的规范方法是创建一个构建目录并从构建目录中运行 cmake 和 make 命令。因此,假设我们已将固件存储库克隆到 inav 目录中,我们可以发出以下命令来设置构建环境。

cd inav
# first time only, create the build directory
mkdir build
cd build
cmake ..
# note the "..", this is required as it tells cmake where to find its ruleset

cmake 将检查是否存在 INAV 嵌入式交叉编译器;如果未找到该交叉编译器,它将尝试下载供应商(ARM)GCC 交叉编译器。

注意:如果您想使用自己的交叉编译器,无论是因为您正在运行带有较新交叉编译器的发行版(例如 Arch Linux),还是您在 ARM 不提供交叉编译器的平台上(例如 32 位 Linux),您都应该按如下方式运行 cmake 命令:

cmake -DCOMPILER_VERSION_CHECK=OFF ..

cmake 将在您的构建目录中生成许多文件,包括生成的构建设置 CMakeCache.txt 的缓存和一个 Makefile。


2.6 构建固件


一旦 cmake 生成了 build/Makefile,这个 Makfile(使用 make)就会用于构建固件,同样来自 build 目录。除非 INAV cmake 配置发生更改(即新版本),或者您希望在 ARM SDK 编译器和发行版或其他外部编译器之间切换,否则无需重新运行 cmake。
生成的 Makefile 使用与旧版(2.6 之前)顶层 Makefile 不同的目标选择机制;您可以使用 make help 生成目标列表(或者,由于列表非常长),将其导入分页器,例如 make help | less。

通常,要构建单个目标,只需将目标名称传递给 make;请注意,与早期版本不同,未指定目标的 make 将构建所有目标。

# Build the MATEKF405 firmware
make MATEKF405

在这里插入图片描述

还可以通过单个 make 命令构建多个目标:

# parallel build using all but 1 CPU core
make -j $(($(nproc)-1)) MATEKF405 MATEKF722

生成的十六进制文件位于构建目录中。

然后,您可以使用 INAV 配置器来刷新本地 build/inav_x.y.z_TARGET.hex 文件,或者直接从命令行使用 stm32flash 或 dfu-util。

msp-tool 和 flash.sh提供/描述用于命令行刷新的第三方帮助工具。(具体超链接可以去官网网址查看下载)


2.7 清除


您可以清除构建的文件,无论是针对所有目标还是有选择地清除;选择性清除目标只需在目标名称前加上 clean_ 即可定义:

# clean out every thing
make clean
# clean out single target
make clean_MATEKF405
# or multiple targets
make clean_MATEKF405  clean_MATEKF722

2.8 cmake 缓存维护


cmake 会缓存构建环境,因此您无需在每次构建目标时重新运行 cmake。提供了两个 make 选项来维护 cmake 缓存

make edit_cache
make rebuild_cache

除了在嵌入式 ARM 和发行版编译器之间进行切换之外,典型用户不太可能需要使用这些选项。


2.9 编译通过ninja


在这里插入图片描述

cd build
# add other cmake options as required.
cmake -GNinja ..

ninja MATEKF405 MATEKF722

2.10 更新和重建


为了更新您的本地固件版本:

  • 导航到本地 INAV 存储库
  • 使用以下步骤从构建目录中提取最新更改并重建本地版本的 INAV 固件:
$ cd inav
$ git pull
$ cd build
$ ninja <TARGET>
$ ## or make <TARGET>

3.高级用法

有关更多高级开发信息和 git 使用方法,请参阅development guide.

4.不受支持的平台

如果您使用的主机平台 Arm 未提供交叉编译器(Arm32、IA32),并且发行版未打包合适的编译器或版本太旧,则通常可以在 xpack devtools 集合中找到合适的编译器。您需要配置 cmake 以使用外部编译器。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/796843.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

面试内容集合

用例设计方法 &#xff08;一&#xff09;等价类划分  常见的软件测试面试题划分等价类: 等价类是指某个输入域的子集合.在该子集合中,各个输入数据对于揭露程序中的错误都是等效的.并合理地假定:测试某等价类的代表值就等于对这一类其它值的测试.因此,可以把全部输入数据合理…

自注意力简介

在注意力机制中&#xff0c;每个查询都会关注所有的键值对并生成一个注意力输出。如果查询q&#xff0c;键k和值v都来自于同一组输入&#xff0c;那么这个注意力就被称为是自注意力&#xff08;self-attention&#xff09;。自注意力这部分理论&#xff0c;我觉得台大李宏毅老师…

FFmpeg开发环境搭建

FFmpeg是音视频开发必备的库&#xff0c;也是唯一的库。本文主要讲解在ubuntu22和macOS14环境下的编译安装。 为什么要自己编译呢&#xff1f;其中一个很重要的原因就是ffmpeg在编译时可以加入很多插件&#xff0c;这种特定的库网络上可能找不到编译好的版本&#xff0c;另外如…

在linux中查找 / 目录下的以.jar结尾的文件(find / -name *.jar)

文章目录 1、查找 / 目录下的以.jar结尾的文件 1、查找 / 目录下的以.jar结尾的文件 [rootiZuf6332h890vozldoxcprZ ~]# find / -name *.jar /etc/java/java-1.8.0-openjdk/java-1.8.0-openjdk-1.8.0.342.b07-1.el9_0.x86_64/lib/security/policy/limited/US_export_policy.ja…

Spring MVC 中 HttpMessageConverter 转换器

1. Spring MVC 中 HttpMessageConverter 转换器 文章目录 1. Spring MVC 中 HttpMessageConverter 转换器2. 补充&#xff1a;什么是 HTTP 消息3. 转换器3.1 转换器转换的是什么 4. Spring MVC中的 AJAX 请求5. ResponseBody 将服务器端的 return 返回值转化为“字符串(JSON格式…

RIP路由协议概述

RIP【Routing Information Protocol】 RIP是为TCP/IP 环境中开发的第一个路由选择协议标准 RIP是一个【距离——矢量】路由选择协议 当路由器的更新周期为30s到来时&#xff0c;向邻居发送路由表 RIP以跳数作为唯一度量值 RIP工作原理 RIP路由协议向邻居发送整个路由表信息RI…

Linux 复现Docker NAT网络

Linux 复现Docker NAT网络 docker 网络的构成分为宿主机docker0网桥和为容器创建的veth 对构成。这个默认网络命名空间就是我们登陆后日常使用的命名空间 使用ifconfig命令查看到的就是默认网络命名空间&#xff0c;docker0就是网桥&#xff0c;容器会把docker0当成路由&…

JavaDS —— 单链表 与 LinkedList

顺序表和链表区别 ArrayList &#xff1a; 底层使用连续的空间&#xff0c;可以随机访问某下标的元素&#xff0c;时间复杂度为O&#xff08;1&#xff09; 但是在插入和删除操作的时候&#xff0c;需要将该位置的后序元素整体往前或者向后移动&#xff0c;时间复杂度为O&…

代码随想录二刷7.22|977.有序数组的平方

暴力解法&#xff1a; ——如果想暴力解决这个问题的话&#xff0c;可以像题目那样&#xff0c;先将每一个元素平方&#xff0c;然后再排序 双指针&#xff1a; ——从题目中找到的信息&#xff1a;这是一个非递减顺序的整数数组&#xff0c;从例子中&#xff0c;可以容易看…

excel 百分位函数 学习

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、函数说明PERCENTILE 函数PERCENTILE.inc 函数PERCENTILE.exc 函数QUARTILE.EXC 函数 二、使用步骤总结 前言 excel 百分位函数 Excel提供了几个函数用于…

数据库MySQL下载安装

MySQL下载安装地址如下&#xff1a; MySQL :: Download MySQL Community Server 1、下载界面 2、点击下载 3、解压记住目录 4、配置my.ini文件 未完..

vector 介绍

1.简述vector 首先我们要大致弄明白vector是一个什么东西,其实vector就是之前我们学过的顺序表,这里直接使用就行了. 定义vector-------->vector<typename> arr 此时的这种定义vector可以理解成为一个数组,而typename可以是各种数据类型,比如string,int,double....…

QT实现自定义带有提示信息的透明环形进度条

1. 概述 做界面开发的童鞋可能都会遇到这样的需求&#xff0c;就是有一些界面点击了之后比较耗时的操作&#xff0c;需要界面给出一个环形进度条的进度反馈信息. 如何来实现这样的需求呢&#xff0c;话不多说&#xff0c;上效果 透明进度条 2. 代码实现 waitfeedbackprogressba…

3-2 多层感知机的从零开始实现

import torch from torch import nn from d2l import torch as d2lbatch_size 256 # 批量大小为256 train_iter, test_iter d2l.load_data_fashion_mnist(batch_size) # load进来训练集和测试集初始化模型参数 回想一下&#xff0c;Fashion-MNIST中的每个图像由 28 28 784…

一文了解5G新通话技术演进与业务模型

5G新通话简介 5G新通话&#xff0c;也被称为VoNR&#xff0c;是基于R16及后续协议产生的一种增强型语音通话业务。 它在IMS网络里新增数据通道&#xff08;Data Channel&#xff09;&#xff0c;承载通话时的文本、图片、涂鸦、菜单等信息。它能在传统话音业务基础上提供更多服…

红日靶场----(三)1.漏洞利用

上期已经信息收集阶段已经完成&#xff0c;接下来是漏洞利用。 靶场思路 通过信息收集得到两个吧靶场的思路 1、http://192.168.195.33/phpmyadmin/&#xff08;数据库的管理界面&#xff09; root/root 2、http://192.168.195.33/yxcms/index.php?radmin/index/login&am…

练习 6.7:⼈们 在为练习 6.1 编写的程序中,再创建两个表⽰⼈的字典,然后将这三个字典都存储在⼀个名为 people 的列表中。

练习 6.7&#xff1a;⼈们 在为练习 6.1 编写的程序中&#xff0c;再创建两个表⽰⼈的字典&#xff0c;然后将这三个字典都存储在⼀个名为 people 的列表中。 要求 遍历这个列表&#xff0c;将其中每个⼈的所有信息都打印出来。 代码 human {shuicc: {first_name: shui,la…

linux下安装cutecom串口助手;centos安装cutecom串口助手;rpm安装包安装cutecom串口助手

在支持apt-get的系统下安装 在终端命令行中输入&#xff1a; sudo apt-get install cutecom 安装好后输入 sudo cutecom 就可以了 关于如何使用&#xff0c;可以看这个https://www.cnblogs.com/xingboy/p/14388610.html 如果你的电脑不支持apt-get。 那我们就通过安装包…

druid(德鲁伊)数据线程池连接MySQL数据库

文章目录 1、druid连接MySQL2、编写JDBCUtils 工具类 1、druid连接MySQL 初学JDBC时&#xff0c;连接数据库是先建立连接&#xff0c;用完直接关闭。这就需要不断的创建和销毁连接&#xff0c;会消耗系统的资源。 借鉴线程池的思想&#xff0c;数据连接池就这么被设计出来了。…

【Unity2D 2022:NPC】制作任务系统

一、接受任务 1. 编辑NPC对话脚本&#xff1a; &#xff08;1&#xff09;创建静态布尔变量用来判断ruby是否接受到任务 public class NPCDialog : MonoBehaviour {// 创建全局变量用来判断ruby是否接到任务public static bool receiveTask false; } &#xff08;2&#xff…