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

Posté par .
Tags : aucun
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) !
  • # Re: ACPI : modifier la table DSDT

    Posté par (page perso) . Évalué à 1.

    Dans le 2.6, on peut même la dsdt dans include/acpi et suffit ensuite d'inclure comme cela

    #include <acpi/dsdt.h>

    Quand on a une table corrigé, on l'envoi sur acpi.sf.net ! :D

    il existe un patch de gentoo qui modifie le fichier osl.c, à voir ...

    Dans mon cas, le BIOS phoenix semblait être une grosse merde, je n'avait pas le niveau de la batterie.

    après correction de la table d'acpi, effectivment, j'avait le niveau de la batterie,mais le kernel était instable, peut être à cause des deux warnings qui restaient ....
    pour info, c'était un ACER Aspire 1703 SCME (cf acpi.sf.net )
  • # Re: ACPI : modifier la table DSDT

    Posté par . Évalué à 1.

    Cette astuce est traitée beaucoup plus en détail, et bien mieux ici :

    http://forums.gentoo.org/viewtopic.php?t=122145%22%22(...)

    Voilà...
  • # nouvelle option du noyau

    Posté par (page perso) . Évalué à 1.

    Depuis le noyau 2.6.9, on peut charger une table DSDT externe sans avoir à patcher le noyau à chaque fois.
  • # Re: nouvelle option du noyau (suite)

    Posté par . Évalué à 1.

    Je peux pas répondre au poste ci-dessus:

    Vous ne pouvez plus rajouter de commentaires! (trop vieux)
    , donc je réponds ici :-(

    http://gaugusch.at/kernel.shtml(...)
    What is the ACPI DSDT in initrd patch?

    This patch is intended for people who like to hack their DSDT and don't want to recompile their kernel after every change.
    To find out what a DSDT is, go to the ACPI page. The ACPI project integrates ACPI support into the linux kernel. To put the DSDT into the initrd you must apply one of the following patches:
    [...]
    SuSE 9.0 already includes this patch in the default kernel! See /etc/sysconfig/kernel for more information (ACPI_DSDT=...). MandrakeLinux 9.2 and later also includes this patch.

Suivre le flux des commentaires

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