无代码kext加载问题

时间:2011-08-31 21:27:35

标签: macos osx-lion iokit kernel-extension

我创建了一个无代码kext,以便我的一个USB设备不会被AppleUSBUHCI驱动程序绑架。当我插入一个,它应该加载一个不同的驱动程序。它适用于FTDI和CSR设备。

我把我的kext放在一起,而info.plist看起来很像这里的例子:http://www.projectosx.com/forum/index.php?showtopic=798只是有不同的VID / PID。  我用-entZ运行了kextutil,唯一的警告是我的个性有不同的CFBundleId。我按照这里的说明Reading and writing to USB (HID) interrupt endpoints on Mac来加载它。

当我加载kext时,它说它已成功加载,但我无法用kextstat看到它,当我插入我的设备时它仍然被劫持。当我尝试执行kextunload时,它表示没有加载kext。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:4)

从Apple列表中,我了解到无代码的kexts不会出现kextstat,除非它们链接到现有的驱动程序。链接到IOKit包的我的个性只有在加载后才会显示,如果它有存根代码。

对于我的设备,我找到了类似设备的现有驱动程序,并首先为该驱动程序注入个性。当我插入设备时,我能够验证它已加载,我可以打开我的设备。我将该驱动程序恢复到原始状态。然后我创建了一个无代码kext,它具有我注入现有驱动程序的个性。当我插入设备时,该驱动程序被加载,然后我就可以与我的设备通信了。

原始问题的解决方案是我的原始无代码kext和bcdDevice的CFBundleIdentifier。从http://lists.apple.com/archives/usb/2009/Aug/msg00050.html开始,我得到了关于不同类型的无代码kexts的提示,并意识到我需要为现有驱动程序使用CFBundleIdentifier。