LibUSB-Win32是一个用于Windows操作系统(Win98SE、WinME、Win2k和WinXP、Vista、Win7等)上的通用USB设备驱动程序该驱动程序允许使用者在不写任何一行核心驱动程序代码的情况下,可以访问Windows系统上的任意一个USB设备,具有以下特点:Ø 能够与任意一个已安装的USB设备进行通信Ø 可被用作自己开发的USB设备的驱动程序Ø 支持批量和中断传输Ø 支持USB规范中定义的所有标准设备请求Ø 支持USB设备制造商的自定义请求通过使用几个函数,就可以与USB设备进行简单通信了,通信的主要流程可分为以下四步:1) 调用usb_init函数,进行初始化2) 打开要进行通信的USB设备的句柄首先依次调用usb_find_busses、usb_find_devices和usb_get_busses这三个函数,获得已找到的USB总线序列;然后通过链表遍历所有的USB设备,根据已知的要打开USB设备的ID(VID/PID),找到相应的USB设备;最后调用usb_open函数打开该USB设备(在这里假设总线上没有相同VID和PID的USB设备如果总线上存在着相同VID和PID的设备,还需要进行其他条件判断,比如设备名称,以保证是打开的是期望的USB设备)。
3) 与USB设备进行通信使用usb_control_msg函数,向USB设备读取数据或写入数据4) 关闭USB设备完成所有操作后,调用usb_close函数关闭已经打开的USB设备编译工具:VS2010和WINDDK,可以去官网上直接下载源码,地址是 7600.16385.0(WINDOW XP及以上版本) WINDDK 6001.18002(WINDOWS 2000及以下版本)此处用的是 WINDDK 7600.16385.1,打开源码中的工程文件如下图所示: inf-wizard——设备驱动安装信息文件生成向导此向导可以扫描计算机上的USB设备,并可以获取你选择的设备的VID及PID生成inf文件install-filter——filter驱动安装libusb-dll——动态链接库,生成libusb0.dll上面说的“7个函数”就封装在这里面同时生成了libusb0.lib文件,供程序链接,实现libusb0.dll的装载libusb-sys——USB驱动,生成驱动文件libusb0.sys注意它是makefile项目testbulk——libusb-win32的 ”Hello,World!“。
testlibusb——实现libusb-win32驱动的设备的遍历并打印一部分设备描述信息testlibusb-win——WINFORM版的testlibusb编译工程,没有报错,但libusb-sys生成目录下也没有libusb0.sys文件,libusb-sys是靠WINDDK来编译链接的查看libusb-sys的项目属性页,在[配置属性]的栏里,查看“生成命令行”CD "$(ProjectDir)..\ddk_make"CMD /C make.cmd "arch=x86" "app=driver" "noclean=true" "outdir=$(OutDir)" "DIR_INTERMEDIATE=$(IntDir)" "debugmode=true"查看目录下的make.cfg文件 Default WinDDK directory(s) Adjust these values to match your environment; (REQUIRED)WINDDK_BASE=Z:\WinDDKWINDDK_DIR=!WINDDK_BASE!\7600.16385.0\;; (optional)WINDDK_W2K_DIR=!WINDDK_BASE!\6001.18002\把这两项改成你的WINDDK安装路径。
Default WinDDK directory(s) Adjust these values to match your environment; (REQUIRED)WINDDK_BASE=D:\WinDDKWINDDK_DIR=!WINDDK_BASE!\7600.16385.1\编译一下libusb-sys编译报错error MSB3073: ,修改ddk_make/make.cmd,Line175 W2K(末尾) 修改成WIN7,编译成功然后编译libwdi,老是报错error MSB3073,网上查了半天资料都没有解决办法,最终找到问题原因,所包含的文件没有放置在对应位置从编译的libusb-win32-src-1.2.6.0(可以从/* embed WinUSB driver files from the following DDK location */#ifndef DDK_DIR#define DDK_DIR "D:/WinDDK/7600.16385.1"#endif/* embed libusb0 driver files from the following location */#ifndef LIBUSB0_DIR#define LIBUSB0_DIR "E:/libusb-win32"#endif然后inf-wizard工程编译又出现问题,error LNK2019: 无法解析的外部符号,通过添加编译生成的libwdi .lib到工程路径中即可解决,最终编译完成整个项目。
编译过程参考如下文章:。