Wie erzwinge ich, dass ein Mac OS X-Kext vor dem Anmelden geladen wird?

12168
wfaulk

Ich habe einen Kext, den ich beim Start laden möchte. Es muss nicht besonders früh im Prozess geladen werden, aber ich möchte, dass es geladen wird, bevor sich ein Benutzer anmeldet.

Der fragliche Kext ist InsomniaT. Anders als ein Gerätetreiber gibt es nichts, was automatisch verlangt, dass es in den Kernel geladen wird. Wenn Sie es in / System / Library / Extensions ablegen, wird dies jedoch nichts tun.

Was ist der beste Weg dies zu tun?

6
Warum fügen Sie nicht den `kext` zu` / Library / Extensions` hinzu, setzen Sie die Berechtigungen auf 755 und den Eigentümer / die Gruppe auf root: wheel, und erstellen Sie den Kernel-Cache nach dem Laden neu. Chealion vor 14 Jahren 0
Nach meinem Verständnis wird es nicht wirklich geladen, es sei denn, es wird etwas verlangt. So kann ich das, aber ich habe immer noch etwas zu bekommen, um es anzufordern. wfaulk vor 14 Jahren 0

2 Antworten auf die Frage

13
wfaulk

Steve Follys Link ist korrekt, aber hier zu haben:

Erstellen Sie eine Plist-Datei (die nur aus einem einfachen XML-Dokument besteht) mit dem Namen com.domain.identifier.plist in / Library / LaunchDaemons. Der Inhalt ähnelt dem Folgenden:

<!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> 

(Es gibt eine Manpage, launchd.plist (5), die die Syntax der LaunchDaemon-Plistendateien angibt.)

Ich habe es dann in eine binäre plist-Datei konvertiert, nur um einige triviale Syntaxprüfungen durchzuführen:

plutil -convert binary1 com.domain.identifier.plist 

Aktivieren Sie dann das LaunchDaemon, um es beim Start auszuführen:

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

Und überprüfe, ob es dort drin ist:

launchctl list | grep com.domain.identifier 

Das LaunchDaemon sollte beim Start ausgeführt werden und den Kext laden.

`plutil` hat auch eine '-lint`-Option für die Syntaxprüfung, die auch die Standardoption für keine Argumente ist. Will Ross vor 12 Jahren 1
6
Steve Folly

Verwenden Sie einen Startdämon, um / sbin / kextload beim Start auszuführen.

Vielleicht möchten Sie etwas in dieser Richtung ... Linktext

Ihr Link ist nicht gültig Usman Nisar vor 8 Jahren 0
Vielen Dank Mani. Die Gefahren beim Posten von Links, oder ?! Die Antwort von wfaulk unter http://superuser.com/a/47373 beschreibt die Lösung, für die der Link verwendet wurde Steve Folly vor 8 Jahren 1