【问题标题】:Detect if OS X kernel extension is loadable检测 OS X 内核扩展是否可加载
【发布时间】:2015-04-26 15:28:46
【问题描述】:

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

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

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

我能想到的唯一另一件事是使用“kextfind | grep mykext”来确定 kext 是否存在,但是,我不知道它是否可加载。 (即它可能存在,但是有人弄乱了 plist 文件,现在签名失败了,所以它永远不会被加载)

知道这是可能的,因为 Apple 的 System Profiler 能够列出所有扩展程序,如果它们已加载,以及它们是否可加载。

【问题讨论】:

  • 你试过 kextutil 吗?
  • 我没有查看 kextutil 有两个原因:1)它要求用户将其称为“root”用户(我不想强制应用程序以 root 身份打开) 和 2) 它似乎对加载 kext 很有用...我不想加载 kext,我只想看看它是否在那里...

标签: macos cocoa kernel-extension


【解决方案1】:

来自 kextutil 手册页:

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

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

【讨论】:

    猜你喜欢
    • 2020-03-20
    • 1970-01-01
    • 1970-01-01
    • 2018-11-12
    • 2017-07-19
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 2013-11-01
    相关资源
    最近更新 更多