概述
一般嵌入式軟件開發分爲編譯、調試和下載幾個步驟。本文結合crazefie項目,說明開發流程。
準備源碼
由於官方倉庫中使用了git submodule
,所以在克隆源碼時需使用--recursive
標誌
git clone --recursive https://github.com/bitcraze/crazyflie-firmware.git
如果已經克隆了倉庫,但是沒有添加--recursive
選項,需要手動添加子模塊
cd crazyflie-firmware
git submodule init
git submodule update
具體更新哪些項目可以查看.gitmodules
文件。
注意:
- 問題1:如果編譯時出現如下錯誤:
make[1]: *** No rule to make target 'libdw1000.o', needed by 'cf2.elf'. Stop. Makefile:350: recipe for target 'build' failed
解決辦法:上述錯誤原因是缺少libdw1000
文件,可以查看./vendor/libdw1000
文件夾是否爲空,如果爲空,說明子項目libdw1000
克隆失敗。同理如果出現提示缺少其它文件的錯誤,查看vendor
文件夾下相應的子項目是否爲空。嘗試輸入git submodule deinit
、git submodule init
、git submodule update
。- 問題2:
error: RPC failed; curl 18 transfer closed with outstanding read data remaining
error: RPC failed; curl 56 OpenSSL SSL_read: Connection was reset, errno 10054
解決辦法:嘗試使用SSH
協議代替HTTPS
,修改如下:
git clone --recursive git://github.com/bitcraze/crazyflie-firmware.git
通過該方式可以提高下載速度。
環境搭建
官方提供三種環境搭建方式,分別使用虛擬機鏡像Crazyflie VM、Docker鏡像toolbelt和本機安裝相應的ARM工具鏈來搭建開發環境。
虛擬機鏡像
概述
本文采用 VirtualBox 虛擬機軟件,該軟件屬於自由軟件,方便安裝。
VirtualBox
- 下載VirtualBox
- 安裝軟件
下載bitcraze鏡像
導入鏡像
啓動鏡像
注意:運行鏡像時可能會出現如下問題
錯誤1:Implementation of the USB 2.0 controller not found!
安裝VirtualBox Extension Pack即可解決
錯誤2:VT-x is not available
對於Win10電腦如果已經開啓了Hyper-V,需將其服務關閉;
1、控制面板 --> 程序和功能 --> 啓用或關閉windows功能
2、失效 H-yper-v、Windows 沙盒(Sandbox) 選項,使能 虛擬機平臺、Windows虛擬機監控程序平臺選項。
3、管理員打開 PowerShell客戶端
4、輸入bcdedit /set hypervisorlaunchtype off
5、重啓電腦
如果系統升級後無法打開鏡像,嘗試操作4。
Docker鏡像方式
安裝Docker
- Docker Hub下載
- 雙擊安裝文件,一直Next。
- 註冊Docker賬號
下載Docker鏡像
- 關於bitcraze/builder鏡像
- 打開PowerShell客戶端
- 拉取遠程鏡像
docker pull bitcraze/builder
下載過程如下所示,由於文件較大可能需要一段時間。
進入交互模式
- 查看鏡像是否下載成功
docker images
- 進入項目目錄
cd ./crazyflie-firmware
- 進入交互式環境
docker run --rm -it -v ${PWD}:/module bitcraze/builder bash
該命令用法參考Docker 常用命令
本地工具鏈配置
待補充
編譯
命令 | 含義 |
---|---|
all | 快捷編譯方式,所有文件都編譯 |
compile | 編譯生成 cflie.hex文件,但不更新version.c文件 |
build | 更新 version.c 文件並編譯生成 cflie.elf/hex文件 |
clean_o | 只清除目標文件,保留執行文件(.elf,.hex) |
clean | 清除所有的編譯文件 |
mrproper | 清除每一個編譯文件和典型的編輯器備份文件 |
cload | 如果crazyflie-clients-python與項目文件在同級目錄並且Crazyradio/Crazyradio PA被插入電腦,該命令將會嘗試通過無線bootloader燒寫固件 |
flash | 使用 OpenOCD燒錄.elf 文件 |
halt | 使用 OpenOCD 暫停目標芯片 |
reset | 使用 OpenOCD 復位目標芯片 |
openocd | 啓動 OpenOCD |