如何在登录前强制加载 Mac OS X kext?

如何在登录前强制加载 Mac OS X kext?

我有一个 kext,希望它在启动时加载。它不需要在进程的早期加载,但我希望它在用户登录之前加载。

有问题的 kext 是 InsomniaT,与设备驱动程序不同,没有任何东西会自动请求将其加载到内核中,因此仅将其放入 /System/Library/Extensions 不会执行任何操作。

做到这一点的最好方法是什么?

答案1

使用启动守护程序在启动时运行 /sbin/kextload。

你可能想要类似这样的东西......链接文本

答案2

Steve Folly 的链接是准确的,但在这里:

在 /Library/LaunchDaemons 中创建一个名为 com.domain.identifier.plist 的 plist 文件(只是一个纯文本 XML 文档),内容类似于以下内容:

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>KeepAlive</key>
        <false/>
        <key>Label</key>
        <string>com.domain.identifier</string>
        <key>ProgramArguments</key>
        <array>
                <string>/sbin/kextload</string>
                <string>/System/Library/Extensions/MyExtension.kext</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
        <key>StandardErrorPath</key>
        <string>/dev/null</string>
        <key>StandardOutPath</key>
        <string>/dev/null</string>
        <key>UserName</key>
        <string>root</string>
</dict>
</plist>

(有一个手册页,launchd.plist(5) 指定了 LaunchDaemon plist 文件的语法。)

然后我将其转换为二进制 plist 文件,仅进行一些简单的语法检查:

plutil -convert binary1 com.domain.identifier.plist

然后激活 LaunchDaemon 在启动时运行:

launchctl load -w /Library/LaunchDaemons/com.domain.identifier.plist

并检查以确保它在那里:

launchctl list | grep com.domain.identifier

LaunchDaemon 应该在启动时运行并加载 kext。

相关内容