C++ IOKit驱动程序已加载但未启动
我有一个IOKit基本驱动程序,它是非硬件触发的,并且是从IOResources派生的。它还使用C++ IOKit驱动程序已加载但未启动,c++,macos,iokit,kernel-extension,xnu,C++,Macos,Iokit,Kernel Extension,Xnu,我有一个IOKit基本驱动程序,它是非硬件触发的,并且是从IOResources派生的。它还使用IOServiceOpen提供给用户空间客户端类,但我认为这与我的问题无关。。。主驱动程序具有IOKit依赖项,如派生驱动程序Info.plist文件中所述: <key>OSBundleLibraries</key> <dict> ... .. . <key>com.derived.driver</key>
IOServiceOpen
提供给用户空间客户端类,但我认为这与我的问题无关。。。主驱动程序具有IOKit依赖项,如派生驱动程序Info.plist文件中所述:
<key>OSBundleLibraries</key>
<dict>
...
..
.
<key>com.derived.driver</key>
<string>1.0.0</string>
</dict>
编辑:
事实上我做到了,并且成功了(所有实例都已根据ioreg初始化)
+-o com\u派生的驱动程序
+-o com_基本驱动程序
但我真的不知道为什么,任何解释都将不胜感激
谢谢 我只能猜测一下,因为您还没有提供完整的信息——特别是,您还没有提供两位驾驶员的完整IOKit个性词典 请注意,正常情况下,只有一个服务将成功匹配
IOService
以成为其客户机。如果您希望匹配多个不同类型的客户端,则需要通过个性词典中的IOMatchCategory
键定义不同的匹配类别。许多驱动程序需要特别匹配IOResources
,因此。我怀疑这就是你一直错过的
最后,关于默认版本内核的问题,请注意:内核调试工具包(KDK)提供了备用的开发和调试内核,这些内核是使用远没有那么激进的优化设置编译的。您可能会发现它们很有用-查看KDK的自述文档,了解如何启用它们的详细信息。是的,这正是我所需要的,在
IOMatchCategory
上设置不同的值后,对于每个驱动程序,它们都加载了IOResources
提供的相应类。谢谢
<key>IOKitPersonalities</key>
<dict>
<key>myDriver</key>
<dict>
<key>CFBundleIdentifier</key>
<string>com.base.driver</string>
<key>IOClass</key>
<string>com_base_driver</string>
<key>IOProviderClass</key>
<string>com_derived_driver</string>
+-o com_derived_driver <class com_derived_driver, id 0x10000091f, registered, matched, active, busy 0 (804415 ms), retain 6>
+-o com_base_driver <class com_base_mng, id 0x100000920, registered, matched, active, busy 0 (0 ms), retain 9>