LibUSB-Win32程序介绍

转载 2015年07月08日 15:07:53

LibUSB-Win32是一个用于Windows操作系统(Win98SE、WinME、Win2k和WinXP)上的通用USB设备驱动程序。该驱动程序允许使用者在不写任何一行核心驱动程序代码的情况下,可以访问Windows系统上的任意一个USB设备。该驱动程序具有以下特点:

l         能够与任意一个已安装的USB设备进行通信

l         可被用作自己开发的USB设备的驱动程序

l         支持批量和中断传输

l         支持USB规范中定义的所有标准设备请求

l         支持USB设备制造商的自定义请求

LibUsb-Win32是由http://libusb-win32.sourceforge.net发布的,遵守GNU Lesser General Public License(LGPL)和GNU General Public License(GPL)许可协议。这些协议明确规定:允许LibUsb-Win32用于商业软件,而不只是开源软件。

通过使用七个函数,就可以与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设备。

//---------------------------------------------------------- 
    
    再来介绍一下编译工具。
    MSVC(KIT里带的工程文件是VS2008的,如果你使用VS2005或VC6的话,就要自建工程了,libusb-win32的工程比较复杂,不推荐。我使用的是Visual studio 2008 RTM 90天试用版的)
    BCC(如果你装了Borland C++ Builder的话,只要修改make.cfg,然后运行ddk_make文件夹下对应的批处理文件就可以了,这里我就不介绍了)
     上面两个都是用来编译libusb-win32的动态链接库、相关工具和DEMO程序的。我们还需要WINDDK来编译驱动,即生成libusb0.sys文件。从官方提供的make.cfg文件上来看,使用的是WINDDK 7600.16385.0(WINDOW XP及以上版本) WINDDK 6001.18002(WINDOWS 2000及以下版本)。我只在MICROSOFT的官网上找到最新的 WINDDK 7600.16385.1,所以,我用的是这个。

    有了VS2008和WINDDK,我们就可以开始下面的工作了。

    下载源码
     你可以去官网上直接下载源码,地址是http://sourceforge.net/projects/libusb-win32/files/
     也可以通过SVN工具从 https://libusb-win32.svn.sourceforge.net/svnroot/libusb-win32 libusb-win32 检出最新的源码,我使用的是SVN工具是TortoiseSVN。
     vs2008的项目文件位于projects文件夹中。我们来看一下
 总共有7个项目。
    inf-wizard——设备驱动安装信息文件生成向导。此向导可以扫描计算机上的USB设备,并可以获取你选择的设备的VID及PID生成inf文件。
    
    

LibUSB-Win32程序介绍
 (原文件名:inf1.jpg) 
引用图片



 

LibUSB-Win32程序介绍
 (原文件名:inf2.jpg) 
引用图片



    install-filter——filter驱动安装。filter driver 是驱动的高层境界,杀毒软件,防火墙,笔记本的多功能按键等等都会用到。
    libusb-dll——动态链接库,生成libusb0.dll。上面说的“7个函数”就封装在这里面。同时生成了libusb0.lib文件,供你的程序链接,这个文件实现了libusb0.dll的装载。
    libusb-sys——USB驱动,生成驱动文件libusb0.sys。大家不要误以为是VC++编译的,其实是makefile项目,WINDDK玩的借腹生子的把戏,借的VS的腹。
    testbulk——libusb-win32的 ”Hello,World!“。
    testlibusb——顾名思义,实现了libusb-win32驱动的设备的遍历并打印一部分设备描述信息。
    testlibusb-win——WINFORM版的testlibusb。
编译
    既然工程都建好了,先编译再说,报错了再查错找错。按 F7 编译怎个解决方案。
    没有报错,但libusb-sys生成目录下也没有libusb0.sys文件。答案在这里,libusb-sys是靠WINDDK来编译链接的。这有点像我用VS2005的IDE配合WINAVR来开发AVR单片机一样的了。
    查看libusb-sys的项目属性页,在[配置属性]的[NMAKE]栏里,查看“生成命令行”。

CD "$(ProjectDir)..\ddk_make"
CMD /C make.cmd "arch=x86" "app=driver" "noclean=true" "outdir=$(OutDir)" "DIR_INTERMEDIATE=$(IntDir)" "debugmode=true"

    看来编译脚本是这个ddk_make文件夹下的make.cmd了。
    在这里
    SET MAKE_CFG=!DIR_LIBUSB_DDK!make.cfg
    查看这个make.cfg文件。
    打包的那些我就不说了,我们看看关键的两个东西。
    
    ; Default WinDDK directory(s) Adjust these values to match your environment
    ; (REQUIRED)
    WINDDK_BASE=Z:\WinDDK
    WINDDK_DIR=!WINDDK_BASE!\7600.16385.0\
    ;
    ; (optional)
    WINDDK_W2K_DIR=!WINDDK_BASE!\6001.18002\

    呵呵,WINDDK放在这。在这里我想八卦一下。看他们把WINDDK放在Z盘,我猜他们是不也是用虚拟机大法无限制的使用90天试用版的呢?呵呵,纯属猜测,如有雷同,实属巧合。

   把这两项改成你的WINDDK安装路径即可。比如我的是
   ; Default WinDDK directory(s) Adjust these values to match your environment
    ; (REQUIRED)
    WINDDK_BASE=E:\WinDDK
    WINDDK_DIR=!WINDDK_BASE!\7600.16385.1\
    ;
    ;没找到WINDDK6,也暂时不打算编译WINDOWS2000及以下版本的驱动,所以就注释掉了
    ; (optional)
    ;WINDDK_W2K_DIR=!WINDDK_BASE!\6001.18002\

    编译一下libusb-sys。error.h 和error.c 会报 warning C4819,有个时候,编译器会把这个warning当作error,使得不能成功编译,按编译器提示的方法,用VS2008重新保存一下这两个文件即可。OK。。
    
    为Virtual_COM_Port安装我们的这个驱动吧。先用inf-wizard生成inf文件。分别复制libusb0.sys和libusb0.dll至x86文件夹下。
    
   

LibUSB-Win32程序介绍
 (原文件名:driverfile.jpg) 
引用图片



 手动安装此驱动,这个就不用我多说了吧,大家都会。

 

LibUSB-Win32程序介绍
 (原文件名:device.jpg) 
引用图片



运行testlibusb-win测试下设备。报错!

LibUSB-Win32程序介绍
 (原文件名:error.jpg) 
引用图片



R6034错误,这个错误是因为没有将资源清单嵌入到libusb0.dll中。我们可以使用mt工具将资源清单嵌入到exe或dll中。因为libusb-win32提供的工程文件默认配置是没有生成清单文件的,所以我们还要设置一下。
libusb-dll项目属性页->链接器->清单文件;把 [生成清单] 设为 “是”,重新生成libusb-dll

开始->Microsoft Visual Studio 2008->Visual Studio Tools->Visual Studio 2008 兼容工具命令提示;

cd 入libusb-dll的生成目录

mt.exe –manifest libusb0.dll.manifest -outputresource:libusb0.dll;2

 

http://blog.sina.com.cn/s/blog_63447c1f01012rwb.html


 

 

 

LibUSB-Win32 在Windows7上使用vs2010编译过程

LibUSB-Win32是一个用于Windows操作系统(Win98SE、WinME、Win2k和WinXP、Vista、Win7等)上的通用USB设备驱动程序,该驱动程序允许使用者在不写任何一行核心...
  • buaalei
  • buaalei
  • 2015年05月14日 16:44
  • 6455

libusb-win32-src-1.2.6.0源码编译成功。内附详细配置

作者: 转自:
  • whw8007
  • whw8007
  • 2014年08月28日 11:04
  • 2029

libusb-win32介绍

1.介绍 这篇文档主要介绍libusb API工作的大致概况。适用于对usb2.0协议有一定了解的读者。如果对usb2.0不理解,可以从http://www.usb.org网站上下载usb2.0...
  • nolatin
  • nolatin
  • 2014年05月26日 16:58
  • 20352

libusb-win32编译环境,及快速调试方法

转自:安祺智能技术(anchey.com)   今天在虚拟机上测试设备时,发现了VS2008编译的libusb0.dll对VC++ 9 的 Runtime 库有依赖性。使用/MT选项编译的话,这...
  • kaizi318
  • kaizi318
  • 2012年09月07日 16:21
  • 11050

libusb-win32学习笔记(二)

libusb-win32学习笔记(二) http://www.cnblogs.com/alants/p/4454411.html        当完成配置工作后,就可以进行代码的编写(需要...

HID从设备连接电脑获取描述符分析

Bus Hound 6.01 capture on Windows Vista (x64). Complements of www.perisoft.net   Device - Devic...

用DriverStudio开发USB驱动程序

很多写Windows Device Driver的开发人员基本上都是使用Windows DDK进行开发的。但是,现在也有不少人都开始借助一些辅助工具。笔者去年开始接触到DriverStudio,发现它...
  • mao0514
  • mao0514
  • 2015年06月12日 10:34
  • 2584

基于cepark usb开发板 VS2010使用libusb-win32开发应用程序

软件使用环境: MFC程序开发: VS2010 操作系统:WIN7 开发板:cepark usb   1.    编写好下位机程序,这里直接使用圈圈的MyUsbHid,将USB设备连接到电脑; 2. ...
  • sagetom
  • sagetom
  • 2015年07月30日 09:29
  • 1294

使用libusb-win32库, 批量(bulk)传输方式, 编写上位机软件

关键词: libusb, bulk批量传输, 上位机软件. 本人一初来乍到的大四实习生,公司最近研发一个新产品,安排一个任务给我, 负责USB驱动SDK设计, 做一个USB上位机软件, 要求使用的传输...

创建libusb-win32编译环境,及快速调试方法

作者:ancheel 转自:http://www.amobbs.com/thread-4096300-1-1.html
  • whw8007
  • whw8007
  • 2014年08月28日 09:42
  • 2012
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LibUSB-Win32程序介绍
举报原因:
原因补充:

(最多只允许输入30个字)