我有一個kext,需要知道它正在運行的OS X的版本。 CocoaDev has an article其中介紹瞭如何使用Gestalt()獲取OS X版本信息,但代碼需要Cocoa。如何獲取kext中的OS X版本號?
我可以從kext調用Gestalt()嗎?
如果是這樣,我用什麼#include來定義它?
如果不是,還有其他解決方案嗎?
背景:
我想通過10.7使用相同的kext在從10.4 OS X的所有版本。
但是:kexts call cdevsw_add
,它在獅子以非向後兼容的方式進行了更改。除了(顯然)對某些調用它的內核程序的更改外,這些更改意味着 - 根據例程之前的註釋 - cdevsw_add
應該在10.7上使用不同的第一個參數調用,而不是在OS X 10.0至10.6上調用。 (在Lion上是-12,在早期版本上是-1)
如果kexts可以確定它們在哪個版本的OS X上運行,那很容易。 (如果沒有,這將是一個痛苦 - 可能是一個可怕的kludge,如構建兩個不同版本的kexts並使kext加載代碼選擇加載哪一個代碼)。
出於好奇,你在看什麼驅動?我只問,因爲我正在修復OSS tuntaposx驅動程序系統中的Lion bug - 這就是爲什麼我來到這個問題!謝謝... –
PPS:我在'bsd_stubs.c'中看到關於很久以前發送'-1'到'cdevsw_add(...)'的註釋。它實際上已經在XNU的資源中很長一段時間了 - 例如,這裏是在[10.6.0源代碼](http://www.opensource.apple.com/source/xnu/xnu-1456.1.26 /bsd/kern/bsd_stubs.c)。並且看代碼,我認爲-1應該繼續在Lion中正常工作,即使它不是一個理想的值... –
那些版本範圍看起來不對。也許你對'bdev' /'cdev'或'isfree' /'add'感到困惑?這裏是我得到的,可以檢查:** [10.0.0](http://opensource.apple.com/source/xnu/xnu-123.5/bsd/kern/bsd_stubs.c) - [10.4.11] (http://opensource.apple.com/source/xnu/xnu-792.25.20/bsd/kern/bsd_stubs.c)**:必須嚴格通過'-1'來自動插入;任何事情都不會中止。 ** [10.5.0](http://opensource.apple.com/source/xnu/xnu-1228/bsd/kern/bsd_stubs.c) - [10.7.5](http://opensource.apple.com /source/xnu/xnu-1699.32.7/bsd/kern/bsd_stubs.c)**:傳遞'-1'開始搜索'0',推薦使用'-12'。 (...) – jrodatus