我发现了一个我认为可行的解决方案(需要在 Windows 上进行进一步测试):
让设备以适用于 Mac 的方式进行枚举:
- 将其设为“通信”类(class=2、sub-class=0、protocol=0),而不是复合设备。
- 移除 IAD。
在这种配置下,该设备应该在 Mac 和最新的 Linux 上“正常工作”。 (对于 Linux,使用 Ubuntu 进行测试,我发现这适用于 Ubuntu Linux 内核 2.6.35-28 或更高版本。对于早期的内核,只有第一个串行端口有效。)
然后,对于 Windows,修改设备的 INF 文件,以显式加载复合设备驱动程序usbccgp.sys。我是 Windows INF 文件的新手,但以下是我目前所能了解的相关 sn-ps:
[CCGPDriverInstall.NT]
Include=usb.inf
Needs=Composite.Dev.NT
AddReg=CCGPDriverInstall.AddReg
[CCGPDriverInstall.NT.Services]
Include=usb.inf
Needs=Composite.Dev.NT.Services
[CCGPDriverInstall.AddReg]
HKR,,EnumeratorClass, 0x00000001,02,00,00
...
[DeviceList]
%DESCRIPTION_DEVICE%=CCGPDriverInstall, USB\VID_FFFF&PID_0001
%DESCRIPTION_AT%=DriverInstall, USB\VID_FFFF&PID_0001&MI_00
%DESCRIPTION_MENU%=DriverInstall, USB\VID_FFFF&PID_0001&MI_02
[DeviceList.NTamd64]
%DESCRIPTION_DEVICE%=CCGPDriverInstall, USB\VID_FFFF&PID_0001
%DESCRIPTION_AT%=DriverInstall, USB\VID_FFFF&PID_0001&MI_00
%DESCRIPTION_MENU%=DriverInstall, USB\VID_FFFF&PID_0001&MI_02
[DeviceList.NTx86...1]
%DESCRIPTION_DEVICE%=CCGPDriverInstall, USB\VID_FFFF&PID_0001
%DESCRIPTION_AT%=DriverInstall, USB\VID_FFFF&PID_0001&MI_00
%DESCRIPTION_MENU%=DriverInstall, USB\VID_FFFF&PID_0001&MI_02
通过 INF 文件显式加载 usbccgp.sys 驱动程序,两个 USB 串行端口都适用于 Windows XP SP3 32 位。
到目前为止,我只进行了有限的测试,所以我很想知道这对其他人是否有效。