Forum Astuces.divers [Terminal] ACPI : modifier la table DSDT

Posté par  .
Étiquettes : aucune
0
19
mar.
2004
Pour ceux qui ont des problèmes avec l'ACPI (genre un ordinateur qui ne s'éteint pas complètement), il peut être utile de modifier sa table DSDT.
La procédure que je vais décrire est celle que j'ai utilisée, avec un noyau 2.6.3 (mais elle doit fontionner avec tous les 2.6.x, ainsi que des 2.4.x... à confirmer...).

1°) Il faut télécharger IASL :
http://www.intel.com/technology/iapc/acpi/downloads.htm

2°) En root :
# tar xvzf iasl-linux-20030918.tar.gz
# cd iasl-linux-20030918

3°) Si votre ordinateur se trouve dans cette liste :
http://acpi.sourceforge.net/dsdt/tables
Dans ce cas, récupérez le fichier .asl.gz, et dé-gzippez le, compilez la table avec ces commande :
# gunzip /chemin/vers/machin.asl.gz
# mv /chemin/vers/machin.asl dsdt.dsl
# ./iasl -tc dsdt.dsl
et passez au (4).

Sinon :
# cat /proc/acpi/dsdt > dsdt
# ./iasl -d dsdt
IASL a désassemblé l'actuelle table DSDT, et généré un fichier "dsdt.dsl".
Essayez de le recompiler tel-que :
# ./iasl -tc dsdt.dsl
IASL va probablement afficher des errors et/ou warnings. Là, c'est à vous de jouer : éditez le fichier dsdt.dsl et corrigez les erreurs en vous aidant de ce document :
http://www.cpqlinux.com/acpi-howto.html#fix_broken_dsdt
Quand vous n'aurez plus d'erreur, passez au (4)

4°) Copiez le fichier dsdt.hex quelque part :
# cp dsdt.hex /usr/src/linux/drivers/acpi/tables/

5°) Modifiez le fichier /usr/src/linux/drivers/acpi/osl.c :
Au début du fichier, rajoutez ceci :
#include "/usr/src/linux/drivers/acpi/tables/dsdt.hex"
Et modifiez la fonction "acpi_os_table_override" pour qu'elle ressemble à ça :
acpi_status
acpi_os_table_override (struct acpi_table_header *existing_table,
struct acpi_table_header **new_table)
{
if (!existing_table || !new_table)
return AE_BAD_PARAMETER;
if (strncmp(existing_table->signature,"DSDT",4))
*new_table = NULL;
else *new_table = (struct acpi_table_header *)AmlCode;
return AE_OK;
}

6°) Recompilez votre noyau, et c'est bon !

Il y a d'autres méthodes (acpidump, méthode avec initrd), mais je ne les ai pas essayé... Merci de signaler si il y a une (des) erreur(s) !

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.