
来自: Anchey Intelligent Technology(anchey.com)
今天在虚拟机上测试设备时,我发现VS2008编译的libusb0.dll与VC ++ 9 Runtime库具有依赖关系. 使用/ MT选项编译时,此dll的大小超过100K. 显然不是. 最后了解为什么libusb-win32使用gcc编译此dll.
花了4个小时才了解很少信息的官方推荐的MinGW / Msys编译方法. 我在这里鄙视libusb-win32项目团队,编译方法几行就完成了,很简单,结果还没有使用.
因此,以下VS2008编译方法仅供您参考. 对于高手来说没有必要,如果您是新手,也可以加深对编译的理解.
libusb-win32项目团队提供的编译方法说明
此文件夹包含用于使用Microsoft的DDK编译libusb-win32的批处理文件.
要求:
1)将WinDDK6001.18002用于Windows2000与Windows7兼容.
(注意: WinDDK6001.18002isthatlasttosupportWindows2000)
如何编译:
1)安装DDK
2)openaDDKbuild环境,“检查”或“免费”一个
3)启动以下批处理文件以编译源:
make_driver.bat: 构建驱动程序
make_dll.bat: 构建DLL
make_install_filter.bat: buildsinstall-filter.exe实用程序
make_test.bat: 构建测试工具的命令行版本
make_test_win.bat: 构建Windows版本的测试工具
make_all.bat: 构建一切,驱动程序,DLL和测试工具
--------------------------------------------------- -------------------------------------------------- --------------
MinGW / Msys编译方法
类似地,这也需要WINDDK. MinGW仅完成VS2008的功能. 开发包中已存在编译的脚本libusb-win32. 我们只需要稍微修改一下make.cfg文件. 对于make.cfg中的WINDDK路径的修改mac装虚拟机跑vs2008,请参考以下方法.
MinGW是一个非常开放的WINDOWS编译器. 您可以安全地在商业上使用它,这也是免费的. 有关详细信息,请参阅MinGW许可证. MinGW的安装方式与cygwin相同,只有下载管理器可以下载和管理MinGW软件包.
只需选择最小安装. 为了将来使用,您还可以选择安装g ++和gmake. 这些仅占用一百多兆字节的空间.

然后,在make.cfg中修改DLLTOOL的路径. 我将其安装在E盘上. 这是我的make.cfg的相关内容.
; Pathtogccdlltooltool()
; (可选)
DLLTOOL = E: \ MinGW \ bin \ dlltool.exe
编译方法.
使用命令提示符,转到ddk_make文件夹并输入make.cmd. 此时,帮助文件会自动打印出来(可恶的libusb-win32项目团队已将帮助文件隐藏在这里!)

(原始文件名: ddkmake.jpg)
输入make.cmd“ arch = x86”进行编译. 好.
// ============================================== ==== ====================================
最近,STM32 USB应用程序似乎非常流行. 我碰巧有一个涉及USB驱动程序的项目. 因为我一直使用USBASP下载用于AVR微控制器的程序,所以我有USBASP使用的USB通信库libusb-win32的名称和来源. 终于,在5天前,她开始了解自己的第一步. 我也是USB的新手. 我刚刚联系了几天,但是在使用自己的编译驱动程序与STM32通信两天之后,我仍然感到有些满足. 拉别人的手并获得收益,我自然必须传播她的宣传. 秉承开放源代码共享的精神,Piban露了脸. 当然,同样,不要看广告,看效果. 是否有效,由军官决定.
我还推荐了一个用于调试libusb-win32的良好例程,它是STM32 Virtual_COM_Port例程. 这样,您可以快速开始使用libusb-win32库. 减少八卦,让我们开始讨论.
国际惯例,让我首先介绍libusb-win32. 以下内容已被其他人复制(更正,现在libusb-win32也支持WINDOWSVISTA / WINDOWS7). .
// --------------------------------------------- -------------
LibUSB-Win32是用于Windows操作系统(Win98SE,WinME,Win2k和WinXP)的通用USB设备驱动程序. 该驱动程序允许用户访问Windows系统上的任何USB设备,而无需编写任何行的核心驱动程序代码. 该驱动程序具有以下特征:
l可以与任何已安装的USB设备通信
l可用作您自己的USB设备的驱动程序
l支持批量和中断传输
l支持USB规范中定义的所有标准设备请求
l支持USB设备制造商的自定义请求
LibUsb-Win32由GNULesserGeneralPublicLicense(LGPL)和GNUGeneralPublicLicense(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设备(此处假设总线上没有USB设备具有相同的VID和PID. 如果总线上存在具有相同VID和PID的设备,则必须确定其他条件,例如设备名称,以确保“ Yes open”是所需的USB设备.

3)与USB设备通信. 使用usb_control_msg函数从USB设备读取数据或向USB设备写入数据.
4)关闭USB设备. 完成所有操作后,调用usb_close函数以关闭打开的USB设备.
// --------------------------------------------- -------------
让我们再次介绍编译工具.
MSVC(KIT中的项目文件是VS2008. 如果使用VS2005或VC6,则必须构建自己的项目. libusb-win32的项目较为复杂,不建议使用. 我使用Visualstudio2008RTM 90天试用版)
BCC(如果您已安装BorlandC ++ Builder,只需修改make.cfg,然后在ddk_make文件夹中运行相应的批处理文件,在此就不再介绍了)
以上两个用于编译libusb-win32动态链接库,相关工具和DEMO程序. 我们还需要WINDDK来编译驱动程序,即生成libusb0.sys文件. 从官方make.cfg文件中,使用WINDDK7600.16385.0(WINDOWXP及更高版本)WINDDK6001.18002(WINDOWS2000及更低版本). 我只在MICROSOFT的官方网站上找到了最新的WINDDK7600.16385.1mac装虚拟机跑vs2008,所以我用了它.
使用VS2008和WINDDK,我们可以开始以下工作.
下载源代码
您可以直接从官方网站下载源代码,地址为/ files /
您还可以通过SVN工具从/ libusb-win32libusb-win32中检出最新的源代码. 我将TortoiseSVN用作SVN工具.
vs2008的项目文件位于projects文件夹中. 让我们看看

(原始文件名: libusb0.jpg)
共有7个项目.
inf-wizard-设备驱动程序安装信息文件生成向导. 该向导可以扫描计算机上的USB设备,并获取您选择的设备的VID和PID来生成inf文件.

(原始文件名: inf1.jpg)

(原始文件名: inf2.jpg)
install-filter-filter驱动程序安装. Filterdriver是驱动程序的高级领域. 将使用防病毒软件,防火墙,笔记本电脑的按钮等.
libusb-dll——动态链接库,生成libusb0.dll. 上面提到的“ 7个功能”被封装在其中. 同时,将生成libusb0.lib文件供您的程序链接. 该文件实现了libusb0.dll的加载.
libusb-sys——USB驱动程序,生成驱动程序文件libusb0.sys. 不要以为它是由VC ++编译的. 实际上,这是一个makefile项目. WINDDK借给孩子的游戏,借给VS的肚子.
testbulk-“世界,您好!”通过libusb-win32.

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 / Cmake.cmd“ arch = x86”“ app = driver”“ noclean = true”“ outdir = $(OutDir)”“ DIR_INTERMEDIATE = $(IntDir)”“ debugmode = true”
似乎该ddk_make文件夹中的编译脚本为make.cmd.
这里
SETMAKE_CFG =! DIR_LIBUSB_DDK! make.cfg
查看此make.cfg文件.
我不会谈论打包的内容. 让我们看两个关键的事情.
;默认WinDDK目录调整这些值以匹配您的环境
; (必需)
WINDDK_BASE = Z: \ WinDDK
WINDDK_DIR =! WINDDK_BASE! \ 7600.16385.0 \
;
; (可选)
WINDDK_W2K_DIR =! WINDDK_BASE! \ 6001.18002 \
呵呵,WINDDK在这里. 我想在这里八卦. 看到他们将WINDDK放在Z驱动器上,我想他们还使用虚拟机无限期地使用90天试用版吗?哦,纯粹是猜测. 如果有相似之处,那就是巧合.
将这两个更改为您的WINDDK安装路径. 例如我的是
;默认WinDDK目录调整这些值以匹配您的环境
; (必需)

WINDDK_BASE = E: \ WinDDK
WINDDK_DIR =! WINDDK_BASE! \ 7600.16385.1 \
;
;找不到WINDDK6,并且我不打算编译Windows 2000及更低版本的驱动程序,因此我将其注释掉.
; (可选)
; WINDDK_W2K_DIR =! WINDDK_BASE! \ 6001.18002 \
编译libusb-sys. error.h和error.c将报告警告819. 在某个时候,编译器会将此警告视为错误,因此无法成功编译. 根据编译器提示的方法,使用VS2008重新保存这两个文件. 好.
为Virtual_COM_Port安装我们的驱动程序. 首先使用inf-wizard生成一个inf文件. 将libusb0.sys和libusb0.dll分别复制到x86文件夹中.

(原始文件名: driverfile.jpg)
手动安装此驱动程序,每个人我都不需要赘述.

(原始文件名: device.jpg)
运行testlibusb-win来测试设备. 错误!

(原始文件名: error.jpg)
R6034错误,此错误是因为资源列表未嵌入libusb0.dll中. 我们可以使用mt工具将资源列表嵌入到exe或dll中. 因为libusb-win32提供的项目文件的默认配置不会生成清单文件,所以我们需要对其进行设置.
libusb-dll项目属性页->链接器->清单文件;将[generate manifest]设置为“ yes”,重新生成libusb-dll
开始-> MicrosoftVisualStudio2008-> VisualStudioTools-> VisualStudio2008x64兼容工具命令提示符;
cd进入libusb-dll的生成目录
mt.exe--manifestlibusb0.dll.manifest-outputresource: libusb0.dll; 2

(原始文件名: cmd.jpg)
[本文为Anchey.com原创]
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-151648-1.html
我宁可去买秋林的格瓦斯喝也不会买这种东西
那么