Windows下基于MSVC搭建libusb开发环境

描述

本文转自公众号,欢迎关注

Windows下基于MSVC搭建libusb开发环境 (qq.com)

准备

官网

https://libusb.info/

源码

git下载或者官网下载

https://github.com/libusb/libusb.git

内核

API参考

https://libusb.sourceforge.io/api-1.0/libusb_api.html

WIKI

https://github.com/libusb/libusb/wiki

WINDOWS下编译好的库

官网下可以直接下载Windows下编译好的开发包。

内核

Libusb简介

跨平台建议使用libusb,如果仅在win下可以使用libusbk,实际上win上libusb也是使用libusbk去调用内核驱动,综合下表,使用libusb开发是最合适选择。

Libusb采用LGPL协议,对于商业软件中使用其作为第三方库使用,不修改其源码是合适的,这种情况不需要开源自己的部分。而对于基于此做二次开发修改源码的话,则修改后的代码需要继续符合 LGPL v2.1协议。

平台 链接 状态
libusb 跨平台 https://libusb.info/ libusb没有涉及Windows内核驱动,是一个用户空间库,支持以下内核驱动程序: 基本都是通过** libusbK.dll调用内核驱动。lWinUSB.sys无libusbK.dll时:libusb-1.0.dll --> WinUSB.dll --> WinUSB.sys有libusbK.dll时:libusb-1.0.dll -->libusbK.dll --> WinUSB.dll --> WinUSB.sysllibusbK.sys内核驱动libusb-1.0.dll --> libusbK.dll** --> libusbK.sysllibusb0.sys内核驱动(不够完善)libusb-1.0.dll -->libusbK.dll--> libusb0.syslusbdk驱动(不够完善)lHID驱动(不够完善),使用HIDAPI 更好 活跃原始网站libusb.org不再使用,libusbx原先是libusb的克隆现在已经合并到libusb,libusbx.org现在和libusb没有关系。
libusb-win32 Windowslibusb0.sys(WDM)libusb0.dll(API) https://sourceforge.net/p/libusb-win32/wiki/Home/https://github.com/mcuee/libusb-win32 libusb0.dll(API)支持 使用libusb0.sys和libusbK.sys.API是libusb-0.1 API的超集 最后更新2022目前只做bug修复不再更新,跨平台建议使用libusb,仅win下建议使用libusbk
libusbK WindowslibusbK.sys(KMDF)libusbK.dll(API) https://libusbk.sourceforge.net/UsbK3/index.htmlhttps://github.com/mcuee/libusbk/ libusbK.dll(API)支持使用libusbK.sys,libusb0.sys,WinUSBlibusb在windows上即使用该库调用内核驱动。支持同步传输,完全兼容WinUSB的API。 活跃
openusb Solaris https://sourceforge.net/projects/openusb/ 来源于libusb-1.0 最后更新2020年
usbdk 跨平台 https://github.com/daynix/UsbDk 来源于libusb-1.0.21支持同步传输支持不如WinUSB/libusbK.sys/libusb0.sys 最后更新2020

在Windows下使用

参考

https://github.com/libusb/libusb/wiki/Windows#How_to_use_libusb_on_Windows

我们这里基于libusbk

安装libusbk

https://sourceforge.net/projects/libusbk/

内核

下载到的版本是libusbK-3.1.0.0-setup.exe

驱动切换

先下载Zadig用于切换驱动

https://zadig.akeo.ie/

内核

编译libusb库

从 https://github.com/libusb/libusb.git下载最新的代码

进入代码目录双击打开libusb\\msvc\\libusb.sln (注我这里试用MSVC Community 2022)

点击左侧解决方案,菜单栏生成->生成解决方案

内核

生成的动态库dll位于libusb\\build\\v143\\x64\\Debug\\dll下 libusb-1.0.dl libusb-1.0.lib

生成的静态库lib位于libusb\\build\\v143\\x64\\Debug\\lib下 libusb-1.0.lib

libusb\\build\\v143\\x64\\Debug下的getopt.lib

libusb\\build\\v143\\x64\\Debug下还生成了很多测试程序,比如.\\testlibusb.exe

PS C:\\Users\\qinyunti\\OneDrive\\wuqi\\usb\\libusb\\build\\v143\\x64\\Debug > .\\testlibusb.exe


Dev (bus 2, device 5): 0BDA - 4853 speed: 12M


Dev (bus 2, device 0): 8086 - 51ED speed: 5G


Dev (bus 2, device 12): 15BA - 002A speed: 480M


Dev (bus 2, device 6): 046D - C542 speed: 12M


Manufacturer:              Logitech


Product:                   Wireless Receiver


Dev (bus 2, device 4): 174F - 1811 speed: 480M


Manufacturer:


Product:                   Integrated Camera


Dev (bus 2, device 2): 05E3 - 0612 speed: 5G


Dev (bus 2, device 14): 0403 - 6001 speed: 12M


Dev (bus 2, device 16): 16C0 - 05DC speed: 5G


Manufacturer:              tusb.org


Product:                   USB Packet Viewer


Dev (bus 2, device 8): 0B95 - 1790 speed: 5G


Dev (bus 2, device 3): 05E3 - 0610 speed: 480M


Dev (bus 1, device 0): 8086 - 461E speed: 5G


Dev (bus 2, device 15): 0403 - 6001 speed: 12M


Dev (bus 2, device 11): 1A40 - 0101 speed: 480M


Dev (bus 2, device 13): 0403 - 6010 speed: 480M


PS C:\\Users\\qinyunti\\OneDrive\\wuqi\\usb\\libusb\\build\\v143\\x64\\Debug >

直接下载libusb库

可以从官网https://libusb.info/

菜单栏

Downloads->Latest windows Binaries 下载

我这里下载的是最新版libusb-1.0.26-binaries.7z

解压

动态链接库libusb-1.0.26-binaries\\VS2015-x64\\dll下的libusb-1.0.dll和libusb-1.0.lib

静态链接库libusb-1.0.26-binaries\\VS2015-x64\\lib下的getopt.lib和libusb-1.0.lib

在自己的工程中使用

工程配置

这里使用我们从源码构建的动态链接库的形式,静态链接库一样。

在自己的工程目录中创建libusb目录

创建inc和lib子目录

复制libusb\\libusb下所有头文件到自己工程libusb下的inc目录下

复制libusb\\build\\v143\\x64\\Debug\\dll下的 libusb-1.0.dl libusb-1.0.lib,libusb\\build\\v143\\x64\\Debug下的getopt.lib到

自己工程libusb下的lib目录下

右键点击工程名->属性

设置头文件包含路径

$(MSBuildProjectDirectory)\\Src\\libusb\\inc;

设置库文件包含路径

$(MSBuildProjectDirectory)\\Src\\libusb\\lib;

内核

设置要包含的库getopt.lib;libusb-1.0.lib;

内核

测试

复制libusb\\examples下的testlibusb.c到自己的工程目录,添加到工程。

生成解决方案

将libusb-1.0.dll复制到exe文件所在目录,然后运行

.\\USB.exe -v

可以查看设备的相关信息。

Dev (bus 2, device 13): 0403 - 6010 speed: 480M


Configuration:


wTotalLength:            55


bNumInterfaces:          2


bConfigurationValue:     1


iConfiguration:          0


bmAttributes:            80h


MaxPower:                50


Interface:


bInterfaceNumber:      0


bAlternateSetting:     0


bNumEndpoints:         2


bInterfaceClass:       255


bInterfaceSubClass:    255


bInterfaceProtocol:    255


iInterface:            2


Endpoint:


bEndpointAddress:    81h


bmAttributes:        02h


wMaxPacketSize:      512


bInterval:           0


bRefresh:            0


bSynchAddress:       0


Endpoint:


bEndpointAddress:    02h


bmAttributes:        02h


wMaxPacketSize:      512


bInterval:           0


bRefresh:            0


bSynchAddress:       0


Interface:


bInterfaceNumber:      1


bAlternateSetting:     0


bNumEndpoints:         2


bInterfaceClass:       255


bInterfaceSubClass:    255


bInterfaceProtocol:    255


iInterface:            2


Endpoint:


bEndpointAddress:    83h


bmAttributes:        02h


wMaxPacketSize:      512


bInterval:           0


bRefresh:            0


bSynchAddress:       0


Endpoint:


bEndpointAddress:    04h


bmAttributes:        02h


wMaxPacketSize:      512


bInterval:           0


bRefresh:            0


bSynchAddress:       0

  审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分