Cette page n'a pas encore d'étiquettes.
Apportez votre aide…

Ceci est une ancienne révision du document !



Page ancienne FIXME

Traduit par ZeBob, Sbrunner

Batteries ACPI

Certains ordinateurs portables n'affichent pas le statut de la batterie. Ce guide va vous montrer comment résoudre cet ennuyeux problème. Il y a beaucoup de messages sur les forum concernant ce sujet mais aucun ne vous montre comment résoudre facilement le problème.

Note: Le noyau d'Ubuntu contient déjà le correctif nécessaire au bon fonctionnenment des batteries, donc aucune recompilation de noyau n'est nécessaire dans ce guide!

Nous allons avoir besoin de compiler certaines choses, il nous faut pour cela le paquet build-essential. Nous avons aussi besoin des paquets flex-old (qui remplacera flex) et bison.

sudo apt-get install build-essential bison flex-old

Le DSDT (Differentiated System Description Table) se situe dans votre BIOS. Il sert à informer Linux de tous les composants de votre ordinateur. Le vôtre est manifestement désordonné, nous allons donc en trouver un nouveau.

Rendez vous à la page ACPI sur sourceforge et dans le menu sur la gauche cliquez sur DSDT puis sur View. Lorsque vous y êtes sélectionnez le fabriquant, le modèle et la version correspondant à votre BIOS. Sur la page que vous obtenez ensuite, vous pourrez télécharger un DSDT corrigé pour votre portable. Si le vôtre ne s'y trouve pas, allez voir les liens à la fin de ce document. S'il n'existe pas de DSDT pour votre version de BIOS, mettez votre BIOS à jour (cela pourrait déjà régler le problême).

Copiez l'adresse de téléchargement (pour la coller dans la console) et dans votre $HOME faites:

mkdir acpi
cd acpi
wget http://acpi.sourceforge.net/dsdt/tables/Manufacturer/Model/DSDT.asl.gz
gzip -d DSDT.asl.gz

(le lien après wget doit être remplacé par celui de votre DSDT)

Le DSDT doit être compilé. Pour cela nous avons besoin d'un compilateur spécial d'Intel. Téléchargez les sources Unix ici

vous avez deux solutions pour installer iasl:

sur Ubuntu 6.10 vous pouvez l' installer avec apt-get (depots multiverse et universe activés), la version installée est plus fiable qu' avec l' installation par les sources dicté ci dessous. En console :

  sudo apt-get install iasl

ou à partir des sources

wget http://www.intel.com/technology/iapc/acpi/downloads/acpica-unix-20050624.tar.gz
tar zxf acpica-unix-20050624.tar.gz
cd acpica-unix-20050624/compiler
make
cp iasl ../..
cd ../..

Si le make n'a pas fonctionné il se peut que bison ne soit pas installé ou que vous ayez encore flex au lieu de flex-old.

Puisque les versions 2005 d'iasl sont plus restrictives que les anciennes versions, il est possible que votre DSDT ne se compile pas. Vous pouvez toujours essayer de trouver une ancienne version d'iasl (je n'ai pas réussi) ou corriger votre DSDT vous-même (ce que je vais expliquer maintenant).

cp dsdt.asl yourdsdtfile.asl # sauvegarde
./iasl -tc dsdt.asl          # compilation

Si tout fonctionne correctement, vous devriez obtenir 0 erreur, quelques avertissements et deux nouveaux fichiers : un fichier .hex et un fichier .aml. Dans le cas contraire, de nombreux messages d'erreurs vous disant qu'une "ResourceSource string est manquante" (missing) s'afficheront. Ces erreurs sont facilement corrigeables. Gardez ouverte la fenêtre avec les erreurs de compilation pour avoir les numéros de ligne des erreurs.

Voici à quoi ressemblent les erreurs:

dsdt.asl  1028:                     0x0100, 0x00)
Error    1094 -                                 ^ Missing ResourceSource string (required)
dsdt.asl  1034:                     0x00000CF8, 0x00)
Error    1094 -                                     ^ Missing ResourceSource string (required)
dsdt.asl  1041:                     0x0000F300, 0x00)
Error    1094 -                                     ^ Missing ResourceSource string (required)

Ouvrons le fichier .asl et regardons à la ligne 1028.

gedit dsdt.asl&

Il doit ressembler à:

1023  WordBusNumber (ResourceProducer, MinFixed, MaxFixed, PosDecode,
1024      0x0000, /* Address Space Granularity */
1025      0x0000, /* Address Range Minimum */ 
1026      0x00FF, /* Address Range Maximum */
1027      0x0000, /* Address Translation Offset */
1028      0x0100, 0x00)

Nous devons simplement enlever le 0x00 pour que la ligne 1028 ressemble à:

1028      0x0100)

Répétez cette opération pour toutes les erreurs Missing ResourceSource string (elles devraient toutes être à la même position), enregistrez le fichier et fermez gedit. D'autres erreurs peuvent se présenter, notamment concernant des fichiers à inclure. Par exemple, pour un Acer TM4000, des fichiers du patch http://sourceforge.net/projects/sbs-linux/ ont été nécessaires. Maintenant compilez de nouveau avec la commande ./iasl -tc dsdt.asl

Il se peut également que les fins de lignes posent problème si le fichier est au format DOS (<CR><LF>). Si tel est le cas vous obtiendrez un très grand nombre d'erreurs (en fait une par ligne) du style :

DSDT.asl   204:         Else
Error    1094 -             ^ Invalid character (0x0D), expecting ASL keyword or name

DSDT.asl   205:         {
Error    1094 -          ^ Invalid character (0x0D), expecting ASL keyword or name

Le remède est le suivant:

sudo apt-get install sysutils
dos2unix dsdt.asl

Maintenant compilez de nouveau avec la commande ./iasl -tc dsdt.asl

Comme nous ne voulons pas endommager votre système fonctionnel, nous allons travailler sur une sauvegarde puis nous l'ajouterons à votre chargeur de boot.

sudo -s -H   # suivi du mot de passe de l'utilisateur
cp /boot/initrd.img-2.6.10-5-686 /boot/initrd.img-2.6.10-5-386.acpi
cp /boot/vmlinuz-2.6.10-5-686 /boot/vmlinuz-2.6.10-5-386.acpi
exit

Pour pouvoir démarrer à partir cette copie, nous devons ajouter une section correspondante dans le chargeur de boot Grub.

gedit /boot/grub/menu.lst&

Ajoutez une section qui ressemble à ceci (regardez les autres sections dans votre menu.lst afin de comparer)…

title           Ubuntu, kernel 2.6.10-5-386 Battery
root            (hd0,3)
kernel          /boot/vmlinuz-2.6.10-5-386.acpi root=/dev/hda4 ro quiet splash
initrd          /boot/initrd.img-2.6.10-5-386.acpi
savedefault
boot

…et placez-la où vous voulez qu'elle s'affiche dans le menu de démarrage.

Il ne nous reste plus qu'à ajouter le DSDT dans votre initrd.

echo -n "INITRDDSDT123DSDT123" >> /boot/initrd.img-2.6.10-5-386.acpi
cat DSDT.aml >> /boot/initrd.img-2.6.10-5-386.acpi
echo -n "INITRDDSDT321DSDT321" >> /boot/initrd.img-2.6.10-5-386.acpi

Ca y est! Redémarrez votre ordinateur et choisissez l'option de démarrage nouvellement créée. Si tout fonctionne correctement, vous pouvez en toute sécurité supprimer le dossier $HOME/acpi et modifier le menu de démarrage en conséquence (c'est-à-dire faire de la nouvelle option de démarrage celle par défaut).

Autre possibilité

(chez moi la première n'a pas marché :( )

Copier le fichier dsdt au bon endroit, puis reconfigurer le noyau Linux :

* Edgy, Feisty et Gutsy:

sudo cp dsdt.aml /etc/initramfs-tools/DSDT.aml
sudo dpkg-reconfigure linux-image-$(uname -r)

* Breezy et Dapper :

sudo cp dsdt.aml /etc/mkinitramfs/DSDT.aml
sudo dpkg-reconfigure linux-image-$(uname -r)

* Hoary :

sudo cp dsdt.aml /etc/mkinitrd/DSDT
sudo dpkg-reconfigure linux-image-$(uname -r)

(Méthode postée à l'origine par xuzo ici : http://www.ubuntu-es.org/node/4164)

acpi.sf.net - ACPI Homepage
Gentoo Forums - How to fix a DSDT yourself
Intel ACPI - Download iasl compiler
gaugusch.at - the kernel patch to make this work

Il est aussi possible de trouver des fichiers DSDT au format asl ici : http://acpi.sourceforge.net/dsdt/view.php

Vous êtes bien évidement invité à contribuer votre DSDT si vous possedez une image dsdt fonctionnelle.

Après recompilation de la DSDT j'avais perpétuellement une erreur au reboot :

kernel panic - not syncing: VFS: Unable to mount root fs on unknown block (0,0)

Voici la manipulation à faire pour corriger ce problème :

  1. copier la DSDT fraîchement compilée dans /etc/mkinitramfs
cp DSDT.aml /etc/mkinitramfs/DSDT.aml
  1. faire un mkinitramfs -o <nomdunouveauinitrd>
mkinitramfs -o DSDTok
  1. copier ce nouveau fichier dans /boot
cp DSDTok /boot/DSDTok
  1. configurer le menu.lst de grub correctement. C'est-à-dire comme ceci :
title           Ubuntu, kernel 2.6.10-5-386 Batterie
root            (hd0,3)
kernel          /boot/vmlinuz-2.6.10-5-386 root=/dev/hda4 ro quiet splash
initrd          /boot/DSDTok
savedefault
boot

(n'oubliez pas de mettre la bonne version de votre noyau).
Et voilà, c'est fini !
A noter que les fichier .acpi créés plus haut ne sont plus d'aucune utilité.

  • tutoriel/comment_afficher_statut_batterie_acpi.1226311877.txt.gz
  • Dernière modification: Le 18/04/2011, 14:51
  • (modification externe)