# [COMO] Arreglar la DSDT a partir del Windows preinstalado

## Alex14

Índice

1. Introducción

2. Materiales necesarios

3. Comprobar el estado de nuestra DSDT (se puede ignorar)

4. Obteniendo una DSDT en condiciones

5. Compilando y añadiendo la DSDT al núcleo (estáticamente)

6. Apreciando los cambios

1. Introducción

ACPI fue creado por Hewlett-Packard, Intel, Microsoft, Phoenix y Toshiba como un estándar de administración energética mucho mejor que el APM. Pero como todo estándar no se respeta en todos los casos xD

ACPI se sirve de la tabla DSDT que contiene información de todos los dispositivos y como obtener su información, para escribir esta tabla se usa el ASL (ACPI Source Language) que al compilarlo se obtiene el AML (ACPI Machine Language) que es el usado por el núcleo.

Hay 2 compiladores, el de Intel y el de Microsoft. El de Intel es multi-plataforma (Windows, Unix y derivados) y da muchos más errores al compilar porque genera un AML mucho más depurado y dentro del estándar, el de Microsoft ignora muchos mas errores generando un AML de menor calidad y que no respeta tanto el estándar (para variar) desconozco si el de Microsoft es multiplataforma pero lo dudo.

Arreglar nuetsra DSDT nos servirá para mejorar nuestro ACPI, si no funciona correctamente una solución sería esta.

Ahora que ya sabemos más o menos de lo que vamos a manejar necesitamos el IASL (Compilador de Intel), podemos obtener la versión de Windows y Linux de esta página:

http://developer.intel.com/technology/iapc/acpi/downloads.htm

Y además el de Linux lo puedes obtener del portage:

```
emerge iasl
```

NOTA: Los nombres de archivos que aparecen en todo el documento son orientativos, no tienen porque servir en todos los casos

2. Materiales necesarios

- El compilador IASL para Windows y Linux

- El Windows preinstalado que venía en el portátil (si no lo tenéis y no hicisteis backup, el CD de instalación de Windows que a lo mejor te viene no crea un Windows idéntico al preinstalado, en mi caso no lo crea y tuve que usar mi backup)

Puede funcionar de ambas maneras pero recomiendo que sea con el preinstalado xD

- Algún método para pasar archivos del Windows al Linux (lo digo para que vayáis compilando el soporte NTFS o sacando vuestro almacenamiento externo xD)

3. Comprobar el estado de nuestra DSDT (se puede ignorar)

Primero desde la carpeta proc podemos obtener el AML y lo vamos a guardar en un archivo:

```
cat /proc/acpi/dsdt > dsdt.dat
```

Ahora vamos a obtener el ASL

```
iasl -d dsdt.dat
```

Y vamos a recompilarlo para ver cuantos errores hay

```
iasl -c dsdt.dsl
```

Ahora en la ultima linea nos saldrán los errores,  me salen 18  :Razz: 

4. Obteniendo una DSDT en condiciones

Ahora en nuestro Windows escribiremos en la consola (Para abrir una consola: Inicio > Ejecutar > cmd.exe -Windows XP- o command.com)

```
iasl.exe -d
```

Si ponemos eso sin ningún parámetro usará la tabla DSDT que está en el registro (para quienes tengan curiosidad está en HKEY_LOCAL_MACHINE > Hardware > ACPI)

Ahora cogemos el DSL y lo pasamos a nuestro Linux

5. Compilando y añadiendo la DSDT al núcleo (estáticamente)

Antes de compilar el DSL, debemos corregir el fin de linea ya que el IASL es sensible al CRLF (fin de linea de DOS/Windows), así que vamos a ello:

```
perl -pi -e 's/\r\n/\n/;' dsdt.dsl
```

Después de corregir esto, vamos a compilarlo, pero nosotros ya no necesitamos la DSDT a pelo, si no que la necesitamos en formato cabecera C para el kernel (si no vas a añadir la tabla estáticamente, no deberías hacerlo así -en este COMO no se explica-)

```
iasl -tc dsdt.dsl
```

Ahora os generara un hex que lo guardaremos en alguna parte (estaría muy bien en la carpeta del núcleo)

(NOTA: En algunos kernels he visto que en el menuconfig se podía especificar un DSDT personalizado, pero como en mi caso no aparece, explicaré como se hace manualmente)

Para que el kernel lea nuestra DSDT personalizada debémos modificar el archivo drivers/acpi/osl.c y añadir estas 2 lineas al principio:

```
#define CONFIG_ACPI_CUSTOM_DSDT

#define CONFIG_ACPI_CUSTOM_DSDT_FILE " RUTA_AL_FICHERO_HEX"
```

Ahora recompilamos y jugamos al tuxracer mientras compila xD

6. Apreciando los cambios

Desgraciadamente arreglar la DSDT no es la solución definitiva, todavía no tiene porque irnos todo perfecto pero no está mal.

En mi caso noté las siguientes mejoras (comentad vuestras experiencias y las añadiré)

- En la información de la batería me salian nuevos datos (si en "last full capacity" os sale 0 no os asusteis, desconectad el portatil de la red -con batería claro xD- y se actualizará)

- Puedo encender las 2 velocidades del ventilador (antes solo podia la más potente)

- Ahora no se me repiten algunos eventos (aveces me salian 2 veces cuando un evento se activaba y otras 2 cuando se desactivava -p.e pulsar y soltar el boton de apagado-)

- Cambian los trip points por defecto

PD: Agradecería cualquier opinión, crítica y mejora  :Very Happy: 

PD2: Agradecería MUCHO más que alguien traduciese este COMO a inglés y me lo enviase al mail (es mi nick en este foro + gmail@com) o lo postease aquí (mejor lo 1º)

Este documento esta bajo la Licencia Reconocimiento-CompartirIgual 2.5 España de Creative Commons

http://creativecommons.org/licenses/by-sa/2.5/es/Last edited by Alex14 on Sat Oct 08, 2005 8:39 pm; edited 2 times in total

----------

## focahclero

Hola, me parece muy interesante el "como". Sólo creo que haría falta una cosa para que estuviese perfecto... y sería si pudieses explicar al principio para qué querría alquien "Arreglar la DSDT"... no sé si es bueno mantener el suspense hasta el final  :Smile: 

Saludos,

----------

## Alex14

Tienes razón, añadido XD (que rapidez)

Aunque si lees la intro y uns los hilos lo puedes sacar ;D

----------

