URL: https://linuxfr.org/forums/astucesdivers/posts/terminal-acpi-modifier-la-table-dsdt Title: [Terminal] ACPI : modifier la table DSDT Authors: Yaz Date: 2004年03月19日T23:52:07+01:00 Tags: Score: 0 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) !