2014-10-31 12 views
9

Ho avuto un codice che firma su kext in Yosemite. Ma kextload è fallito.
Era codice di versione2. codesign --verify è vero.
Ma kextload non è riuscito. Perché non caricare in Yosemite?codificato kext Ma perché non caricare in Yosemite (10.10)

Ecco il mio registro.

Ho controllato con codesign -dvvv ./myKext.kext E va tutto bene.

codesign -dvvv ./myKext.kext restituito seguente:

Executable=/Path/to/myKext 
Identifier=com.myKext.kext.Firewall 
Format=bundle with Mach-O thin (x86_64) 
CodeDirectory v=20100 size=317 flags=0x0(none) hashes=9+3 location=embedded 
Hash type=sha1 size=20 
CDHash=d0ff68bd8b49c650f45349c2d1570d45a8c1f148 
Signature size=8544 
Authority=Developer ID Application: My Kext Co., Ltd. (R2PBZJ465V) 
Authority=Developer ID Certification Authority 
Authority=Apple Root CA 
Timestamp=2014. 10. 31. 오전 11:09:35 
Info.plist entries=18 
TeamIdentifier=not set 
Sealed Resources version=2 rules=12 files=1 
Internal requirements count=1 size=188 

Essa mostra che la versione 2.
Ma sudo kextload ./myKext.kext sta tornando i seguenti:

/Path/to/myKext.kext failed to load - (libkern/kext) not loadable (reason unspecified); check the system/kernel logs for errors or try kextutil(8).

cat /var/log/system.log rendimenti:

com.apple.kextd[19]: ERROR: invalid signature for com.myKext.kext.Firewall, will not load

sudo kextutil -l ./myKext.kext restituisce:

Diagnostics for ./myKext.kext: 
Code Signing Failure: code signature is invalid 
ERROR: invalid signature for com.myKext.kext.Firewall, will not load 

Perché sono firma non valida ?!
Ho firmato con il codice di versione 2 in Yosemite.
Cosa ho fatto di sbagliato segno? Qualcuno mi insegni per favore.

+0

Sto solo supponendo, ma Apple non ha bisogno di essere coinvolto nella firma del codice per renderlo valido? – trojanfoe

+0

Hai richiesto ad Apple che il tuo ID DeveloperID abbia aggiunto l'attributo kext codesign? – TheDarkKnight

+0

Sembra lo stesso problema di questo: http://stackoverflow.com/questions/26283158/codesigning-kext-with-kext-enabled-certificate-fails-during-kextload-code-sign – pmdj

risposta

8

Ho avuto lo stesso problema anche io. E ho trovato la soluzione che condivideva con te.

Apple ha modificato il programma per sviluppatori Mac e rimosso la certificazione per kext da esso. Quindi, anche tu sei un membro del programma per sviluppatori Mac, non riceverai la certificazione per lo sviluppo di kext a meno che non lo richieda al numero Developer ID and Gatekeeper.

BTW, Mele dice,

"KEXT signing is intended for signing commercially shipping kexts or projects broadly distributed in a large organization."

Quindi cosa possiamo fare è eseguire il nostro Kext sulla modalità di sviluppo kext con l'aggiunta del "mode = 1 kext-dev-" boot-arg. Mi piace,

sudo nvram boot-args="debug=0x146 kext-dev-mode=1" 

E riavviare.

Vorrei che questo fosse utile per voi.

+0

Questa risposta è obsoleta a partire da El Capitan (10.11). Vedi altre risposte per i dettagli. –

0

Sono d'accordo con la risposta di ParaDevil.
Per OS X Yosemite è possibile effettuare le seguenti operazioni:

  1. Download "Kit Kernel Debug";
  2. Eseguire il pacchetto di installazione;
  3. Continua al passaggio "Leggimi";
  4. "Leggimi" dice:

In order to load unsigned kexts, the system must have "KEXT Developer Mode" enabled by adding the "kext-dev-mode=1" boot-arg. The following command (followed by a reboot) would be suitable to prepare a system for testing non-production kexts:     

sudo nvram boot-args="debug=0x146 kext-dev-mode=1" 

Once this is done, the machine will be able to load any valid kext; signatures will still be checked, but a failed verification will just result in a log message. Note: This applies to kexts that contain a binary, as well as codeless (plist-only) kexts. The system will remain in developer mode until you manually remove the boot-arg or clear nvram and reboot. You can exit developer mode by redefining the boot-arg to your previous settings, or clear your boot-args as follows:

sudo nvram -d boot-args 

Apple recommends that you make use of KEXT Developer Mode rather than use your Developer ID certificate to sign drivers while they are under development. Ideally you should sign a driver using a Developer ID certificate only when it reaches its final stages of testing and is being evaluated for release to customers.


Per OS X El Capitan 10.11 il comando:

sudo nvram boot-args="debug=0x146 kext-dev-mode=1" 

non ha alcun effetto.

Leggi System Integrity Protection Guide/Kernel Extensions per ulteriori informazioni.

0

Al dicembre 2016:

Ciò è dovuto alla caratteristica System Integrity Protection che è stato introdotto a El Capitan (10.11). A partire da El Capitan, l'opzione di avvio di kext-dev-mode non ha alcun effetto, quindi la risposta di ParaDevil non funziona. Invece, è necessario disattivare SIP seguendo le istruzioni da this page:

  1. avvio al ripristino del sistema operativo riavviando il computer e tenendo premuti i tasti R comando e in fase di avvio.

  2. Terminale di avvio dal menu Utilità.

  3. eseguire il seguente comando:

    csrutil disable 
    

Quando si riavvia, Protection System Integrity deve essere disattivata.