macos - 在早期启动过程中加载 OS X kext

标签 macos kernel boot kernel-extension

我有一个有效的 OSX 内核扩展,我希望在启动时尽早自动加载它。 kext 正在使用 KAUTH用于监视特定路径上的访问,因此在我看来,不会有任何东西会要求将其加载到内核中。在这种情况下,将其复制到 /Library/Extensions (至少因为优胜美地这是第三方扩展的推荐路径)不会解决我的问题。

是否有可能通过修改代码或通过一些辅助配置来实现这一点?

我已经阅读了关于使用launchd daemon 来使用kextload 来加载扩展程序的信息,如this question 中所述。 ,但就我而言,我希望它尽早加载。

更新:
我正在使用“通用”内核扩展(链接到 BSD 库),而不是基于 I/O 套件的扩展。
我希望在 launchd 之前加载我的扩展程序已启动。

最佳答案

您没有在问题中明确说明,但我从上下文推断您正在使用“通用”内核扩展(与基于 I/O 套件的扩展相反)?加载这些只是因为另一个 kext 依赖于它们,或者因为它们是通过 kextutil/kextload 或 KextManager API 显式加载的。

将此与 I/O Kit kexts 进行对比,后者在其个性字典之一与 IO 注册表中的注册服务匹配时按需加载。这通常用于驱动特定设备,但各种不依赖硬件的系统服务使用该机制来匹配在早期启动期间出现的“IOResources”小块 (documentation),因此任何将其列为个性提供者的 kexts在启动时加载。

因此,解决方案是修改您的 kext 以提供与 IOResources nub 匹配的 IOService。如果您的用户空间组件已经使用另一个接口(interface)与 kext 通信,则服务本身实际上不需要做任何事情。

如果您不想更改 kext 的代码本身,您可以创建一个虚拟 kext 来执行此操作,但将您的主 kext 声明为依赖项。后一种方法不是特别优雅,但如果由于某种原因无法修改现有的 kext,则应该可以使用。 (尽管您可能需要修改 info.plist)

关于macos - 在早期启动过程中加载 OS X kext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36445097/

相关文章:

ios - 无法更新 XCode : Not enough space

macos - NSImage TIFFRepresentation 未随 ARC 一起发布

c - 如何将键盘输入输入内核?

linux - 如何在 Linux 中处理多个 SIGSEGV 事件?

linux - 糟糕 : kernel access of bad area, 信号:11 - 'swapper' - 终止中断处理程序

c - uefi 规范示例提到了 EfiCoreImageHandle。如何获得?

java - mac 上的 logback 返回问号而不是单词

memory - 0xffff0 和 BIOS

android - 当我尝试在 qemu 上运行 Android 时没有显示消息 :"Guest has not initialized the display (yet)."

python - Mac OS X 查找版本返回两条语句