Windows下基于MSVC搭建libusb开发环境
准备
官网
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
调用内核驱动。
l
WinUSB.sys
无
libusbK.dll
时
:
libusb-1.0.dll --> WinUSB.dll --> WinUSB.sys
有
libusbK.dll
时:
libusb-1.0.dll -->
libusbK.dll
--> WinUSB.dll --> WinUSB.sys
l
libusbK.sys
内核驱动
libusb-1.0.dll -->
libusbK.dll
--> libusbK.sys
l
libusb0.sys
内核驱动
(
不够完善
)
libusb-1.0.dll -->
libusbK.dll
--> libusb0.sys
l
usbdk
驱动
(
不够完善
)
l
HID
驱动
(
不够完善
),
使用
HIDAPI
更好
|
活跃
原始网站
libusb.org
不再使用
,
libusbx
原先是
libusb
的克隆现在已经合并到
libusb,
libusbx.org
现在和
libusb
没有关系。
|
libusb-win32
|
Windows
libusb0.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
|
Windows
libusbK.sys
(KMDF)
libusbK.dll
(API)
|
https://libusbk.sourceforge.net/UsbK3/index.html
https://github.com/mcuee/libusbk/
|
libusbK.dll(API)
支持使用
libusbK.sys
,
libusb0.sys
,
WinUSB
libusb
在
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