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

news2024/9/20 7:55:22

目录

文章目录

  • 目录
  • 摘要
  • 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.coloradmin.cn/o/1916766.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【漏洞复现】锐捷校园网自助服务系统 任意文件读取

声明&#xff1a;本文档或演示材料仅用于教育和教学目的。如果任何个人或组织利用本文档中的信息进行非法活动&#xff0c;将与本文档的作者或发布者无关。 一、漏洞描述 锐捷校园网自助服务系统是用于学校网络管理的一个平台&#xff0c;login_judge.jsf接口存在任意文件读取…

甘肃美食于兰洽会数智电商馆展现魅力

在近日盛大开幕的兰洽会上&#xff0c;数智电商馆成为了备受瞩目的焦点&#xff0c;而甘肃平凉的特产更是在其中大放异彩。 平凉&#xff0c;这座拥有深厚历史文化底蕴的城市&#xff0c;带着其独具特色的物产走进了兰洽会的舞台。走进数智电商馆&#xff0c;首先映入眼帘的便是…

防火墙小试——部分

1.实验拓扑及要求 1&#xff0c;Dz区内的服务器&#xff0c;办公区仅能在办公时间内(9: 00 - 18 : 00〉可以访问&#xff0c;生产区的设备全天可以访问. 2&#xff0c;生产区不允许访问互联网&#xff0c;办公区和游客区允许访问互联网 3&#xff0c;办公区设备10.0.2.10不允…

数据结构 —— BellmanFord算法

数据结构 —— BellmanFord算法 BellmanFord算法检测负权值环BellmanFord和Dijkstra思想上的区别Dijkstra算法的思想Bellman-Ford算法的思想思想上的对比 我们今天来看一个算法BellmanFord算法&#xff0c;我们之前的Dijkstra算法只能用来解决正权图的单源最短路径问题。 Bell…

计算机的错误计算(二十七)

摘要 介绍错数&#xff1a;任给一个单变元函数&#xff0c;当自变量被截断时&#xff0c;函数值中含有的错误的有效数字个数&#xff0c;并给出其计算方法。 首先&#xff0c;从字面上看&#xff0c;错数表示错误的有效数字个数。 下面从一个略显粗糙的化简过程&#xff0c;推…

数据结构-散列表(hash table)

6.1 散列表的概念 散列表又叫哈希&#xff08;hash&#xff09;表&#xff0c;是根据键&#xff08;key&#xff09;直接访问在内存存储位置的值&#xff08;value&#xff09;的数据结构&#xff0c;由数组演化而来&#xff08;根据数组支持按照下标进行随机访问数据的特性&a…

14-60 剑和诗人34 - Kubernetes 是部署 LLM 的首选平台

​​​​ 介绍 近年来&#xff0c;大型语言模型 (LLM) 一直在彻底改变自然语言处理领域。从 GPT-3 到 PaLM 等&#xff0c;这些模型可以生成类似人类的文本、回答问题、总结文档等等。然而&#xff0c;训练和部署 LLM 需要大量的计算。随着这些模型的规模和能力不断增长&#…

类和对象——【const成员】【static成员】【友元】【内部类】

P. S.&#xff1a;以下代码均在VS2019环境下测试&#xff0c;不代表所有编译器均可通过。 P. S.&#xff1a;测试代码均未展示头文件iostream的声明&#xff0c;使用时请自行添加。 博主主页&#xff1a;Yan. yan.                        …

有必要找第三方软件测评公司吗?如何选择靠谱软件测评机构?

软件测试是确保软件质量的重要环节&#xff0c;而在进行软件测试时&#xff0c;是否有必要找第三方软件测评公司呢?第三方软件测评公司是指独立于软件开发公司和用户之间的中立机构&#xff0c;专门从事软件测试和测评工作。与自身开发团队或内部测试团队相比&#xff0c;选择…

修BUG:程序包javax.servlet.http不存在

貌似昨晚上并没有成功在tomcat上面运行&#xff0c;而是直接运行了网页。 不知道为啥又报错这个。。。 解决方案&#xff1a; https://developer.baidu.com/article/details/2768022 就整了这一步就行了 而且我本地就有这个tomcat就是加进去了。 所以说啊&#xff0c;是不是&a…

CentOS7 安装 git 命令

通过yum源install下载的git版本比较低&#xff0c;不推荐此方式安装。 官网下载最新版git源码&#xff1a;Git 1. 解压安装包 tar -xzvf git-2.45.2.tar.gz 2. 安装相关依赖 yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils…

政安晨:【Keras机器学习示例演绎】(五十四)—— 使用神经决策森林进行分类

目录 导言 数据集 设置 准备数据 定义数据集元数据 为训练和验证创建 tf_data.Dataset 对象 创建模型输入 输入特征编码 深度神经决策树 深度神经决策森林 实验 1&#xff1a;训练决策树模型 实验 2&#xff1a;训练森林模型 政安晨的个人主页&#xff1a;政安晨 欢…

Git常见命令和用法

Git 文件状态 Git 文件 2 种状态: 未跟踪:新文件&#xff0c;从未被 Git 管理过已跟踪:Git 已经知道和管理的文件 常用命令 命令作用注意git -v查看 git 版本git init初始化 git 仓库初始化之后有工作区、暂存区(本地库)、版本库git add 文件标识暂存某个文件文件标识以终…

吹田电气绿色能源 未来可期

在2024年7月的上海慕尼黑电子展上&#xff0c;吹田电气功率分析仪成为了备受瞩目的明星产品。作为电子测试与测量领域的重要工具&#xff0c;功率分析仪在展会上展示了其在绿色能源和高效能量管理方面的最新应用&#xff0c;引发了广泛关注和热议。 领先技术&#xff0c;精准测…

科普文:jvm笔记

一、JVM概述# 1. JVM内部结构# 跨语言的平台&#xff0c;只要遵循编译出来的字节码的规范&#xff0c;都可以由JVM运行 虚拟机 系统虚拟机 VMvare 程序虚拟机 JVM JVM结构 HotSpot虚拟机 详细结构图 前端编译器是编译为字节码文件 执行引擎中的JIT Compiler编译器是把字节…

untiy 在菜单栏添加自定义按钮 点击按钮弹出一个Unity窗口,并在窗口里添加属性

using System.Collections.Generic; using UnityEditor; using UnityEngine; using UnityEngine.Rendering.PostProcessing;public class AutoGenerateWindow : EditorWindow //这是定义一个窗口 {public string subjecttName "科目名字";//科目的名字public GameOb…

Python | Leetcode Python题解之第228题汇总区间

题目&#xff1a; 题解&#xff1a; class Solution:def summaryRanges(self, nums: List[int]) -> List[str]:def f(i: int, j: int) -> str:return str(nums[i]) if i j else f{nums[i]}->{nums[j]}i 0n len(nums)ans []while i < n:j iwhile j 1 < n …

android13 rom 开发总纲说明

1. 这里是文章总纲&#xff0c;可以在这里快速找到需要的文章。 2. 文章一般是基于标准的android13&#xff0c;有一些文章可能会涉及到具体平台&#xff0c;例如全志&#xff0c;瑞芯微等一些平台。 3.系统应用 3.1系统应用Launcher3桌面相关&#xff1a; 3.2系统应用设置S…

获奖案例回顾|基于卫星遥感和无人机的水稻全流程风险减量项目

引言 在现代农业保险领域&#xff0c;技术创新是推动行业进步的关键。珈和科技与太平财险的合作&#xff0c;旨在利用先进的卫星遥感和无人机技术&#xff0c;解决传统农业保险面临的诸多挑战&#xff0c;从而提升保险效率和服务质量。本次分享的项目案例获得了《金融电子化》…

关于无法定位程序输入点 SetDefaultDllDirectories于动态链接库KERNEL32.dll 上 解决方法

文章目录 1. ERNEL32.dll 下载2. 解决方法 &#x1f44d; 个人网站:【 洛秋小站】 1. ERNEL32.dll 下载 Windows 7 在安装postman时报错缺少动态链接库,提示缺少.NET Framework,这是因为本地缺少相应的dll文件导致的&#xff0c;这时就需要下载ERNEL32.dll文件&#xff0c;在解…