环境构建:VS2019+MSVC 编译 dfu-util

简介: 环境构建:VS2019+MSVC 编译 dfu-util

什么是DFU?


DFU,即 Device Firmware Upgrade, 也是属于 USB类协议。主要用于设备升级,常用于手机(IOS,安卓)以及电视盒子等。相对于CDC 串口或者RNDIS等,是一种比较快的USB传输方式。


DFU :需要进入USB DFU 模式,适合在bootloader阶段做升级。


CDC OTA:可以作为一种composite设备,一起运行。缺点是,可能会受带宽影响导致传输速度受限。


如何使用?


  • 设备:设备端需要支持DFU 模式


  • 主机:需要配套的DFU 主机工具比如开源的库 dfu-util, 直接使用或者二次开发。


  • 驱动:需要安装dfu 驱动, 可以通过 zading, 安装通用的驱动。


dfu-util 交叉编译


dfu-util 是USB 论坛的 DFU 1.0 和DFU 1.1规范的主机端实现 。DFU 旨在向/从通过 USB 连接的设备下载和上传固件。它的范围从微控制器板等小型设备到手机


本文主要介绍windows 上的交叉编译,Linux 平台交叉编译,直接参考官网即可,难度不是很大。


有关windows 交叉编译,目前有两种思路:


  • 使用 msys2 在windows 构建虚拟的linux 环境。MSYS2 + MinGW


  • 使用visual studio + mscv


准备


  • 编译环境:安装 Visual Studio 2019 community


  • dfu-util 源码:git clone git://git.code.sf.net/p/dfu-util/dfu-util



项目工程调整


1. 调整工程文件为vs 2019


image.png


2. 修改 解决方案文件,dfu-util_2019.sln ,调整为2019


image.png


可以看到默认libusb 和 dfu-uilt 位于同级目录,也可以将libusb 合到dfu-util项目里面,不过需要修改相关头文件包含。笔者建议初次编译,不用修改项目引用路径。


image.png


3. libusb 项目工程


image.png


4. 用vs 2019 打开dfu-util_2019.sln


image.png


5. 修改外部引用


image.png

image.png


编译错误修改


1. off_t错误


image.png


解决:右键项目->属性->配置属性->C/C++ -> 预处理器-> 预处理器宏定义-> 编辑,新增_OFF_T_DEFINED 宏定义


image.png


2. 错误2:ssize_t 未定义


image.png


解决方法:包含libusb.h


image.png


3. 消除警告


image.png


解决方法:同错误1,定义宏_CRT_NONSTDC_NO_DEPRECATE


4. 错误3:SSIZE_MAX 未定义


image.png


SSIZE_MAX 是 POSIX 下的定义, 修改如下:


image.png


5. 错误4:无法解析头文件


image.png


解决方法:包含正确的头文件目录


image.png


6. 编译成功


image.png

image.png


编译总结


  • 环境统一:git 下来的库是vs 2010工程,需要先修改成自己vs 的版本,具体版主version,新建一个空项目即可查看。


  • 外部引用依赖:修改工程名后,项目之间引用关系可能会用问题,这时候需要移除,然后重新正确的添加引用。


  • 头文件正确包含:主要是libusb.h 和 getopt.h


  • 编译错误:高版本的IDE可能语法检查比较强,所以遇到错误和警告,不要慌,耐心解决就行。


  • 对于getopt和libusb只需要编译一次即可,后续直接使用就行。


  • 在成功编译后,我们可以根据需要,将控制台程序迁移到图形化的界面上,这样一个基本的DFU 主机升级工具就出来了。


总结


本文简单的介绍了什么是DFU,同时详细的介绍了,怎么使用 VS + MSVC 编译 dfu-util,记录一下整个调试过程。不得不说,还是linux 下的编译要方便多。不同的 vs 可能会有些许差异。对于做USB DFU 相关的朋友可以借鉴一下。

相关文章
|
机器学习/深度学习 数据采集 测试技术
Dowhy,一个强大的Python库,做金融量化领域的可以尝试下!
Dowhy,一个强大的Python库,做金融量化领域的可以尝试下!
573 2
|
19天前
|
缓存 弹性计算 关系型数据库
阿里云 2 核 4G 与 4 核 8G 服务器配置选型指南
阿里云 2 核 4G 与 4 核 8G 配置云服务器怎么样?怎么选择?作为程序员,在选择阿里云服务器时,核心关注性能匹配、稳定性、扩展性及资源利用率,2 核 4G 与 4 核 8G 作为高频配置,覆盖从开发测试到生产部署的多元场景。以下结合实例规格、技术特性、适用场景及客观价格,提供技术向选型参考。
|
5月前
|
人工智能 算法
林鸣晖:户外广告价值回归,技术驱动下的品效协同新范式
2025年,户外广告在技术驱动下迎来价值重构。阿里云瓴羊通过AI赋能,深入剖析行业四大趋势,推动户外营销向智能、全域、协同升级,助力品牌抢占用户心智,构建新生态。
320 0
|
5月前
|
JSON API UED
汇率查询API实战指南:通过Python调用获取多国汇率信息
本文介绍如何通过 Python 快速集成多币种汇率查询接口,实现实时获取全球主要货币汇率数据。适用于跨境电商价格换算、国际贸易结算等场景,帮助提升用户体验并规避汇率波动风险。
1214 0
汇率查询API实战指南:通过Python调用获取多国汇率信息
|
9月前
|
算法 前端开发 定位技术
地铁站内导航系统解决方案:技术架构与核心功能设计解析
本文旨在分享一套地铁站内导航系统技术方案,通过蓝牙Beacon技术与AI算法的结合,解决传统导航定位不准确、路径规划不合理等问题,提升乘客出行体验,同时为地铁运营商提供数据支持与增值服务。 如需获取校地铁站内智能导航系统方案文档可前往文章最下方获取,如有项目合作及技术交流欢迎私信我们哦~
730 1
|
机器学习/深度学习 存储 自然语言处理
Transformer中的FFN介绍
Transformer中的FFN介绍
1193 0
Transformer中的FFN介绍
|
SQL Java 数据库连接
解决bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: ORA-00911: 无效字符
解决bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: ORA-00911: 无效字符
369 0
|
算法 调度
FreeRTOS入门教程(任务优先级,Tick)
FreeRTOS入门教程(任务优先级,Tick)
1157 0
|
API 开发工具 C语言
【嵌入式开源库】EasyLogger的使用, 一款轻量级且高性能的日志库
【嵌入式开源库】EasyLogger的使用, 一款轻量级且高性能的日志库
1862 0

热门文章

最新文章