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.mzph.cn/diannao/44834.shtml

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

相关文章

红酒与未来科技:传统与创新的碰撞

在岁月的长河中&#xff0c;红酒以其深邃的色泽、丰富的口感和不同的文化魅力&#xff0c;成为人类文明中的一颗璀璨明珠。而未来科技&#xff0c;则以其迅猛的发展速度和无限的可能性&#xff0c;领着人类走向一个崭新的时代。当红酒与未来科技相遇&#xff0c;一场传统与创新…

ADI新型充电器解决方案可实现电池堆电压和充电效率

就目前而言&#xff0c;这可能是生活中zui常见的问题了。世纪之交&#xff0c;电池&#xff08;尤其是基于锂离子的电池&#xff09;成本的降低和性能的提高&#xff0c;推动了电池供电的储能和便携式设备的稳步增长。此外&#xff0c;超级电容器由于具有独特的性质&#xff0c…

骨传导耳机最热门好用款推荐,选购骨传导耳机前不能忽略的六大细节

如今的社会在耳机种类方面可以说是越来越多&#xff0c;于是很多人在挑选的时候往往选择不到适合自己的一款耳机&#xff0c;尤其是在近些年来席卷耳机市场的骨传导耳机&#xff0c;开放耳道的设计在很多时候佩戴无异于是更加的适合&#xff0c;正好小编这边对于比较热门的几款…

社交App iOS审核中的4.3问题:深入分析与解决策略

社交App审核中的4.3问题&#xff1a;深入分析与解决策略 在iOS应用开发和审核过程中&#xff0c;开发者经常会遇到苹果审核4.3问题。这一问题往往涉及应用的设计和内容重复性&#xff0c;导致应用被拒绝上架。为了帮助开发者更好地理解和解决这一问题&#xff0c;本文将对4.3问…

动漫3d模型设计需要注意什么?---模大狮模型网

设计动漫3D模型时&#xff0c;有几个方面需要注意&#xff1a; 保持角色风格一致性&#xff1a; 动漫通常有独特的风格和美学&#xff0c;设计时要确保模型与所代表的角色或作品的整体风格相符。注意保持线条和比例的一致性&#xff0c;使模型能够忠实地呈现原作的特点。 注重…

springboot餐饮管理系统-计算机毕业设计源码43667

摘 要 在信息化、数字化的时代背景下&#xff0c;餐饮行业面临着前所未有的挑战与机遇。为了提高运营效率、优化顾客体验&#xff0c;餐饮企业亟需一套高效、稳定且灵活的管理系统来支撑其日常运营。基于Spring Boot的餐饮管理系统应运而生&#xff0c;成为餐饮行业数字化转型的…

Python基础教学之一:入门篇——迈入编程世界的第一步

Python基础教学之一&#xff1a;入门篇——迈入编程世界的第一步 一、Python简介&#xff1a;历史与现状 Python&#xff0c;一种解释型、高级和通用的编程语言&#xff0c;由Guido van Rossum在1989年圣诞节期间创造&#xff0c;并于1991年首次发布。设计哲学强调代码的可读性…

论文降痕降重全攻略:从技巧到工具,助你轻松应对学术挑战

AIGC降重工具&#xff1a;快速降低论文查重率 高查重率是许多毕业生的困扰。通常&#xff0c;高查重率源于过度引用未经修改的参考资料和格式错误。传统的降重方法&#xff0c;如修改文本和增添原创内容&#xff0c;虽必要但耗时且成效不一。 鉴于此&#xff0c;应用AI工具进…

【企业级监控】源码部署Zabbix与监控主机

Zabbix企业级分布式监控 文章目录 Zabbix企业级分布式监控资源列表基础环境一、LNMP环境搭建&#xff08;在zbx主机上&#xff09;1.1、配置Yum仓库1.1.1、下载阿里云的仓库文件1.2.2、安装PHP7的仓库1.2.3、生成Mariadb10.11的仓库文件1.2.4、快速重建Yum缓存 1.2、安装PHP7.4…

请求取消(多种)

XMLHttpRequest XMLHttpRequest 可以使用 abort() 方法来实现请求取消。 const xhr new XMLHttpRequest();xhr.open(GET, http://localhost:3000/api/txt);xhr.timeout 2;xhr.ontimeout function () {xhr.abort();console.error(请求超时&#xff0c;已中断);};xhr.onload …

shell脚本之for循环

一、循环中的常见语句 1.1 echo 打印 -n &#xff1a;表示不换行输出-e &#xff1a;输出转义字符 \b &#xff1a;相当于退格键(backspace)\n &#xff1a;换行&#xff0c;相当于回车\f &#xff1a;换行&#xff0c;换行后的新行的开头连着上一行的行尾\t &#xff1a;插入…

Oracle 23ai 中的重要新特性 VECTOR 数据类型

Oracle 23ai 中的 VECTOR 数据类型是 Oracle 数据库在 AI 领域的一个重要新特性&#xff0c;它允许用户以向量的形式存储数据&#xff0c;并在这些向量的基础上进行高效的搜索和分析。以下是对 Oracle 23ai VECTOR 数据类型的详细解析&#xff1a; 参考官方文档地址 https://d…

【Ubuntu-18.04.6 LTS (Bionic Beaver)】串口无法root登录解决方案

root用户无法再窗口登录 用户界面登录提示 soory that didnot work 解决方案 GDM 配置 /etc/gdm3/custom.conf 中增加或删除注释 [security] AllowRoottrue重启服务 service gdm restart确认 PAM 配置 GDM 使用 PAM 进行认证&#xff0c;可能 PAM 配置中限制了 root 登录…

GitHub网页打开慢的解决办法

有时候看资料絮叨github网页打不开&#xff0c;经百度后&#xff0c;发下下面的方法有效。 1&#xff09;获取github官网ip 我们首先要获取github官网的ip地址&#xff0c;方法就是打开cmd&#xff0c;然后ping 找到github的地址&#xff1a;20.205.243.166 2&#xff09;配…

体验升级!贵州“森林之城”携苏州金龙新V系谱写高端旅运新篇章

自今年出台文旅“四免一多一减”方案以来&#xff0c;贵州省围绕旅游资源&#xff0c;着力打造亮点&#xff0c;不断提升产品供给水平&#xff0c;旅游市场持续火爆。近日&#xff0c;贵州森林之城旅运公司从苏州金龙批量采购50座海格新V系豪华大巴&#xff0c;为贵州高端旅游市…

域名系统DNS的工作原理和服务搭建

文章目录 域名解析和DNSDNS概念 DNS服务工作原理递归查询迭代查询递归和迭代的区别DNS缓存 DNS服务器的安装whoisDNS软件bind DNS主服务器实现1.在主配置文件中定义区域2.定义区域解析库文件各种资源类型解析库记录定义项 3.配置识别区域库文件4.重启named服务启用DNS客户端缓存…

Java--static详解

1.static静态的意义&#xff0c;加在属性面前就为静态属性&#xff1b;加在方法面前就为静态方法 2.如图&#xff0c;定义了一个静态属性age&#xff0c;一个非静态属性score&#xff1b; 输出语句一共四句&#xff0c;其中第三句报错&#xff0c;由于静态和非静态的区别&…

微气象仪的工作原理

型号推荐&#xff1a;云境天合TH-WQX5】风力发电传感器在风力发电系统中起着至关重要的作用&#xff0c;它们能够实时监测和记录各种关键参数&#xff0c;为风力发电机组的控制提供数据支持&#xff0c;从而确保风力发电系统的安全、高效运行。以下是对风力发电传感器的详细解析…

使用Docker制作python项目镜像

各docker桌面版本集合&#xff1a;如果提示新版本系统不支持&#xff0c;可下载旧版本 我也分享在下面。 链接: https://pan.baidu.com/s/1HvaO2wOIE3pNE0bM7Qm3sA?pwdg7ky 提取码: g7ky –来自百度网盘超级会员v2的分享 来源参考&#xff1a;https://zhuanlan.zhihu.com/p/65…

uniapp 九宫格抽奖

<template><view class"container"><view class"navleft" click"navback"><image src"/static/cj/left.png" mode""></image></view><view class"navtitle">抽奖</…