目录
文章目录
- 目录
- 摘要
- 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 以使用外部编译器。