【发布时间】: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