2014-10-31 11 views
9

Miałem kod podpisania na kext w Yosemite. Ale kextload nie działa.
Był to kod2 w wersji. codesign --verify jest prawdziwe.
Ale kextload nie działa. Dlaczego nie załadować w Yosemite?codesigned kext Ale dlaczego nie załadować w Yosemite (10.10)

Oto mój dziennik.

Sprawdziłem z codesign -dvvv ./myKext.kext I wszystko jest w porządku.

codesign -dvvv ./myKext.kext zwrócony następujący:

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 

To pokazuje, że w wersji 2.
Ale sudo kextload ./myKext.kext wraca następujące:

/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 Powroty:

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

sudo kextutil -l ./myKext.kext zwroty:

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

Dlaczego nieważny podpis ?!
Mam podpisane z code2 w Yosemite.
Co zrobiłem źle znak? Ktoś mnie nauczy, proszę.

+0

Zgaduję, ale czy Apple nie musi być zaangażowane w podpisywanie kodu, aby było ważne? – trojanfoe

+0

Czy zażądałeś od Apple, że twój ID DeveloperID ma dodany atrybut codesign kext? – TheDarkKnight

+0

Wygląda to na ten sam problem: http://stackoverflow.com/questions/26283158/codesigning-kext-with-kext-enabled-certificate-fails-during-kextload-code-sign – pmdj

Odpowiedz

8

Miałem ten sam problem. I mam rozwiązanie z tobą.

Apple zmienił program dla programistów Mac i usunął z niego certyfikat dla kext. Nawet jeśli jesteś członkiem Programu dla programistów komputerów Mac, nie otrzymasz certyfikatu do rozwoju kext, chyba że poprosisz o to pod numer Developer ID and Gatekeeper.

BTW, jabłka mówi

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

Więc co możemy zrobić, to uruchomić naszą kext od trybu Rozwoju kext dodając "kext-spustoszone mode = 1" rozruchowego-Arg. Podobnie jak,

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

I uruchom ponownie.

Życzę, aby to było pomocne dla Ciebie.

+0

Ta odpowiedź jest nieaktualna od El Capitan (10.11). Zobacz inne odpowiedzi, aby poznać szczegóły. –

0

Zgadzam się z odpowiedzią ParaDevil.
dla OS X Yosemite można wykonać następujące czynności:

  1. Pobierz "Kernel Debug Kit";
  2. Uruchom pakiet instalacyjny;
  3. Przejdź do kroku "Czytaj mnie";
  4. "Read Me" mówi:

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.


dla OS X El Captain 10,11 polecenia:

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

nie daje efektu.

Przeczytaj System Integrity Protection Guide/Kernel Extensions, aby uzyskać więcej informacji.

0

W grudniu 2016:

Wynika to z funkcji System Integrity Protection, który został wprowadzony w El Capitan (10,11). Od wersji El Capitan opcja uruchamiania trybu kext-dev nie ma żadnego efektu, więc odpowiedź ParaDevila nie działa. Zamiast tego należy wyłączyć SIP, postępując zgodnie z instrukcjami z this page:

  1. Boot do odzyskiwania systemu operacyjnego poprzez ponowne uruchomienie urządzenia i przytrzymując klawisze Command i R przy starcie.

  2. Uruchom Terminal z menu Narzędzia.

  3. Uruchom następujące polecenie:

    csrutil disable 
    

Po ponownym uruchomieniu, System Integrity Ochrona powinna być wyłączona.

Powiązane problemy