2012-11-03 94 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