关于libusb、libusbx、libusbK、libusb-win32的关系
做完cypress的cy7c68013a,总结一下usb的驱动问题。之前因为没有找到合适的windows驱动,所以直接选了libusb-win32来弄,虽然有些问题,但开发比较简单。目前发现另外的一个好处就是跨平台,代码基本不用改就能在linux下用:)
先说WinUSB,WinUSB.sys是windows自带的USB驱动框架,在Win8后集成到内核里了
== libusb ==
说明:libusb是一个跨平台的usb驱动框架。libusb原始项目在2010年后基本没有更新,曾有libusbx项目2012年从libusb分出来,2014年1月26日又合并回libusb了。当时的libusbx-1.0.18和libusb-1.0.18其实完全一样,相当于libusbx替换了libusb的代码!后续的版本其实都是基于libusbx的代码了!
包含两个主要分支1.x和0.1.x。
1.x和0.1.x并不兼容,可以同时存在,如果要在1.x基础上兼容0.1.x需要libusb-compat转换层。所以0.1.x和libusb-compat不能同时装上!
内核:目前1.x分支的驱动只有用户态,linux下支持usbfs,windows下支持WinUSB.sys。
也可以支持libusbK和libusb-win32(通过libusbK支持)。
工具:通过Zadig支持生成基于libusb0、libusbK、WinUSB的inf文件。
https://github.com/pbatard/libwdi/wiki/Zadig
== libusb-win32 ==
说明:libusb-win32是从libusb-0.1.x分支衍生的,
主要是针对Windows做优化,所以接口风格和libusb-0.1.x一致。
内核:WDM框架的libusb0.sys驱动。
工具:自带inf-wizard.exe生成基于libusb0.sys的inf文件。
注意:目前建议是新的项目尽可能使用libusb,而不是这个libusb-win32了。
== libusbK ==
说明:libusbK主要是想做一个WinUSB接口风格的开源usb库,
支持基于KMDF的libusbK.sys和系统自带的WinUSB.sys。参考libusb-win32做的开发,部分工具是从libusb-win32整合而来的。因为源代码里也包含了libusb0.dll的加载功能和转换层,所以也可以支持WDM框架的libusb0.sys(libusb-win32)。
内核:基于KMDF框架的libusbK.sys、WDM的libusb0.sys、系统的WinUSB.sys
工具:自带libusbK-inf-wizard.exe(基于libusb-win32的工具改的)
生成基于libusb0、libusbK、WinUSB的inf文件。