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.pswp.cn/diannao/44834.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/44834.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/44834.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

js 日期比較大小

在JavaScript中&#xff0c;比較日期大小通常涉及將日期轉換為時間戳&#xff08;自1970年1月1日以來的毫秒數&#xff09;&#xff0c;然后比較這些時間戳。這是因為直接比較兩個Date對象可能不會按預期工作&#xff0c;特別是如果你試圖了解哪個日期在另一個日期之前或之后。…

紅酒與未來科技:傳統與創新的碰撞

在歲月的長河中&#xff0c;紅酒以其深邃的色澤、豐富的口感和不同的文化魅力&#xff0c;成為人類文明中的一顆璀璨明珠。而未來科技&#xff0c;則以其迅猛的發展速度和無限的可能性&#xff0c;領著人類走向一個嶄新的時代。當紅酒與未來科技相遇&#xff0c;一場傳統與創新…

2024.07.03校招 實習 內推 面經

綠*泡*泡VX&#xff1a; neituijunsir 交流*裙 &#xff0c;內推/實習/校招匯總表格 1、提前批 | 中國兵器工業集團第二〇二研究所 | 提前批/招/聘暨/暑期/開放日 提前批 | 中國兵器工業集團第二〇二研究所 | 提前批招聘暨暑期開放日 2、夏令營 | 2024年南網數字集團“未來…

ADI新型充電器解決方案可實現電池堆電壓和充電效率

就目前而言&#xff0c;這可能是生活中zui常見的問題了。世紀之交&#xff0c;電池&#xff08;尤其是基于鋰離子的電池&#xff09;成本的降低和性能的提高&#xff0c;推動了電池供電的儲能和便攜式設備的穩步增長。此外&#xff0c;超級電容器由于具有獨特的性質&#xff0c…

oppo25屆秋招,快手25屆技術人才專項計劃內推

oppo25屆秋招&#xff0c;快手25屆技術人才專項計劃內推 ①【OPPO】25屆秋招開啟&#xff01; 內推簡歷優先篩選&#xff01; &#x1f449;崗位類別&#xff1a;AI/算法類&#xff0c;軟件類&#xff0c;硬件類&#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;插入…

編程用什么軸體比較好用:全面解析四種軸體的優劣與應用

編程用什么軸體比較好用&#xff1a;全面解析四種軸體的優劣與應用 在編程的世界里&#xff0c;選擇一款合適的機械鍵盤軸體&#xff0c;不僅能提升工作效率&#xff0c;更能帶來舒適的打字體驗。然而&#xff0c;面對市場上琳瑯滿目的軸體類型&#xff0c;究竟該如何選擇呢&a…

a+=1和a=a+1的區別

文章目錄 a1 和a a1的區別一、實例代碼二、代碼解釋三、總結 a1 和a a1的區別 一、實例代碼 public class Test {public static void main(String[] args) {byte a 10; // a a 1; // a (byte) (a 1);a 1;System.out.println(a);} }上面的對變量a進行加一操作時&a…

[Linux安全運維] Nginx相關

Nginx相關 1. 概述 Nginx是一種Web服務器&#xff0c;其具有高并發、高負荷的能力&#xff0c;具有以下優點&#xff1a; 穩定、系統資源消耗少、占用內存較少。軟件安裝包小且定制化強。具有高并發能力&#xff0c;可處理30000-50000個請求。 Nginx作為靜態頁面的web服務器…

【《流暢的python》3.2-3.3節學習筆記】

目錄 前言字典推導dict.setdefault總結 前言 本文為《流暢的python》的3.2-3.3節的學習筆記。 字典推導 DIAL_CODES [(86, China),(91, India),(1, United States),(62, Indonesia),(55, Brazil),(92, Pakistan),(880, Bangladesh),(234, Nigeria),(7, Russia),(81, Japan),…

linux命令: ssh的使用

ssh隧道連通aws亞馬遜云 ssh -D 7017 -i "/cygdrive/e/tbqapps2/cfg/*****.pem" adminec2-43-207-84-117.ap-northeast-1.compute.amazonaws.com ssh -o ServerAliveInterval30 -fN -D 8080 root39.105.185.11ssh -fN -D 7002 -i "D:\tbqapps2\cfg\******.pem&…

Oracle 23ai 中的重要新特性 VECTOR 數據類型

Oracle 23ai 中的 VECTOR 數據類型是 Oracle 數據庫在 AI 領域的一個重要新特性&#xff0c;它允許用戶以向量的形式存儲數據&#xff0c;并在這些向量的基礎上進行高效的搜索和分析。以下是對 Oracle 23ai VECTOR 數據類型的詳細解析&#xff1a; 參考官方文檔地址 https://d…