我有一个用于连接 USB 单芯片设备 (CSR BC4) 的无代码 kext - 效果很好。如果我将多个设备连接到外部集线器,它仍然可以正常工作。
在我的 info.plist 的 IOKitPersonalities 字典中,对于设备和接口字典,我一直在 IOBluetoothFamily.kext 中的 CSR 驱动程序上匹配一个引用该 CSR kext 和该包中的 IOClass 的 CFBundleIdentifier。
快进到在内部集线器上使用多个 CSR BC7 芯片的新设备。长话短说,我无法让该设备正确匹配设备中的所有芯片。苹果驱动程序通常会抓取两个芯片。如果我插入两个设备,我会从一个设备中获取所有芯片,而从另一个设备中获取任何芯片。几天的挖掘随之而来。我一直在 Apple 列表中看到有关使用“com.apple.kernel.iokit”或“com.apple.kpi.iokit”的 CFBundleIdentifier 和“IOService”的 IOClass 的参考资料
我尝试了 com.apple.kernel.iokit,但我的两个设备都没有运气。由于我在 64 位平台上,我决定尝试 com.apple.kpi.iokit - 宾果游戏!两种设备都像魅力一样工作。
我的问题是我真正匹配的是什么?我可以理解将设备与现有驱动程序匹配,但在这种情况下我匹配的是什么?我无法从 Apple 那里找到任何能真正告诉我我在做什么的确切信息。
任何帮助表示赞赏!
初始人格示例:
MyCsrDevice
CFBundleIdentifier com.apple.driver.CSRUSBBluetoothHCIController
IOClass CSRUSBBluetoothHCIController
IOProviderClass IOUSBDevice
idProduct 32
idVendor vvvv
MyCsrInterface
CFBundleIdentifier com.apple.driver.CSRUSBBluetoothHCIController
IOClass CSRUSBBluetoothHCIController
IOProviderClass IOUSBInterface
idProduct 32
idVendor vvvv
bInterfaceNumber 0
bConfigurationValue 1
当前人格示例:
MyCsrDevice
CFBundleIdentifier com.apple.kpi.iokit
IOClass IOService
IOProviderClass IOUSBDevice
idProduct 32
idVendor vvvv
MyCsrInterface
CFBundleIdentifier com.apple.kpi.iokit
IOClass IOService
IOProviderClass IOUSBInterface
idProduct 32
idVendor vvvv
bInterfaceNumber 0
bConfigurationValue 1