環(huán)境構(gòu)建:VS2019+MSVC 編譯 Dfu-Util
本文轉(zhuǎn)載自微信公眾號「漫談嵌入式」,作者Vinson。轉(zhuǎn)載本文請聯(lián)系漫談嵌入式公眾號。
什么是DFU?
DFU,即 Device Firmware Upgrade, 也是屬于 USB類協(xié)議。主要用于設備升級,常用于手機(IOS,安卓)以及電視盒子等。相對于CDC 串口或者RNDIS等,是一種比較快的USB傳輸方式。
DFU :需要進入USB DFU 模式,適合在bootloader階段做升級。
CDC OTA:可以作為一種composite設備,一起運行。缺點是,可能會受帶寬影響導致傳輸速度受限。
如何使用?
- 設備:設備端需要支持DFU 模式
- 主機:需要配套的DFU 主機工具比如開源的庫 dfu-util, 直接使用或者二次開發(fā)。
- 驅(qū)動:需要安裝dfu 驅(qū)動, 可以通過 zading, 安裝通用的驅(qū)動。
dfu-util 交叉編譯
dfu-util 是USB 論壇的 DFU 1.0 和DFU 1.1規(guī)范的主機端實現(xiàn) 。DFU 旨在向/從通過 USB 連接的設備下載和上傳固件。它的范圍從微控制器板等小型設備到手機
本文主要介紹windows 上的交叉編譯,Linux 平臺交叉編譯,直接參考官網(wǎng)即可,難度不是很大。
有關windows 交叉編譯,目前有兩種思路:
- 使用 msys2 在windows 構(gòu)建虛擬的linux 環(huán)境。MSYS2 + MinGW
- 使用visual studio + mscv
準備
- 編譯環(huán)境:安裝 Visual Studio 2019 community
- dfu-util 源碼:git clone git://git.code.sf.net/p/dfu-util/dfu-util
- libusb:git clone https://github.com/libusb/libusb.git
項目工程調(diào)整
1. 調(diào)整工程文件為vs 2019
2. 修改 解決方案文件,dfu-util_2019.sln ,調(diào)整為2019
可以看到默認libusb 和 dfu-uilt 位于同級目錄,也可以將libusb 合到dfu-util項目里面,不過需要修改相關頭文件包含。筆者建議初次編譯,不用修改項目引用路徑。
3. libusb 項目工程
4. 用vs 2019 打開dfu-util_2019.sln
5. 修改外部引用
編譯錯誤修改
1. off_t錯誤
解決:右鍵項目->屬性->配置屬性->C/C++ -> 預處理器-> 預處理器宏定義-> 編輯,新增_OFF_T_DEFINED 宏定義
2. 錯誤2:ssize_t 未定義
解決方法:包含libusb.h
3. 消除警告
解決方法:同錯誤1,定義宏_CRT_NONSTDC_NO_DEPRECATE
4. 錯誤3:SSIZE_MAX 未定義
SSIZE_MAX 是 POSIX 下的定義, 修改如下:
5. 錯誤4:無法解析頭文件
解決方法:包含正確的頭文件目錄
6. 編譯成功
編譯總結(jié)
環(huán)境統(tǒng)一:git 下來的庫是vs 2010工程,需要先修改成自己vs 的版本,具體版主version,新建一個空項目即可查看。
外部引用依賴:修改工程名后,項目之間引用關系可能會用問題,這時候需要移除,然后重新正確的添加引用。
頭文件正確包含:主要是libusb.h 和 getopt.h
編譯錯誤:高版本的IDE可能語法檢查比較強,所以遇到錯誤和警告,不要慌,耐心解決就行。
對于getopt和libusb只需要編譯一次即可,后續(xù)直接使用就行。
在成功編譯后,我們可以根據(jù)需要,將控制臺程序遷移到圖形化的界面上,這樣一個基本的DFU 主機升級工具就出來了。
總結(jié)
本文簡單的介紹了什么是DFU,同時詳細的介紹了,怎么使用 VS + MSVC 編譯 dfu-util,記錄一下整個調(diào)試過程。不得不說,還是linux 下的編譯要方便多。不同的 vs 可能會有些許差異。對于做USB DFU 相關的朋友可以借鑒一下。