目錄
文章目錄
- 目錄
- 摘要
- 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 以使用外部編譯器。