EFI (Extensible Firmware Interface)
ist sozusagen der Nachfoler des BIOS.
Wer mehr dazu erfahren will: http://de.wikipedia.org/wiki/Extensible_Firmware_Interface

Auf Macs werden vitale Hardware-Informationen die f�r die Inbetriebnahme des Betriebssystem erforderlich sind, durch EFI �bergeben. Da wir auf unseren normalo-PC's aber kein EFI besitzen, sondern nur das veraltete BIOS, m�ssen wir diese Informationen irgendwie an das Betriebssystem �bergeben. Fr�her wurden Kernel und bestimmte Kexte gepatcht, damit das System bootet. Heutzutage haben wir Bootloader, die die notwendigsten Informationen um Vanilla-Kernel/Kexte zu benutzen setzen. Um den, in meinen Augen besten Bootloader zu nennen, Chameleon. Doch das ist bei weitem nicht alles was dieser Bootloader kann. Auf der Homepage findet ihr eine vollst�ndige Liste der Features.

Ok, wir k�nnen nun Vanilla-Kernel/Kexte benutzen, aber wie sieht es mit der Grafikkarte, Soundkarte und Netzwerk aus?

Hier kommen so genannte Injektoren ins Spiel. Ursrp�nglich als Kexte gef�hrt (werden sie heute in Form von NVkush und Natit immernoch) injezieren sie bestimmte Informationen in die IORegistry, damit OS X wei�, welche Grafikkarte wir haben und welchen Treiber es laden muss. Die Richtigkeit dieser injezierten Werte ist immens wichtig, da auch nur ein kleiner Fehler bedeuten kann, dass falsche Treiber oder gar keine geladen werden. Eine andere M�glichkeit diese Werte zu injezieren sind "device-properties" Strings. Modifizierte Bootloader wie Chameleon unterst�tzen diese, wie ihr sie erstellt zeige ich euch weiter unten in diesem Thread. Die neueste Methode diese Werte zu injezieren ist per DSDT, doch dazu erz�hle ich euch in einem anderen Thread mehr.

F�r Soundkarten reicht es eigentlich die "layout-id" zu injezieren damit die AppleHDA.kext geladen wird, dennoch ist dies bei weitem nicht genug (au�er bei einem ALC889 codec) um Sound zum Laufen zu brigen. Ihr m�sst auch noch die AppleHDA.kext patchen, dazu gibts im Web recht gute und verst�ndliche Anleitungen (Google liebt dich). Da aber zurzeit an einem universellen Treiber gearbeitet wird lohnt es sich kaum noch sich mit diesem Thema zu befassen und deshalb werde ich auch nicht n�her darauf eingehen.

F�r Netzwerk werden wir nur eins injezieren, n�mlich "built-in". Dies ist erforderlich, da ansonsten Time-Machine ihren Dienst verweigern k�nnte.


"device-properties"-string erstellen f�r die GRAFIKKARTE

Wit brauchen folgendes:
  • Passender Bootloader installiert (Chameleon)
  • gfxutil
  • Property List Editor

Die Tools bekommst du HIER

Einen funktionierenden Injector (Natit/Nvinject/NvinjectGo/Atiinject/NVkush....)
Einen Beispiel-String:


Nun gehts ans Eingemachte:

Device-Path auslesen
  • Terminal �ffnen (/Anwendungen/Dienstprogramme/Terminal.app)
  • cd "Ordner indem sich GFXUTIL befindet"
  • ./gfxutil -f display


Nun spuckt euch das Tool den device-path eurer Grafikkarte aus, sieht ca. so aus:
CODE
DevicePath = PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)

Lasst dieses Fenster offen oder kopiert euch diesen String ab PciRoot.

Plist editieren

Sofern in den Dateien mit dem Beispiels String, die ihr runtergeladen habt, keine Plist vorhanden ist, m�ssen wir diese zuerst generieren. Andernfalls muss die vorhandene Plist modifiziert werden.
  • ./gfxutil -i hex -o xml "hier die hex datei ins terminal ziehen" string.plist
�ffnet nun eure Beispiels-Plist mit dem Property List Editor



hier hervogehoben ist der Device-Path, ersetzt diesen mit eurem (siehe Punkt 2)

Informationen vom Injector holen:
  • Konsole �ffnen (/Anwendungen/Dienstprogramm/Console.app)
  • Links system.log ausw�hlen
  • rechts oben im Suchfeld euren Injector eingeben (zB NVinject)

    schaut dann ca. so aus:

    CODE
    NVinject: Probing.
    NVinject: Setting NVPM=<data not shown>
    NVinject: Setting @0,device_type=display
    NVinject: Setting NVCAP=<data not shown>
    NVinject: Setting @0,compatible=NVDA,NVMac
    NVinject: Setting model=Graphics by NVIDIA
    NVinject: Setting @1,name=NVDA,Display-B
    NVinject: Setting device_type=NVDA,Parent
    NVinject: Setting name=display
    NVinject: Setting rom-revision=NVinject 0.2.1
    NVinject: Setting @0,name=NVDA,Display-A
    NVinject: Setting @1,compatible=NVDA,NVMac
    NVinject: Setting @1,device_type=display
  • tragt diese Infos nun in eure Plist ein
  • �ndert nur die Werte die ihr von der Konsole bekommen habt
Beachte: Wahrscheinlich werden die Werte als Data (Hex) eingetragen sein, aber ihr k�nnt getrost die Class auf String �ndern und als Text eingeben (NUR bei Infos wie name, model, etc. NICHT bei zahlenwerten wie zB NVCAP:


NVCAP und NVPM erhalten wir mit (oder andere Werte die als <data not shown> angezeigt werden):
  • ioreg -lw 0 -p IODeviceTree | grep NVCAP
  • ioreg -lw 0 -p IODeviceTree | grep NVPM
Speichere die modifizierte Plist ab.

Jetzt konvertieren wir diese Plist wieder in einen Hex String
  • ./gfxutil -i xml -o hex EUER_STRING.plist EUER_STRING.hex

Unser String befindet sich jetzt in EUER_STRING.hex (k�nnt ihr mit TextEdit �ffnen)

Nun m�ssen wir den String noch in die Boot.plist eintragen:

  • Backup der Boot.plist: cp /Library/Preferences/SystemConfiguration/com.apple.Boot.plist /Library/Preferences/SystemConfiguration/com.apple.Boot.plist.old
  • �ffnet die Boot.plist mit Property List Editor
  • klickt auf Root -> New Child "device-properties" ; Class = String ; Value = Euer generierter hex-string



  • speichert die plist in einem Ordner auf den du Zugriff hast, zB Desktop
  • Nun die modifizierte Boot.plist in den richtigen Ordner kopieren: sudo cp ~/Desktop/com.apple.Boot.plist /Library/Preferences/SystemConfiguration/

Nun, wir w�ren fertig wink.gif

Eins noch: der Injector muss deaktiviert werden, das machen wir mit:
  • sudo mv /System/Library/Extensions/"euer Injector".kext /System/Library/Extensions/"euer Injector".kext.old
  • sudo touch /System/Library/Extensions/

Rebooten und viel Gl�ck wink.gif

Ob der String auch �bergeben wurde �berpr�ft ihr mit:
  • ioreg -lw 0 -p IODeviceTree | grep device-prop



"device-properties"-string erstellen f�r die NETZWERKKARTE

Wit brauchen folgendes:
  • Passender Bootloader installiert (Chameleon)
  • gfxutil
  • Property List Editor

Die Tools bekommst du HIER

Device-Path auslesen
  • Terminal �ffnen (/Anwendungen/Dienstprogramme/Terminal.app)
  • cd "Ordner indem sich GFXUTIL befindet"
  • ./gfxutil -f ethernet

Nun spuckt euch das Tool den device-path eurer Netzwerkkarte aus, sieht ca. so aus:
CODE
DevicePath = PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)

Lasst dieses Fenster offen oder kopiert euch diesen String ab PciRoot.

Plist editieren
Sofern ihr schon einen String f�r eure Grafikkarte erstellt habt, �ffnet diesen und f�gt einfach einen zweiten device-path hinzu, ansonten erstellt einen neuen mit Property List Editor:


Speichere die modifizierte Plist ab.

Jetzt konvertieren wir diese Plist wieder in einen Hex String
  • ./gfxutil -i xml -o hex EUER_STRING.plist EUER_STRING.hex

Unser String befindet sich jetzt in EUER_STRING.hex (k�nnt ihr mit TextEdit �ffnen)

Nun m�ssen wir den String noch in die Boot.plist eintragen:

  • Backup der Boot.plist: cp /Library/Preferences/SystemConfiguration/com.apple.Boot.plist /Library/Preferences/SystemConfiguration/com.apple.Boot.plist.old
  • �ffnet die Boot.plist mit Property List Editor
  • klickt auf Root -> New Child "device-properties" ; Class = String ; Value = Euer generierter hex-string



  • speichert die plist in einem Ordner auf den du Zugriff hast, zB Desktop
  • Nun die modifizierte Boot.plist in den richtigen Ordner kopieren: sudo cp ~/Desktop/com.apple.Boot.plist /Library/Preferences/SystemConfiguration/

Nun, wir w�ren fertig wink.gif

Reboot, viel Gl�ck.