2012-11-03 59 views
1

我希望在OS重新启动之间保存kext设置。由于我需要在kext被立即加载后的设置,我不能等待管理守护进程启动。这是一种从kext或其他方式来读/写kext plist文件的方法吗?从kext读取plist

回答

1

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

在kext启动中真正包含设置的一种方法是将自定义属性添加到kext的info.plist中的IOKitPersonality。显然,这意味着改变设置需要改变kext本身,但是我听说有人在苹果的公共达尔文邮件列表中实际上做了这些事情的报道(尽管苹果员工对此进行了批评)。请注意,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都是不实用的。

+0

嗨,我正在处理相同的情况,我不明白如何使用'launchd'在kext中设置修改后的plist。也许你可以详细说明这一点?谢谢 – Zohar81

+0

@ Zohar81有很多方法可以做到这一点,但例如,如果您的驱动程序是基于IOKit的,则可以创建一个与您的驱动程序的“IOService”类相匹配的守护进程。当守护进程启动时,通过设置属性或打开用户客户端连接到驱动程序的服务。然后,配置。 – pmdj

+0

我实际上在IOKit基础驱动器上工作,并进行匹配和连接部分,但我正在寻找一种通用方法来设置我的驱动程序属性(假设配置长度和类型可能会有所不同)。也许你可以涉及我发布的一个附加问题(https://stackoverflow.com/questions/47160052/passing-cfdictionary-via-iokit-command) – Zohar81