LibUSB-Win32

LibUSB-Win32程序介绍

  (2012-02-23 21:01:35)
标签: 

杂谈

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

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

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

                支持批量和中断传输

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

                支持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文件夹中。我们来看一下

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


        总共有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

LibUSB-Win32程序介绍
  (原文件名:cmd.jpg) 
引用图片
关于libusb-win32开发的经验(2012-11-10 11:37:50)转载▼标签: win32rs232驱动usblibusbit 分类: 外围器件接口 作为设备开发者, 一般需要让设备与上位机PC通讯, 我们往往考虑采用以下几种接口: rs232, USB, ethernet. 现在在PC机上已经很难见到rs232的接口, 而ethernet也需要做特殊的配置, USB大多成为我们的首选. 对于数据偏少的应用, 我们可以利用USB虚拟串口的方式来完成这样的任务, 虚拟串口的驱动和实例, 对于下位机来说也非常常见. 有个问题: 很多应用无法用虚拟串口的方式来得到满足, 只能按照USB的方式来解决问题. 这个时候, 我们只好针对USB进行编程. 对于复杂的驱动编程, 大多数程序员往往望而却步. 不过总有其他简单的方法解决问题. 这里, 我们介绍一个USB通讯库: libusb. 介绍 libusb是一个针对usb通讯的库. 使用它, 你不需要知道操作系统的细节, 你只需要对USB有足够的了解即可. 它也不需要你写驱动, 所有的工作都可以在用户态完成. 使用方法很简单, 这里有一个示例: http://sourceforge.net/apps/trac/libusb-win32/wiki/libusbwin32_documentation#IV.Examples , 是不是很简单? 原理 libusb自己带有一个内核驱动, 名字叫libusb0.sys, 放在WINDOWSSYSTEM32DRIVERS里面. 用户程序调用libusb0.dll, dll会把任务交由驱动来完成. 这样保证用户态就能够完成USB通讯的作业. 具体做了什么, 可以通过下载项目的源文件来了解, 等我有时间的时候再看看吧. 安装方法 libusb现在有好几个版本. 主页面在这里: http://www.libusb.org/ 因为我们一般是进行工程应用, 选择相对稳定的版本: libusb-0.1. 平台在windows下的话, 我们采用libusb-win32: http://www.libusb.org/wiki/libusb-win32 linux下一般已经添加到源里面去了, 查找libusb即可. windows下安装方法: http://www.libusb.org/wiki/libusb-win32#Installation 里面有2种安装方式, Filter Driver Installation 和 Device Driver Installation, 前面一个可以说是开发环境, 后面可以说是发布驱动本身. 我们因为是做系统, 选择前面一个方式, 省得麻烦. 使用 这里有比较详细的文档: http://sourceforge.net/apps/trac/libusb-win32/wiki/libusbwin32_documentation libusb-win32的下载地址http://sourceforge.net/apps/trac/libusb-win32/wiki 开发者论坛地址:http://libusb.6.n5.nabble.com/ libusb-1.0 API Reference:http://libusb.sourceforge.net/api-1.0/ 开发过程中有超时问题的原因:http://sourceforge.net/apps/trac/libusb-win32/wiki/libusbwin32_documentation
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值