从kext读取plist

时间:2012-11-03 02:17:28

标签: macos kernel-extension

我想在操作系统重启之间保存一个kext设置。由于我需要立即加载kext后的设置,我不能等待管理守护进程启动。这是从kext读取/写入kext plist文件的方法还是其他一些方法来做到这一点?

1 个答案:

答案 0 :(得分:1)

基本上,不 - 你应该在用户空间中存储设置,并使用launchd服务在kext中设置它们。在你的kext收到设置之前,它应该只使用一些合理的默认值。

在kext启动时真正包含设置的一种方法是在kext的info.plist中为IOKitPersonality添加自定义属性。显然,这意味着更改设置需要更改kext本身,但我听说有人在Apple的公共darwin邮件列表中实际执行此操作(尽管Apple员工投入批评它)。请注意,kext缓存不会这样:如果您的用户空间程序更改了info.plist中的设置,则可能需要增加软件包版本号,以便kext缓存获取更改,否则缓存/预链接的kext不会看到变化。您需要在rules for kext bundle versions的约束内执行此操作,否则它将不会被检测为版本增加,或者更糟糕的是,kext缓存将完全拒绝kext。此外,请不要忘记在更新kexts后触摸/ System / Library / Extensions /。

更新:由于kext签名要求,修改kext的info.plist将不再适用于10.9和10.10。

在kext是存储过滤器方案的特定情况下,您可以将设置存储在提供程序分区的特殊“超级块”中。例如,AppleRAID(开源)就是这样做的。但这对任何其他类型的kext都不实用。