1

kextlibs反对我的 kext,它告诉我使用:

com.apple.kpi.bsd = 12.2
com.apple.kpi.libkern = 12.2

这在我的开发机器(10.8)上运行良好。但是当我在另一台机器(运行 10.7)上运行它时,它不会加载,说:

Dependency Resolution Failures: 
Only incompatible kexts found for these libraries: 
    com.apple.kpi.bsd
    com.apple.kpi.libkern

如果我想针对一系列 Mac OS 版本(10.6 到 10.8),如何确定要链接的版本?

4

1 回答 1

4

KPI“捆绑包”(com.apple.kpi.*)由内核的 D​​arwin 版本号进行版本控制。

  • 达尔文主要数字是 OSX 次要数字加 4 - 所以 OSX 10.8 是达尔文 12,10.7 是 11,10.6 是 10,等等(这至少是真的回到 OSX 10.4,我对 10.3 没有任何经验或更老)
  • Darwin 次要编号是 OSX 修订号 - 所以 OSX 10.8.2 是 Darwin 12.2,OSX 10.6.8 是 Darwin 10.8,OSX 10.7 是 Darwin 11.0 等等(OSX/macOS 修订偶尔会增加一个以上的 Darwin 次要版本,例如 macOS 10.14.1Darwin 18.2.0。)

IOKit 系列(例如 IOPCIFamily、IOStorageFamily 等)有自己的版本控制方案。处理这些问题的方法是查看您想要支持的最旧 OSX 版本的相关 kext(IOPCIFamily.kext、IOStorageFamily.kext 等)的 Info.plist 中的捆绑版本 (CFBundleVersion) 属性。或者,在运行该 OS 版本的同时运行 kextlibs - kextlibs 将始终打印正在运行的 OSX 版本的 kext/kpi 版本号。

于 2013-01-18T10:51:28.113 回答