Space Menu Home Downloads Kiosk Newbie Area Documentation Knowledge Base E-Training Forum Blogs Chat RPMs Farm Linux Events
HistoryHistory |
View
Code | XML |
Help
XWiki Syntax |


Certains portables possèdent une table DSDT bugguée.

Mais qu’est ce qu’une table DSDT ? C’est une table dans le BIOS (logiciel de la carte mère) qui indique au système d’exploitation comment utiliser le matériel, et sur un portable plus particulièrement comment détecter et gérer la batterie ainsi que la mise en hibernation, la suspension etc… Bref une table DSDT bugguée signifie souvent sous Linux pas de détection de la batterie, et impossibilité d’utiliser la gestion d’énergie afin de faire tenir la batterie plus longtemps. Bref pas de gestion de l’ACPI.

La non détection de la batterie sur un portable est assez gênante, au pire le système d’exploitation se coupera brutalement de suite croyant n’être plus alimenté, au mieux il lâchera de manière toute aussi brutale lorsque la batterie sera vide, sans avertissement. Au mieux vous perdez les fichiers sur lesquels vous travailliez, au pire vous endommagez le système à force d’arrêts brutaux. Bref permettre une gestion correcte de l’ACPI sur un portable est important. C’est pour cela qu’il existe un site sur lequel on peut télécharger les tables DSDT corrigées proposées par des bénévoles de la communauté : http://acpi.sourceforge.net/dsdt/view.php

Dans la section DSDT de ce site vous pouvez chercher en fonction de la marque et du modèle de votre portable si une table DSDT corrigée. Celle de l’Acer Aspire 1641 s’y trouve depuis peu, et c’est sur celle-ci que se base l’exemple de ce tutoriel. Avec l’autorisation de Maxime Guillaud qui a eu la gentillesse de me transmettre cette table DSDT corrigée, je la met aussi en téléchargement ici afin de faciliter l’obtention de celle-ci pour les non anglophones, qui pourraient se sentir un peu perdus sur le site de Sourceforge.

Cette table se présente sous la forme d’un fichier possédant une extension en .asl. Celle de l’Acer Aspire 1641 ici proposée s’appelle ACPI-DSDT.asl (attention aux majuscules Linux faisant la distinction minuscules/majuscules). Vous pouvez le mettre pour le moment dans votre dossier personnel.

Afin d’éviter de devoir retélécharger ce fichier en cas de problème nous allons travailler sur une copie de celle-ci. Une petite commande cp ACPI-DSDT.asl DSDT.asl va nous permettre de travailler sur la copie de la table nommée plus simplement DSDT.asl. Mettons ACPI-DSDT.asl à l’abri dans un dossier de sauvegarde et commençons à installer ce qu’il nous faut pour travailler.

Il nous faut tout d’abord installer flex et Bison. Pour cela on utilise le gestionnaire de logiciels de Mandriva ou urpmi une fois configuré avec les sources internet. Ces deux logiciels sont nécessaires pour la compilation correcte du compilateur Intel Iasl dont nous allons avoir besoin pour compiler notre table DSDT.

Et oui notre table DSDT n’est pas utilisable telle quelle nous devons la compiler pour pouvoir l’utiliser et le compilateur d’Intel est celui générant le moins d’erreur, bref celui qui compile le mieux les tables DSDT. Ce compilateur est téléchargeable ici : http://www.intel.com/technology/IAPC/acpi/downloads.htm

Pour Linux il nous faut utiliser le paquetage de sources Unix comme indiqué en bas de la page et cliquer sur ce lien : Unix ACPI CA - Unix Build Environment (.TAR.GZ 774k)

Après acceptation de la licence d’utilisation vous pouvez télécharger le fichier au format tar.gz , dont le nom est acpica-unix-20060210.tar.gz pour la version actuelle (le nom sera donc à adapter dans les commandes suivantes si vous téléchargez une version ultérieure).

Nous allons maintenant décompresser l’archive et compiler Iasl. Pour cela vous n’avez pas besoin d’être root :

tar -xzf acpica-unix-20060210.tar.gz

cd acpica-unix-20060210/compiler

make

Normalement vous ne devriez pas avoir d’erreurs. Si c’est le cas c’est qu’il vous manque quelque chose (vérifiez que vous avez bien flex et Bison d’installés). Les messages d’erreurs sont assez explicites et vous indiqueront ce qu’il vous manque. Une fois la compilation réussie un fichier nommé iasl apparaît dans le dossier acpica-unix-20060210/compiler.

Déplacez vous dans ce dossier et tapez dans une console la commande suivante :

./iasl -on /chemin/vers/DSDT.asl

Adaptez le chemin selon l’endroit où vous aurez placé DSDT.asl. Si tout se passe bien le rapport de compilation vous indique 0 erreurs et 1 message affiché et vous indique avoir créer le fichier DSDT.aml. Il doit aussi normalement créer un fichier DSDT.hex. Ces deux fichiers sont créés dans le même dossier que iasl.

C’est DSDT.aml qui nous intéresse. Nous allons le copier dans le dossier /boot avec la commande suivante à faire en tant que root : cp /chemin/vers/DSDT.aml /boot

Maintenant il nous faut intégrer cette table DSDT corrigée et compilée à l’image de démarrage du noyau c’est à dire initrd-VERSION.img. Pour cela nous allons éditer en tant que root avec Vi ou autre éditeur de texte (comme kwrite) le fichier /sbin/mkinitrd. Vous devriez voir vers la 52ème ligne du fichier les lignes suivantes :

DEFAULT_DSDT_FILE="/boot/dsdt.aml"

dsdt_file=""

Nous allons les modifier afin d’utiliser notre table DST, ce qui nous donne :

DEFAULT_DSDT_FILE="/boot/DSDT.aml"

dsdt_file="/boot/DSDT.aml"

Attention dans cet exemple bien penser au fait que dsdt.aml et DSDT.aml sont deux fichiers différents pour Linux, donc bien penser aux majuscules. Enregistrez les modifications.

L’intérêt de modifier ce fichier, qui est en fait une commande système, est de ne pas avoir à refaire ces manipulations à chaque changement de noyau. En effet sauf pour le noyau actuel pour lequel il faut faire toutes les manipulations, tous les noyaux installés plus tard auront une image de démarrage déjà modifiée pour gérer l’ACPI grâce à la modification appliquée à mkinitrd. En effet c’est cette commande qui crée à chaque installation d’un nouveau noyau l’image de démarrage mémoire appropriée.

Nous allons maintenant créer un noyau et une image de démarrage différents des noyaux et images normaux afin de ne prendre aucun risque d’endommager le système. Afin de bien les distinguer nous allons leur donner des noms explicites terminant en .acpi (cette extension ne gêne en rien le démarrage du système).

Commençons par le noyau. Prenons le dernier noyau Mandriva en date soit le 2.6.12-17mdk, nous allons en faire une copie avec le nom spécial. Pour cela tapez en tant que root les commandes suivantes :

cd /boot

cp vmlinuz-2.6.12-17mdk vmlinuz-2.6.12-17mdk.acpi

Maintenant il nous faut créer l’image de démarrage gérant l’ACPI. Pour cela nous allons utiliser la commande mkinitrd (et oui celle la même que nous avons modifier plus haut). Notre noyau spécial ACPI n’étant qu’une copie du noyau version 2.6.12-17mdk dans notre exemple nous allons pouvoir construire notre image de démarrage sur ce dernier avec la commande suivante à taper en tant que root :

mkinitrd /boot/initrd-2.6.12-17mdk.img.acpi 2.6.12-17mdk

(La structure exacte de la commande est mkinitrd fichier_initrd_à_créer version_du_noyau_à_utiliser).

Pourquoi ne pas utiliser directement la version 2.6.12-17mdk.acpi du noyau ? Tout simplement car nous n’avons fait qu’une copie du noyau 2.6.12-17mdk et que nous n’avons pas fourni au système les sources de cette version .acpi du noyau, qui de toute façon sont identiques à celles du 2.6.12-17mdk. Donc pas la peine de se compliquer la vie à refaire aussi une copie des sources etc...

Après ces deux opérations vous devriez vous retrouver dans mon exemple avec deux nouveaux fichiers dans votre dossier /boot : vmlinuz-2.6.12-17mdk.acpi et initrd-2.6.12-17mdk.img.acpi. Là encore à adapter selon votre version du noyau utilisée, et les conventions que vous choisirez pour le nom de ces fichiers.

Maintenant il ne reste plus qu’à rajouter une entrée dans Lilo ou Grub pour ce noyau et cette image de démarrage. Vous pouvez le faire dans le centre de contrôle Mandriva ou à la main en éditant les fichiers de configurations (/etc/lilo.conf pour Lilo). Pour Lilo l’entrée pour ce système spécial ACPI devrait ressembler à çà :

image=/boot/vmlinuz-2.6.12-17mdk.acpi

label="MandrivaACPI"

root=/dev/hda1

initrd=/boot/initrd-2.6.12-17mdk.img.acpi

append="resume=/dev/hda5 splash=silent"

vga=788

La encore à adapter selon votre système et la façon dont vous avez partitionné (/dev/hda1 représentant la partition racine / et /dev/hda5 représentant la partition de swap dans mon exemple). Le nom d’étiquette MandrivaACPI devant vous permettre de clairement distinguer ce noyau et cette image spéciale ACPI des autres installés sur votre système.

Si vous éditez Lilo à la main n’oubliez pas de le relancer ensuite en root avec la commande suivante : lilo -v ; afin qu’il prenne en compte les changements. Installez ensuite acpi, acpitools ainsi qu’un logiciel comme KLaptop, gdesklet ou wmlaptop afin de pouvoir gérer l’ACPI et voir le niveau de batterie.

Il ne vous reste plus qu’à redémarrer et à l’invite de Lilo ou Grub sélectionner l’entrée spéciale ACPI, soit MandrivaACPI dans notre exemple. Si le système boote bien et que l’ACPI fonctionne vous devriez voir la batterie et son niveau de remplissage avec KLaptop, gdesklet, wmlaptop ou autre logiciel équivalent. Si tout marche il ne vous reste plus qu’à aller dans le Centre de Contrôle Mandriva, section Démarrage, dans "Configurer le comportement de démarrage du système", cliquer sur suivant et sélectionner dans Lilo ou Grub l’entrée spéciale ACPI comme entrée par défaut.

Origine de l'article : http://www.paganguild.org/linux-pret-cuire/index.php?option=com_content&task=view&id=15&Itemid=2

RSS
KB. HardwareHldsdt Last Author: Morigane  Date: 2006/04/22 18:56
Powered by XWiki
Copyright (c) 2006 Mandriva