检测OS X内核扩展是否可加载

时间:2015-02-24 20:15:38

标签: macos cocoa kernel-extension

我试图编写一个与自定义USB设备对话的应用程序。我们编写了一个驱动程序(kext),当USB设备连接到计算机时会自动加载该驱动程序。它在安装过程中安装到适当的位置(/ System / Library / Extensions& / Library / Extensions)。

在我的应用程序(.app)中,我需要能够确认此kext已安装并且可以在用户的​​计算机上加载。

我最初的想法是使用"系统"命令并获得" kextstat |的结果grep mykext"。但是,kextstat仅显示已加载的内核扩展。 (可以在用户连接USB设备之前启动应用程序)。

我唯一能想到的是使用" kextfind | grep mykext"但是,为了确定kext是否存在,我不知道它是否可加载。 (即它可能存在,但有人与plist文件混淆,现在签名失败,所以它不会被加载)

知道它是可能的,因为Apple的System Profiler能够列出所有扩展,如果它们已加载,并且它们是可加载的。
System Profiler

1 个答案:

答案 0 :(得分:2)

来自kextutil手册页:

  

kextutil默认打印有关kexts的诊断信息,但某些选项会导致某些测试被跳过。要确保执行所有测试,请使用-print-diagnostics(-t)选项。 -print-diagnostics选项通常在加载失败后使用-no-load(-n)来查明问题。但是,它可以与任何其他选项一起使用。

注意:当使用-no-load(-n)选项时,则不需要sudo(root用户)。