Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

La Guia DSDT II TM Fix

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 8

Time machine x Creado por EvOSX86 Team

En esta segunda gua, abordaremos como solucionar el problema que algunos usuarios tienen con los backups con Time machine, debido a que el sistema no reconoce la tarjeta de red como dispositivo EN0, para lo cual existe la solucin de aadir una cadena EFI al archivo com.apple.boot.plist, pero para los mas "inquietos", os ofreceremos como realizarlo en el DSDT, teniendo asi siempre limpio nuestro com.apple.boot.plist, y de paso, introduciendo la tcnica de edicin de DSDT para nuestro prximo captulo (Edicin de DSDT para injectar dispositivos de video).

Herramientas necesarias: Ioregistry explorer DSDT patcher.

Contenido: 1. Como reconocer donde est nuestra tarjeta de red en el registro. 2. Descompilacin del archivo DSDT.aml. 3. Estructura bsica de dispositivos en el DSDT 4. Localizacin de nuestra tarjeta de red en el archivo DSDT. 5. Inclusin del codigo.
5a. Anadido del cdigo que arregla el problema Time machine.

6. Compilacin y prueba.

1. Como reconocer donde est nuestra tarjeta de red en el registro.


Una vez descargado el programa Ioregistry explorer, procedemos ejecutarlo, nos desplazaremos por el arbol de entradas hasta que encontremos la referencia de nuestra tarjeta de red, normalmente suele ser bastante claro:

Como vereis, no est marcada en verde la linea que corresponde a la tarjeta, sino la superior, y tiene su explicacin: en el cdigo DSDT no la encontraremos con su nombre, sino con la del dispositivo que la alberga. Vamos a explicar un poco estos dispositivos: Marcado en rojo est el dispositivo RP03, este dispositivo alberga un sub-dispositvo denominado PXS3, en el cual se halla nuestra tarjeta de red. A su vez, el dispositivo RP03 es un sub-dispositvo del cdigo correspondiente a los puertos Pci (PCI0) Cuando aadamos nuestro cdigo, tendremos que estar seguros que es dentro de PXS3 y que cerramos convenientemente el cdigo para no producir errores en la compilacin (se ver mas adelante), si os equivocis y el cdigo cae fuera de PXS3, es muy posible que quede hurfano como dispositvo PCI y que osx no sepa que hacer con el al no estar correctamente denido. Procedamos ahora a descompilr nuestro DSDT.aml previamente creado.

2. Descompilacin del archivo DSDT.aml.


Porqu descompilr el archivo DSDT.aml y no utilizar el DSDT.dsl que tenemos con anterioridad? Pues porque el DSDT.aml es el archivo que ya contiene todos los parcheos previos (HPET y RTC y correccin de errores), as podemos estar seguros de que funciona (mas que nada porque ya lo habremos probado y estar funcionando). Paso primero, hacer copia de seguridad del archivo DSDT.aml Segundo, copia de seguridad de la carpeta debug dentro de la carpeta del parcher (por si acaso)

Mover una copia del archivo DSDT.aml dentro de la carpeta "tools" (que se halla dentro de la carpeta del parcher), estar seguros que se llama DSDT.aml. Dentro de la carpeta "tools" encontraremos un binario llamado "iasl" bien mi recomendacin es que copieis este archivo en /usr/bin con esto lo tendremos siempre disponible al abrir el terminal y no tendremos que estar recordadndo donde lo hemos puesto o arrastrarlo al terminal cada vez que queremos modicar nuestro archivo dst.dsl Dicho esto, y habiendo copiado el binario en donde hemos mencionado comenzamos con la descompilacin del DSDT.aml: Abrimos terminal, nos logueamos como root y accedemos a la carpeta en donde tenemos alamacenado el dsdt (cd "ruta a la carpeta") una vez dentro tecleamos "iasl -d dsdt.aml" Esto crear el archivo DSDT.dsl, hacemos una copia del mismo para tenerla como respaldo y la movemos fuera de la carpeta tools para no tener superpoblacin de archivos. Ahora ya prodemos editar l DSDT.dsl usando un editor de texto de nuestra eleccin (se sugiere textmate)

3. Estructura bsica de dispositivos en el DSDT


Antes de empezar a insertar cdigo, no est de ms que sepamos como es la estructura del cdigo para no perdernos al insertarlo, hechemos un vistazo al cdigo DSDT de nuestra tarjeta de red: El color rojo pertenece al dispositivo madre, se puede observar el corchete grande verde que abre el cdigo para la denicin de los dispositivos, y que no cierra hasta que termina la denicin del device PXS3 (la tarjeta de red) y el mtodo de trabajo de la misma. El color azul oscuro corresponde a la cabezera de nuestra tarjeta de red, su denicin est encapsulada por dos corchetes color azul marino. El color morado corresponde al mtodo que utilizar nuestra tarjeta de red para funcionar (encapsulado en corchetes morados). Y nalmente un corchete verde que cierra toda la denicin del codigo de RP03. Debajo encontrareis la denicin del primer puerto USB, que es dependiente de PCI0 (que no lo veis porque est mas arriba en el cdigo), y que est fuera de todos nuestros corchetes de apertura y cierre. Recomiendo que mireis detenidamente el cdigo y lo examineis hasta que veais claro que cdigo est contenido en cada par de corchetes (Relacin madre/ hijo)

Device (RP03)

{
Name (_ADR, 0x001C0002) OperationRegion (P3CS, PCI_Cong, 0x40, 0x0100) Field (P3CS, AnyAcc, NoLock, WriteAsZeros)
{
Offset (0x10), L0C3, 1, L1C3, 1, Offset (0x12), , 13, LAS3, 1, Offset (0x1A), ABP3, 1, , 2, PDC3, 1, , 2, PDS3, 1, Offset (0x1B), LSC3, 1, Offset (0x20), Offset (0x22), PSP3, 1, Offset (0x9C), , 30, HPS3, 1, PMS3, 1

Device (PXS3)

{
Name (_ADR, Zero) Name (_PRW, Package (0x02) { 0x09, 0x03 })

}
Method (_PRT, 0, NotSerialized)

{
If (GPIC) { Return (Package (0x04) { Package (0x04) { 0xFFFF, Zero, Zero, 0x12 }, Package (0x04) { 0xFFFF, One, Zero, 0x13 }, Package (0x04) { 0xFFFF, 0x02, Zero, 0x10 },

Package (0x04) { 0xFFFF, 0x03, Zero, 0x11 } }) }

}
Device (USB1)
{ Name (_ADR, 0x001D0000) OperationRegion (U1CS, PCI_Cong, 0xC4, 0x04) Field (U1CS, DWordAcc, NoLock, Preserve) { U1EN, 2 } Name (_PRW, Package (0x02) { 0x03, 0x03 }) Method (_PSW, 1, NotSerialized) { If (Arg0) { Store (0x03, U1EN) } Else { Store (Zero, U1EN) } } Method (_S3D, 0, NotSerialized) { Return (0x02) } Method (_S4D, 0, NotSerialized) { Return (0x02) } }

4. Localizacin de nuestra tarjeta de red en el archivo DSDT.


Los ejemplos aqu propuestos estn basados en un ordenador porttil Sony, el cual tiene la denominacin PXS3 para la tarjeta de red, estad seguros de que en vuestros ordenadores, la denominacin ser diferente, por lo que tendris que observar el nombre que tiene en vuestro registro y copiarlo para su bsqueda en el archivo DSDT.dsl

Una vez encontrado nuestro dispositivo de red en el Ioregistry explorer (o el que utilicis vosotros) abrid el archivo DSDT.dsl con el editor de texto, abrid el men "buscar" y ponis el nombre del dispositivo en el campo "bsqueda", en este caso es PXS3, buscadlo hasta que la entrada que aparezca sea del tipo: Device (PXS3) (o el que os corresponda a vosotros)

Ya tendremos localizado nuestro dispositivo y el dispositivo madre que lo contiene.

5. Inclusin del codigo.


Una vez que tengamos localizado el sitio correcto, ya solo nos quedar incluir el cdigo que solucionar el problema del Time machine, pero aqu tenemos que parar un momento para explicar un concepto, el cdigo forneo y el cargador de cdigo foraneo. Basicamnte la explicacin es esta: Nuestro cdigo no es ACPI, es una cadena de informacin que aadiremos al cdigo ACPI, y si la ponemos tal cual, nuestro registro OSX no la cargar al no ser esta compatible ACPI, para que esta sea cargada, tendremos que utilizar un "cargador", que no es mas que un poco de cdigo que denir nuestra entrada de cdigo y permitir su carga por parte del sistema. Donde insertar el "cargador"? Esto es sencillo, debis de buscar con el editor de texto una zona del cdigo que se llama _WAK, y cuando termina la denicin de la misma, encajar el cdigo cargador.

Codigo cargador:
Method (DTGP, 5, NotSerialized) { If (LEqual (Arg0, Buffer (0x10) { /* 0000 */ 0xC6, 0xB7, 0xB5, 0xA0, 0x18, 0x13, 0x1C, 0x44, /* 0008 */ 0xB0, 0xC9, 0xFE, 0x69, 0x5E, 0xAF, 0x94, 0x9B })) { If (LEqual (Arg1, One)) { If (LEqual (Arg2, Zero)) { Store (Buffer (One) { 0x03 }, Arg4) Return (One) } If (LEqual (Arg2, One)) { Return (One) }

} } Store (Buffer (One) { 0x00 }, Arg4) Return (Zero) }

Zona de carga:
El cdigo de esta zona depender de la mquina, y basicamnte tenis que buscar el nal del cdigo _WAK, que terminar as: Return (Package (0x02) { Zero, Zero }) }

He incluir debajo el codigo cargador. EJEMPLO:

Zona de carga mas cargador:


Method (_WAK, 1, NotSerialized) { P8XH (One, 0xAB) If (LOr (LEqual (Arg0, 0x03), LEqual (Arg0, 0x04))) { If (And (CFGD, 0x01000000)) { If (LAnd (And (CFGD, 0xF0), LEqual (OSYS, 0x07D1))) { TRAP (0x3D) } } } If (LEqual (RP2D, Zero)) { Notify (\_SB.PCI0.RP02, Zero) } If (LEqual (Arg0, 0x03)) {} If (LEqual (Arg0, 0x04)) { \_SB.PCI0.LPCB.EC0.SELE () } P8XH (Zero, 0xCD) Return (Package (0x02) { Zero, Zero }) } Method (DTGP, 5, NotSerialized) { If (LEqual (Arg0, Buffer (0x10) { /* 0000 */ 0xC6, 0xB7, 0xB5, 0xA0, 0x18, 0x13, 0x1C, 0x44, /* 0008 */ 0xB0, 0xC9, 0xFE, 0x69, 0x5E, 0xAF, 0x94, 0x9B })) { If (LEqual (Arg1, One)) { If (LEqual (Arg2, Zero)) { Store (Buffer (One) { 0x03 }, Arg4) Return (One) } If (LEqual (Arg2, One)) { Return (One) } } } Store (Buffer (One) { 0x00 }, Arg4) Return (Zero) } Salvis el archivo y lo compilamos para ver si se han producido errores en el cdigo. Abrimos el terminal, nos logueamos como root y accedemos a la carpeta del dsdt (cd "ruta a la carpeta") seguidamente tecleamos

iasl -f dsdt.dsl Si se producen errores, es que habis puesto mal el cargador, si ocurren warnings, es que es posible que vengan de antes, no les hagis mucho caso ahora. Si no se producen errores, borrad el archivo DSDT.aml que se a generado y proseguimos el trabajo dentro de DSDT.dsl

5a. Aadido del cdigo que arregla el problema Time machine.


Nos desplazamos con la bsqueda dentro del editor de texto a nuestra tarjeta de red (en este caso PXS3)
Device (RP03)

{
Name (_ADR, 0x001C0002) OperationRegion (P3CS, PCI_Cong, 0x40, 0x0100) Field (P3CS, AnyAcc, NoLock, WriteAsZeros)
{
Offset (0x10), L0C3, 1, L1C3, 1, Offset (0x12), , 13, LAS3, 1, Offset (0x1A), ABP3, 1, , 2, PDC3, 1, , 2, PDS3, 1, Offset (0x1B), LSC3, 1, Offset (0x20), Offset (0x22), PSP3, 1, Offset (0x9C), , 30, HPS3, 1, PMS3, 1

Device (PXS3)

{
Name (_ADR, Zero) Name (_PRW, Package (0x02) { 0x09, 0x03 })

}
Method (_PRT, 0, NotSerialized)

{
If (GPIC) { Return (Package (0x04) { Package (0x04) { 0xFFFF, Zero, Zero, 0x12 }, Package (0x04) { 0xFFFF, One, Zero, 0x13 }, Package (0x04) { 0xFFFF, 0x02, Zero, 0x10 }, Package (0x04) { 0xFFFF, 0x03, Zero, 0x11 } }) }

}
Device (USB1)
{ Name (_ADR, 0x001D0000) OperationRegion (U1CS, PCI_Cong, 0xC4, 0x04) Field (U1CS, DWordAcc, NoLock, Preserve) { U1EN, 2 } Name (_PRW, Package (0x02) { 0x03, 0x03 }) Method (_PSW, 1, NotSerialized) { If (Arg0) { Store (0x03, U1EN) } Else { Store (Zero, U1EN) } } Method (_S3D, 0, NotSerialized) { Return (0x02) } Method (_S4D, 0, NotSerialized) { Return (0x02) } }

Ahora que estamos en el sitio correcto, hecharmos un vistazo al cdigo que arregla el problema: Method (_DSM, 4, NotSerialized) {

Store (Package (0x06) { "built-in", Buffer (One) { 0x01 }, "device_type", Buffer (0x09) { "ethernet" }, "name", Buffer (0x24) { "Realtek RTL8111/8168B PCI-E Gigabit" } }, Local0) DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0)) Return (Local0) }

Si os jis en las letras en rojo que se sugiere, veris que estn marcadas el Buffer y el nombre de la tarjeta, porque?, pues es simple, deberis de cambiar el nombre de la tarjeta por el vuestro, y el buffer lo que indica es el nmero de caracteres (incluyendo los espacios) que hay en el nombre entrecomillado+1, si cambiis el nombre, pero no el buffer, la compilacin fallar.

Como averiguar el buffer (que ademas est en hexadecimal). Es bien sencillo, necesitamos un conversor decimal a hexadecimal y al contrario. Una web que os puede venir muy conveniente es esta: http://www.parkenet.com/apl/HexDecConverter.html o esta: http://www.paulschou.com/tools/xlate/ Bien, empezemos: *nota : Es necesario decir que la lnea "Realtek RTL8111/8168B PCI-E Gigabit" no es necesaria para jar TM lo hemos puesto porque nos sirve de ejemplo para que entendamos como se calcula el buffer (explicado a continuacin), adems nos servir de informacin y localizacin en el ioreg y tb por que no decirlo, queda ciertamente profesional :)

"Realtek RTL8111/8168B PCI-E Gigabit" , el nmero de letras y espacios contenidos aqui es 35 (decimal), por seguridad, aadimos 1, lo que nos da 36, usando las webs arriba indicadas, ponemos 36 en decimal y nos d como resultado 24 en hexadecimal, osea, el buffer empleado. Buffer (0x24) Ahora cambiaremos el nombre que viene en el cdigo que arregla el TM, poniendo en este caso el que le corresponde: "Realtek RTL8169 PCI-E" Nmero de caracteres y espacios +1 = 22 (decimal) Pasados a hexadecimal en las webs arriba indicadas: 16 Osea, nuestro buffer es: Buffer (0x16) Asi, el cdigo que arregla el TM para esta tarjeta de red, quedaria: Method (_DSM, 4, NotSerialized) { Store (Package (0x06) { "built-in", Buffer (One) { 0x01 }, "device_type", Buffer (0x09) { "ethernet" }, "name", Buffer (0x16) { "Realtek RTL8169 PCI-E" } }, Local0) DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0)) Return (Local0) } Lo cual ya es correcto y esta listo para su insercin en el cdigo DSDT. A proposito.... jaros en las ltimas lineas de cdigo:

DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0)) Return (Local0) Estas lineas son las que permiten que el cdigo cargador identique que es "nuestro" cdigo y las cargue, si no estuviesen estas lneas, el cdigo cargador no sabra que las tiene que cargar. Insertemos nuestro cdigo ahora que est correcto:

Device (RP03)

{
Name (_ADR, 0x001C0002) OperationRegion (P3CS, PCI_Cong, 0x40, 0x0100) Field (P3CS, AnyAcc, NoLock, WriteAsZeros)
{
Offset (0x10), L0C3, 1, L1C3, 1, Offset (0x12), , 13, LAS3, 1, Offset (0x1A), ABP3, 1, , 2, PDC3, 1, , 2, PDS3, 1, Offset (0x1B), LSC3, 1, Offset (0x20), Offset (0x22), PSP3, 1, Offset (0x9C), , 30, HPS3, 1, PMS3, 1

Device (PXS3)

{
Name (_ADR, Zero) Name (_PRW, Package (0x02) { 0x09, 0x03 })

Method (_DSM, 4, NotSerialized) { Store (Package (0x06) { "built-in", Buffer (One) { 0x01 }, "device_type", Buffer (0x09) { "ethernet" }, "name", Buffer (0x16) { "Realtek RTL8169 PCI-E" } }, Local0) DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0)) Return (Local0) }

}
Method (_PRT, 0, NotSerialized)

{
If (GPIC) { Return (Package (0x04) { Package (0x04) { 0xFFFF, Zero, Zero, 0x12 }, Package (0x04) { 0xFFFF, One, Zero, 0x13 }, Package (0x04) { 0xFFFF, 0x02, Zero, 0x10 }, Package (0x04) { 0xFFFF, 0x03, Zero, 0x11 } }) }

}
Como podris observar, el cdigo est insertado dentro de los corchetes azul celeste, que denen la tarjeta de red, especicando as para OSX los parmetros requeridos para que Time machine funcione correctamente y debajo de:
Name (_ADR, Zero) Name (_PRW, Package (0x02) { 0x09, 0x03 })

Que denen nuestra tarjeta de red.

6. Compilacin y prueba.
Ahora solo nos quedar salvar el archivo y compilarlo para ver si tiene errores de sintaxis o no. (visto previamente) Si los tiene, aseguraos de que no hayan quedado corchetes hurfanos o borrados. Si no los tiene, renombrad el archivo DSDT.aml que tenis en el root del sistema a "DSDTold.aml" y copiad el nuevo en la raz del disco. Si fallase el nuevo DSDT.aml, (por ejemplo se congela el sistema), podis arrancar el sistema utilizando el comando DSDT=DSDTold.aml (introducidlo cuando veis el arranque chameleon presionando F8 y seleccionando la instalacin de Leopard). Esperamos que os haya sido til este segundo capitulo de la edicin de DSDT. Gua by: Roisoft y Pere

También podría gustarte