在kext的OSBundleLibraries中链接哪个版本的库?

时间:2013-01-17 14:40:53

标签: macos kernel-extension

我针对我的kext运行kextlibs,它告诉我使用:

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),我如何计算要链接的版本?

1 个答案:

答案 0 :(得分:3)

KPI“bundles”(com.apple.kpi。*)由内核的Darwin版本号版本化。

  • 达尔文主要编号是OSX次要编号加4 - 所以OSX 10.8是Darwin 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。 1 是Darwin 18. 2 .0。)

IOKit系列(例如IOPCIFamily,IOStorageFamily等)有自己的版本控制方案。处理这些的方法是查看相关kext(IOPCIFamily.kext,IOStorageFamily.kext等)中Info.plist中的bundle版本(CFBundleVersion)属性,以获取您要支持的最旧的OSX版本。或者,只需在运行该操作系统版本时运行kextlibs - kextlibs将始终打印正在运行的OSX版本的kext / kpi版本号。