我在IOService的子类Mac OS X上有一个基于IOKit的内核扩展。加载此服务后,我需要从中发布其他特定的运行时信息,并且需要从用户空间访问它而无需发出特定的IOUserClient请求。有问题的信息基本上是字段\值对,并且其格式在KEXT和用户空间包装库之间共享。当服务处于活动状态时,其内容将随着时间的流逝而发生变化。

在Linux上,我会使用/ proc文件系统中的文件来完成此操作。您可以在OS X上建议类似的策略吗?也许与IORegistry相关的东西?

谢谢。

最佳答案

好吧,事实证明这很容易。
您的IOKit服务(实质上)是从IOService类继承的,而IOService类又是从IORegistryEntry继承的,IORegistryEntry表示您的服务在IORegistry中的条目的实例,并提供了一组setProperty \ getProperty方法来添加,更改,删除IORegistry中您自己的字段服务条目。

内存数据库中的IORegistry当然可以从用户空间以编程方式访问,您可以在其中搜索服务条目并读取其发布的信息。

10-04 12:38