我想在操作系统重新启动之间保存一个 kext 设置。由于我需要立即加载 kext 后的设置,因此我迫不及待地等待管理守护程序启动。它是从 kext 读取/写入 kext plist 文件的方法还是其他一些方法?
1 回答
基本上,不-您应该将设置存储在用户空间中并使用启动服务将它们设置在 kext 中。在您的 kext 收到设置之前,它应该只使用一些合理的默认值。
在 kext 启动时真正包含设置的一种方法是将自定义属性添加到 kext 的 info.plist 中的 IOKitPersonality。显然,这意味着更改设置需要更改 kext 本身,但我听说有人在 Apple 的公共 darwin 邮件列表中实际这样做(尽管 Apple 员工批评它)。请注意,kext 缓存不会像这样:如果您的用户空间程序更改 info.plist 中的设置,它可能需要增加捆绑版本号才能使 kext 缓存接收更改,否则缓存/预链接的 kext不会看到变化。您需要在kext 捆绑版本规则的约束范围内执行此操作或者它不会被检测为版本增加,或者更糟糕的是,kext 缓存将彻底拒绝 kext。另外,不要忘记在更新 kexts 后触摸 /System/Library/Extensions/。
更新:由于 kext 签名要求,修改 kext 的 info.plist 将不再适用于 10.9 和 10.10。
在您的 kext 是存储过滤器方案的特定情况下,您可以将设置存储在提供程序分区的特殊“超级块”中。例如,AppleRAID(它是开源的)就是这样做的。不过,这对于任何其他类型的 kext 都不实用。