Como forçar o carregamento de um kext do Mac OS X antes do login?

6

Eu tenho um kext que gostaria de ser carregado no momento da inicialização. Ele não precisa ser carregado particularmente no início do processo, mas eu gostaria que fosse carregado antes que um usuário efetue login.

O kext em questão é o InsomniaT e, ao contrário de um driver de dispositivo, não há nada que exija automaticamente que ele seja carregado no kernel; basta colocá-lo em / System / Library / Extensions.

Qual é a melhor forma de fazer isso?

wfaulk
fonte
Por que não adicionar o kextque /Library/Extensions, definir as permissões para 755 e o proprietário / grupo a raiz: roda, e reconstruir o cache de kernel depois de carregá-lo?
Chealion 26/09/09
Meu entendimento é que ele não será realmente carregado a menos que algo solicite. Para que eu possa fazer isso, mas ainda estou conseguindo algo para solicitá-lo.
wfaulk 26/09/09

Respostas:

6

Use um daemon de inicialização para executar / sbin / kextload na inicialização.

Você pode querer algo nesse sentido ... link text

Steve Folly
fonte
seu link não é válido
Usman Nisar
1
Obrigado Mani. Os perigos de postar links, hein ?! A resposta de wfaulk abaixo superuser.com/a/47373 descreve a solução que Vinculados usado para descrever
Steve Folly
13

O link de Steve Folly é preciso, mas para tê-lo aqui:

Crie um arquivo plist (que é apenas um documento XML em texto sem formatação) chamado algo como com.domain.identifier.plist em / Library / LaunchDaemons com conteúdo semelhante a este:

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

(Existe uma página de manual, launchd.plist (5), que especifica a sintaxe dos arquivos plist do LaunchDaemon.)

Eu o converti em um arquivo plist binário apenas para uma verificação trivial da sintaxe:

plutil -convert binary1 com.domain.identifier.plist

Em seguida, ative o LaunchDaemon para executar na inicialização:

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

E verifique se está lá:

launchctl list | grep com.domain.identifier

O LaunchDaemon deve ser executado na inicialização e carregar o kext.

wfaulk
fonte
1
plutiltambém possui uma -lintopção para verificação de sintaxe, que também é a opção padrão para nenhum argumento.
Will Ross