Jump to content

[EFI Strings]


  • Please log in to reply
21 replies to this topic

#1
babyporch

babyporch

    InsanelyMac Protégé

  • Members
  • PipPip
  • 99 posts
  • Gender:Male
  • Location:Sicily
Introduzione

Questa guida è divisa in tre parti: Introduzione, Video, Audio.
La versione originale in inglese è stata creata da MoDs nel forum del sito di Netkas, a cui vanno tutti i ringraziamenti, e da me è stata rivista e tradotta, aggiungendo alcuni dati mancanti.

PC_EFI?
PC_ECI ha cambiato l'intera scena del mondo OSx86. Questo emulatore di EFI ci permette in determinati PC, di far funzionare le kexts e i kernel originali. Alcune periferiche (che non esistono nel mondo Mac) hanno bisogno di particolari fix per funzionare.

Come funzionano queste fix?
La maggiorparte sono kexts (estensioni del kernel) e sono situate in /System/Library/Extensions/.
Mac OS usa una mappa chiamata "Device Tree". Questa mappa indica al kernel, durante il boot, quali driver caricare. Le kexts non fanno altro che "passare" i dati necessari al "Device Tree" durante il boot.

NVinject, Titan, Natit (injectors) non fanno altro che determinare la sk video usata e passare i dati al "Device Tree".
ALCinject fa lo stesso per l'audio.
Naturalmente anche se i dati per il video o l'audio sono passati al "Device Tree" dagli injectors, ma non sono presenti i drivers (kexts) per quella periferica questa non funzionerà.

PC_EFI Strings
Attualmente PC_EFI supporta le cosidette "pluggable strings" usate per aggiungere o passare dati al "Device Tree" durante il boot.
Queste "strings" sono serie molto lunghe di caratteri inserite nel file "/Library/Preferences/SystemConfiguration/com.apple.Boot.plist".

a603000001000000010000009a0300001400000002010c00d041030a00000000010106000010101060000007fff040014000000400032002c006e0061006d00650000001100000073656e73f722d706172656e7436000000400032002c00680077006300740072006c002d007000610072006106d0073002d00760065007200730069006f006e00000008000000000000021c000000640065007600900630065005f0074007900700065000000100000004e5644412c4765466f7263650e0000006e006006d00650000000f0000004e5644412c506172656e7422000000400030002c00640065007600690030065005f00740079007000650000000b000000646973706c6179100000006d006f00640065006c000001e0000004e5649444941204765466f7263652037363030204754204546492200000040003100c006400650076006900630065005f00740079007000650000000b000000646973706c61791200000400032002c007200650067000000080000000000000222000000400032002c00640065007600690030065005f0074007900700065000000120000004e5644412c6770752d64696f64652000000040003002c0063006f006d00700061007400690062006c0065000000160000004e5644412c73656e736f72d706172656e7422000000400032002c002300730069007a0065002d00630065006c006c007300000080000000000000020000000400031002c0063006f006d00700061007400690062006c0065000000e0000004e5644412c4e564d616314000000400030002c006e0061006d0065000000120000004e564412c446973706c61792d413a000000400032002c0068007700730065006e0073006f0072002d007006100720061006d0073002d00760065007200730069006f006e00000008000000000000022600000400032002c0023006100640072006500730073002d00630065006c006c007300000008000000000000114000000400031002c006e0061006d0065000000120000004e5644412c446973706c61792d422000000400030002c0063006f006d00700061007400690062006c00650000000e0000004e5644412ce564d61631e00000072006f006d002d007200650076006900730069006f006e000000080000003333232100000004e00560043004100500000001800000004000000000003000c0000000000000700000000e0000004e00560050004d000000200000000100000000000000000000000000000000000000000000000000000

Ad esempio ecco il file com.Apple.Boot.plist prima della modifica:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict>	<key>Kernel</key>	<string>mach_kernel</string>	<key>Kernel Flags</key>	<string></string></dict></plist>

Per aggiungere la stringa aggiungi una nuova key chiamate "device-properties" al file come nell'esempio seguente:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict>	<key>Kernel</key>	<string>mach_kernel</string>	<key>Kernel Flags</key>	<string></string>	<key>device-properties</key>	<string>c50400000100000002000000230100000700000002010c00d0...</string></dict></plist>

Nota: non si può editare il com.Apple.Boot.plist nella cartella in cui è situato se non via terminale. Se volete usare Textedit o altro, modificate il file nel dekstop e rimpiazzatelo.

Perche usare queste "strings"?
1) Non dipendere da injectors vari, ma solo dalle presenza o meno di driver.
2) Rendere il PC più simile ad un Mac.
3) Tutto l'hardware che vi interessa (sino a 4 periferiche) sarà caricato in un solo file (in caso di rispistino basta backapparlo)

Devo sapere altro?
Si possono inserire indicare sino a 4 periferiche al "Device Tree".
Ad esempio: Video, Audio, Ethernet, Controller SATA (ICH8R), IDE (JMicron) ecc...
Il file com.Apple.Boot.plist non può avere dimensioni superiori a 16384 Byte.
Prossimamente le "strings" saranno indicate anche come "HEX String" e avranno estensione .hex.
Scaricatevi questo programma (l'ultima versione) da link http://forum.netkas....topic,64.0.html, vi servirà per convertire i file plist in hex e viceversa.
Consiglio anche in installarvi Xcode 3.0 per avere maggiori strumenti anche visuali per effettuare le modifiche e leggere il "Device Tree".

Prosegue.

#2
babyporch

babyporch

    InsanelyMac Protégé

  • Members
  • PipPip
  • 99 posts
  • Gender:Male
  • Location:Sicily
EFI string per il video

Il metodo che vi consiglio è di non usare file hex già fatti ma di ricavarvi il vostro in modo da personalizzarvi il file plist che vi creerete, potendo aggiungere o eliminando periferiche ecc...

Per fare ciò installate un injector video (quello che ritenete migliore per la vostra sk video, es: vi da il dual monitor ecc...).

1) Create un file template.plist usando questo modello (è quello di una 7600GS ma il discorso non cambia):

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict>	<key>PciRoot(0x1)/Pci(0x1,0x0)/Pci(0x0,0x0)</key>	<dict>		<key>@0,compatible</key>		<string>NVDA,NVMac</string>		<key>@0,device_type</key>		<string>display</string>		<key>@0,name</key>		<string>NVDA,Display-A</string>		<key>@1,compatible</key>		<string>NVDA,NVMac</string>		<key>@1,device_type</key>		<string>display</string>		<key>@1,name</key>		<string>NVDA,Display-B</string>		<key>@2,#adress-cells</key>		<string>0x01000000</string>		<key>@2,#size-cells</key>		<string>0x00000000</string>		<key>@2,compatible</key>		<string>NVDA,sensor-parent</string>		<key>@2,device_type</key>		<string>NVDA,gpu-diode</string>		<key>@2,hwctrl-params-version</key>		<string>0x02000000</string>		<key>@2,hwsensor-params-version</key>		<string>0x02000000</string>		<key>@2,name</key>		<string>sensor-parent</string>		<key>@2,reg</key>		<string>0x02000000</string>		<key>NVCAP</key>		<data>		BAAAAAAAAwAMAAAAAAAABwAAAAA=		</data>		<key>NVPM</key>		<data>		AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==		</data>		<key>device_type</key>		<string>NVDA,GeForce</string>		<key>model</key>		<string>NVIDIA GeForce 7600 GS</string>		<key>name</key>		<string>NVDA,Parent</string>		<key>rom-revision</key>		<string>0x32323033</string>	</dict></dict></plist>

2) Ora avete bisogno di trovare il devicepath della vostra sk video: usate il seguente comando

./gfxutil -f display

L'output sarà qualcosa di simile:

DevicePath = PciRoot(0x0)/Pci(0x1,0x0)Pci(0x0,0x0)

3) Inserite il vostro devicepath tra le due stringhe <key> nel file plist.

Avviate Console in Applicazioni > Utilities

Cliccate su mostra lista log evidenziando system.log

Nel campo cerca scrivete NVinject o ATIinject o Natit o Titan (dipende da quale injector usate) e modificate il file plist con i dati che vi appaiono (potete sia aggiungere voci che rimuoverne).
L'effetto del template sarà più simile a quello dell'injector quanto più i dati indicati saranno uguali.

4) Convertite il file template.plist in hex così:

./gfxutil -i xml -o hex template.plist template.hex

5) Aggiungete il contenuto del file template.hex al file com.Apple.Boot.plist come indicato nell'introduzione avendo cura di rimuovere qualsiasi ritorno a capo.

6) Rimuovete l'injector video utilizzato e pulite la cache

sudo rm -rf /System/Library/Extensions.mkextsudo kextcache -k /System/Library/Extensions

7) Riavviate e buona fortuna

Se il risultato non fosse quello apprezzato con l'injector, assicuratevi di avere dati uguali tra quelli mostrati nel system.log con l'injector e quelli inseriti nel file plist.

#3
babyporch

babyporch

    InsanelyMac Protégé

  • Members
  • PipPip
  • 99 posts
  • Gender:Male
  • Location:Sicily
EFI per l'audio

Per tutti coloro che usano AppleAzalia in discorso è semplicissimo, basta effettuare le modifiche o aggiunte al file template plist e si può eliminare la kext AppleAzalia).
Per chi usa un AppleHDA patchata da Taruga deve mantenere almeno per ora la kext patchata, dato che non si sa come inserire i dati di configurazione nel file template, ma si può eliminare l'injector ALCinject.

Per chi ha già una stringa per il video

aprite il template.plist ed aggiungete

......      <key>rom-revision</key>      <string>0x32323033</string>   </dict><key>PciRoot(0x1)/Pci(0x1b,0x0)</key>   <dict>      <key>PinConfigurations</key>      <string></string>      <key>built-in</key>      <string>0x00</string>      <key>layout-id</key>      <string>0x0000000c</string>      <key>revision-id</key>      <string>0x00000001</string>      <key>subsystem-id</key>      <string>0x0000a002</string>      <key>subsystem-vendor-id</key>      <string>0x00001458</string>      <key>vendor-id</key>      <string>0x00008086</string>   </dict></dict></plist>

Per chi non ha una stringa video createvi il seguente file:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict><key>PciRoot(0x1)/Pci(0x1b,0x0)</key>   <dict>      <key>PinConfigurations</key>      <string></string>      <key>built-in</key>      <string><strong class='bbc'>0x00</strong></string>      <key>layout-id</key>      <string><strong class='bbc'>0x0000000c</strong></string>      <key>revision-id</key>      <string><strong class='bbc'>0x00000001</strong></string>      <key>subsystem-id</key>      <string><strong class='bbc'>0x0000a002</strong></string>      <key>subsystem-vendor-id</key>      <string><strong class='bbc'>0x00001458</strong></string>      <key>vendor-id</key>      <string><strong class='bbc'>0x00008086</strong></string>   </dict></dict></plist>

Per tutti e due i casi continuate così:

1) Ottenete il devicepath della vostra sk audio così:

./gfxutil -f AZAL

2) Avviate IORegistryExplorer (xcode tools) e navigate sino al nodo AZAL.

Modificate il template modificando i valori in grassetto con quello mostrati nel lato destro del IORegistryExplorer.
Nota bene: i dati del tipo <d8 27 00 00> vanno convertiti in 0x000027d8, ciò si ottione aggiungendo 0x all'inizio e leggendo i dati da destra a sinistra.

3) Salvate e create il file hex.

4) Inserite i file hex nel com.Apple.Boot.plist.

5) Cancellate gli injector AppleAzaliaAudio.kext, ALCinject.kext, ...

6) Cancellate e ricreate la cache e riavviate.

Se non avate Azalia (AZAL) cercate la vostra sk audio con IORegistryExplorer.
In questo caso una volta individuate date il seguente comando per trovare il devicepath:

./gfxutil -f <name>

dove <name> stà per la vostra sk audio.

Se la sk audio ha questo formato qualcosa@xxxx rimuovete la chiocciola e tutto quello che segue, ad esempio la mi sk audio è AZAL@1b, il comando che darò sarà
./gfxutil -f AZAL
.

Spero di essere stato utile e chiaro.

Continuerò con i controller SATA E Jmicron dopo che li avro testai ampiamente.

#4
Joeandmat

Joeandmat

    InsanelyMacaholic

  • Retired
  • 3,356 posts
  • Gender:Male
  • Location:Turin (Politecnico)
scusa la domanda, ma a che servono di preciso?? cioè mi spiego, avendo gli injector, i driver li carica comunque... quando "mettiamo gli injector" nel com.apple.boot.plist e li eliminiamo, che privilegi abbiamo?? certo, teoricamente potremmo fare andare anche la (per esempio) intel 3945 wireless, ma non avendo gli injectors da dove copiare le stringe esadecimali, non possiamo fare comunque niente...
E' giusto quello che dico??

#5
pincopanco

pincopanco

    InsanelyMac Sage

  • Members
  • PipPipPipPipPip
  • 265 posts
grazie babyporch per la traduzione e la spiegazione!
era un po che giravo attorno a quel forum
per risolvere il problema del tearing
ma non avevo capito che si poteva fare molto altro
non solo le schede video

#6
FavleX

FavleX

    FavleX

  • Members
  • PipPipPipPipPipPipPip
  • 727 posts
Piccola nota.
Forse mi sbaglio , ma il limite a 4 periferiche non mi torna molto, in realtà , il limite è dato dalla dimensione del file in questione che so di essere di 64kb , quindi in teoria riguarda la lunghezza di stringa , alcuni potranno avere strighe piu corte e inserire piu devices..

#7
babyporch

babyporch

    InsanelyMac Protégé

  • Members
  • PipPip
  • 99 posts
  • Gender:Male
  • Location:Sicily
No, il limite del file com.apple.boot.plist è di 16384 bytes per un massimo di 4 perifieriche specificate (Netkas e test vari docet). Ciao.

#8
Joeandmat

Joeandmat

    InsanelyMacaholic

  • Retired
  • 3,356 posts
  • Gender:Male
  • Location:Turin (Politecnico)

scusa la domanda, ma a che servono di preciso?? cioè mi spiego, avendo gli injector, i driver li carica comunque... quando "mettiamo gli injector" nel com.apple.boot.plist e li eliminiamo, che privilegi abbiamo?? certo, teoricamente potremmo fare andare anche la (per esempio) intel 3945 wireless, ma non avendo gli injectors da dove copiare le stringe esadecimali, non possiamo fare comunque niente...
E' giusto quello che dico??



c'è nessuno che mi sa dire se è giusto e l'utilita delle strighe efi?

#9
babyporch

babyporch

    InsanelyMac Protégé

  • Members
  • PipPip
  • 99 posts
  • Gender:Male
  • Location:Sicily

scusa la domanda, ma a che servono di preciso?? cioè mi spiego, avendo gli injector, i driver li carica comunque... quando "mettiamo gli injector" nel com.apple.boot.plist e li eliminiamo, che privilegi abbiamo?? certo, teoricamente potremmo fare andare anche la (per esempio) intel 3945 wireless, ma non avendo gli injectors da dove copiare le stringe esadecimali, non possiamo fare comunque niente...
E' giusto quello che dico??


Il non avere gli injectors non è un qualcosa di inutile, ma nel mio caso ad esempio (HP dv9585el) qualsiasi injector non vedeva la 8600gs (M???) e se la vedeva no QE ne CI. Con la gfx string io ho risolto editandola a manima, e inserendo gli approppriati ven e dev id nei kext necessari. Quindi come in Mac.
Ciao.

#10
Joeandmat

Joeandmat

    InsanelyMacaholic

  • Retired
  • 3,356 posts
  • Gender:Male
  • Location:Turin (Politecnico)
conosco quel portatile, lo volevo anche io, solo che alla fine ho preso quello che ho in firma perchè è un 15" (io volevo il 17", ma mi hanno dovuto deconvincere perchè per l'università non andava bene...)
gli nvinject non te la vedevano la 8600M GS? da me funziona alla grande la 8400M GS, anche se non mi dice system information il tipo di scheda... per il resto c'ho tutto abilitato... e poi, scusa, non bastava che inserivi il tuo ven id e dev id negli nvinject? non sarebbe funzionato lo stesso?

PS: a mia mi parino inutili 'sti strighne (cu è sicilianu un ci pienza chiu assai ri ru vote...)

#11
desmogix

desmogix

    InsanelyMac Legend

  • Donators
  • 810 posts
  • Gender:Male
  • Location:Rome
scusate io sono profano, da quello che ho capito, emulare l'efi da la possibilità di far funzionare le periferiche che abbiamo, non nserendo nuove estenzioni del kernel apposite per le nostre periferiche, ma andando a modificare dei dati in un preciso file, in cui fino ad un certo limite, sarà lui (stò file) a garantire il funzionamento delle periferiche.

Ma oltre a questo, stringhe delle periferiche a parte, quali altri vantaggi ci sono ad emulare questo benedetto efi?

#12
Joeandmat

Joeandmat

    InsanelyMacaholic

  • Retired
  • 3,356 posts
  • Gender:Male
  • Location:Turin (Politecnico)
che gira il kernel originale su sistema originale (o quasi...), anche se gli aggiornamenti non li puoi fare direttamente poichè crea alcuni file di default ed altri che bloccano il pc per la cpu (se la cpu non è hpet...)

ciao!

#13
Richsanto89

Richsanto89

    InsanelyMac Legend

  • Members
  • PipPipPipPipPipPipPip
  • 531 posts
  • Gender:Male
  • Location:Padua Italy
Ma il che ho una 7600gs DA 256MB e non riesco a far riconoscere il kext uso questa guida?????perchè non lo molto capita e volevo chiedere se qualcuno mi poteva un po spiegare

#14
fgioia

fgioia

    InsanelyMac Geek

  • Members
  • PipPipPipPip
  • 198 posts
babyporch, perdonami ma sto uscendo pazzo, ho un toshiba u300 con x3100, con efi e kets base funziona qe/qi ma solo se tengo collegato il monitor esterno, se lo stacco scompare lo schermo fino a che non reinserisco la vga. Se installo i kext di paulicat parte leo e rimane schermata blu sui due monitor, parte solo in -x.

secondo me leo vede con la porta vga il mio philips lcd come primario, infatti se vado sul informazioni mac e su grafica monitor mi dice monitor philips e collegamento esterno assente.

c'e' il modo o una stringa da modificare per rendere il monitor interno principale?

ciao e grazie.

#15
babyporch

babyporch

    InsanelyMac Protégé

  • Members
  • PipPip
  • 99 posts
  • Gender:Male
  • Location:Sicily
Problema di (per le sk Nvidia) NVCAP (per Intel non conosco l'equivalente). Per le Nvidia lo risolvi così http://nvinject.free...topic.php?t=214.
Con x3100 non sò. Forse ponticellando l'uscita VGA come con la 915 o 950 puoi risolvere.
Cerca nel forum, ci sono vari test.

#16
fgioia

fgioia

    InsanelyMac Geek

  • Members
  • PipPipPipPip
  • 198 posts
Grazie babyporch :D coi ponticelli niente ma se attacco una vga esterna con un cavo maschio maschio funziona. Devo capire come funziona il circuito vga, poi mi autocostruisco un connettore :P

#17
minkione

minkione

    InsanelyMac Protégé

  • Members
  • Pip
  • 9 posts
  • Gender:Male
  • Location:roma
ma chi può gentilmente farmi stò file con la mia scheda video ( 8400gs 512 ) ????
io non ho capito molto e ho una paura matta di sbagliare :(

#18
Juaguarius

Juaguarius

    InsanelyMac Protégé

  • Just Joined
  • Pip
  • 1 posts
Ragazzi c'è qualcuno che mi consiglia su come installare la stringa ethernet per far funzionare time machine?
Vi spiego il problema:l'unico modo per far funzionare time machine è quello di inserire tramite efi studio la stringa ethernet.
Il problema è che quando lo faccio mi si cancella dal boot.plist la stringa video e così mi funziona time machine ma non la scheda video.
Non c'è un modo per mettere sia la stringa video e sia la stringa ethernet nel boot.plist?
Grazie.

#19
BlackCorsair

BlackCorsair

    Insanely Metal Rocker

  • Members
  • PipPipPipPipPip
  • 309 posts
  • Gender:Male
  • Location:ITALIA - CAGLIARI - TRIESTE

Ragazzi c'� qualcuno che mi consiglia su come installare la stringa ethernet per far funzionare time machine?
Vi spiego il problema:l'unico modo per far funzionare time machine � quello di inserire tramite efi studio la stringa ethernet.
Il problema � che quando lo faccio mi si cancella dal boot.plist la stringa video e cos� mi funziona time machine ma non la scheda video.
Non c'� un modo per mettere sia la stringa video e sia la stringa ethernet nel boot.plist?
Grazie.


Con osx86tools c'è una funzione per le efi strings. Una volta dentro questa scheda c'è un pannello "merge" dove importando le due stringhe, le unisce in un'unica EFI string. Non l'ho provato e non so se servono le pist o i file hex già convertiti in ogni caso fai tutto con pochi click.

#20
desmogix

desmogix

    InsanelyMac Legend

  • Donators
  • 810 posts
  • Gender:Male
  • Location:Rome
ho riletto mille volte questa guida, e complimenti veramente.

una domanda di cui intuisco appena la risposta, ma per FARE CHIAREZZA anche a chi come me è incerto.

edit

Non capisco quale limitazione ha questo metodo... posso farmi una hex string di una scheda che non c'è per esempio nel wiki ?





0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

© 2014 InsanelyMac  |   News  |   Forum  |   Downloads  |   OSx86 Wiki  |   Mac Netbook  |   PHP hosting by CatN  |   Designed by Ed Gain  |   Logo by irfan  |   Privacy Policy