У меня есть kext, что я хотел бы быть загруженным во время запуска. Это не должно быть загружено особенно рано в процессе, но я хотел бы, чтобы это было загружено, прежде чем пользователь войдет в систему.
kext рассматриваемым является InsomniaT, и, в отличие от драйвера устройства, нет ничего, что автоматически собирается запросить, чтобы он быть загруженным в ядро, поэтому просто поместив его в/System/Library/Extensions ничего не делал.
Что лучший способ состоит в том, чтобы сделать это?
Используйте демона запуска для выполнения/sbin/kextload при запуске.
Вы могли бы хотеть что-то вдоль этих строк... текст ссылки
Ссылка Steve Folly точна, но иметь его здесь:
Создайте plist файл (который является просто XML-документом простого текста), назвал что-то как com.domain.identifier.plist в/Library/LaunchDaemons с содержанием подобным этому:
<!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.