babyporch Posted January 15, 2008 Share Posted January 15, 2008 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". a603000001000000010000009a0300001400000002010c00d041030a000000000101060 00010101060000007fff040014000000400032002c006e0061006d00650000001100000073656e73 f722d706172656e7436000000400032002c00680077006300740072006c002d00700061007200610 6d0073002d00760065007200730069006f006e00000008000000000000021c000000640065007600 900630065005f0074007900700065000000100000004e5644412c4765466f7263650e0000006e006 006d00650000000f0000004e5644412c506172656e7422000000400030002c006400650076006900 30065005f00740079007000650000000b000000646973706c6179100000006d006f00640065006c0 00001e0000004e5649444941204765466f7263652037363030204754204546492200000040003100 c006400650076006900630065005f00740079007000650000000b000000646973706c61791200000 400032002c007200650067000000080000000000000222000000400032002c006400650076006900 30065005f0074007900700065000000120000004e5644412c6770752d64696f64652000000040003 002c0063006f006d00700061007400690062006c0065000000160000004e5644412c73656e736f72 d706172656e7422000000400032002c002300730069007a0065002d00630065006c006c007300000 080000000000000020000000400031002c0063006f006d00700061007400690062006c0065000000 e0000004e5644412c4e564d616314000000400030002c006e0061006d0065000000120000004e564 412c446973706c61792d413a000000400032002c0068007700730065006e0073006f0072002d0070 06100720061006d0073002d00760065007200730069006f006e00000008000000000000022600000 400032002c0023006100640072006500730073002d00630065006c006c0073000000080000000000 00114000000400031002c006e0061006d0065000000120000004e5644412c446973706c61792d422 000000400030002c0063006f006d00700061007400690062006c00650000000e0000004e5644412c e564d61631e00000072006f006d002d007200650076006900730069006f006e00000008000000333 3232100000004e00560043004100500000001800000004000000000003000c000000000000070000 0000e0000004e00560050004d0000002000000001000000000000000000000000000000000000000 00000000000000 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.org/index.php/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. Link to comment Share on other sites More sharing options...
babyporch Posted January 15, 2008 Author Share Posted January 15, 2008 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.mkext sudo 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. Link to comment Share on other sites More sharing options...
babyporch Posted January 15, 2008 Author Share Posted January 15, 2008 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>[b]0x00[/b]</string> <key>layout-id</key> <string>[b]0x0000000c[/b]</string> <key>revision-id</key> <string>[b]0x00000001[/b]</string> <key>subsystem-id</key> <string>[b]0x0000a002[/b]</string> <key>subsystem-vendor-id</key> <string>[b]0x00001458[/b]</string> <key>vendor-id</key> <string>[b]0x00008086[/b]</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. Link to comment Share on other sites More sharing options...
Joeandmat Posted January 15, 2008 Share Posted January 15, 2008 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?? Link to comment Share on other sites More sharing options...
pincopanco Posted January 15, 2008 Share Posted January 15, 2008 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 Link to comment Share on other sites More sharing options...
FavleX Posted January 20, 2008 Share Posted January 20, 2008 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.. Link to comment Share on other sites More sharing options...
babyporch Posted January 21, 2008 Author Share Posted January 21, 2008 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. Link to comment Share on other sites More sharing options...
Joeandmat Posted January 21, 2008 Share Posted January 21, 2008 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? Link to comment Share on other sites More sharing options...
babyporch Posted January 21, 2008 Author Share Posted January 21, 2008 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. Link to comment Share on other sites More sharing options...
Joeandmat Posted January 21, 2008 Share Posted January 21, 2008 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...) Link to comment Share on other sites More sharing options...
desmogix Posted March 6, 2008 Share Posted March 6, 2008 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? Link to comment Share on other sites More sharing options...
Joeandmat Posted March 8, 2008 Share Posted March 8, 2008 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! Link to comment Share on other sites More sharing options...
Richsanto89 Posted March 9, 2008 Share Posted March 9, 2008 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 Link to comment Share on other sites More sharing options...
fgioia Posted March 15, 2008 Share Posted March 15, 2008 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. Link to comment Share on other sites More sharing options...
babyporch Posted March 17, 2008 Author Share Posted March 17, 2008 Problema di (per le sk Nvidia) NVCAP (per Intel non conosco l'equivalente). Per le Nvidia lo risolvi così http://nvinject.free.fr/forums/viewtopic.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. Link to comment Share on other sites More sharing options...
fgioia Posted March 17, 2008 Share Posted March 17, 2008 Grazie babyporch 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 Link to comment Share on other sites More sharing options...
minkione Posted March 25, 2008 Share Posted March 25, 2008 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 Link to comment Share on other sites More sharing options...
Juaguarius Posted February 12, 2009 Share Posted February 12, 2009 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. Link to comment Share on other sites More sharing options...
BlackCorsair Posted February 20, 2009 Share Posted February 20, 2009 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. Link to comment Share on other sites More sharing options...
desmogix Posted March 5, 2009 Share Posted March 5, 2009 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 ? Link to comment Share on other sites More sharing options...
S@lwos Posted March 5, 2009 Share Posted March 5, 2009 Un template.plist per ATI dove lo posso trovare? Link to comment Share on other sites More sharing options...
ErmaC Posted June 30, 2009 Share Posted June 30, 2009 Fabio Link to comment Share on other sites More sharing options...
Recommended Posts