View previous topic :: View next topic |
Author |
Message |
Alex14 n00b
Joined: 20 Jun 2005 Posts: 20
|
Posted: Fri Jul 22, 2005 11:40 am Post subject: [COMO] Arreglar la DSDT a partir del Windows preinstalado |
|
|
Í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:
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:
Code: | cat /proc/acpi/dsdt > dsdt.dat |
Ahora vamos a obtener el ASL
Y vamos a recompilarlo para ver cuantos errores hay
Ahora en la ultima linea nos saldrán los errores, me salen 18
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)
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:
Code: | 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-)
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:
Code: | #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
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 |
|
Back to top |
|
|
focahclero Guru
Joined: 02 Jan 2004 Posts: 554
|
Posted: Fri Jul 22, 2005 12:37 pm Post subject: |
|
|
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
Saludos, _________________ focahclero
Registered Linux User #352648. Get Counted! http://counter.li.org
[TEMA] Descripción problema (estado) |
|
Back to top |
|
|
Alex14 n00b
Joined: 20 Jun 2005 Posts: 20
|
Posted: Fri Jul 22, 2005 12:44 pm Post subject: |
|
|
Tienes razón, añadido XD (que rapidez)
Aunque si lees la intro y uns los hilos lo puedes sacar ;D |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|