Chose promis, chose due, voila ma modeste doc sur comment installé la distribution GNU/Linux Gentoo 2005.1 sur un portable Acer 1692WLMI.
Introduction
Pourquoi un tel guide ? Et bien, ce portable est vraiment sympathique, mais son ACPI pose un grand problème pour les utilisateurs de distributions GNU/Linux. Pour commencer, il faut la désactiver lors de l'installation, sinon le processus ne se lance même pas... Ensuite, sans support de l'ACPI, il est impossible d'avoir l'état de la batterie, des conflits sur les IRQ apparaissent, bref, c'est loin d'être la joie. Heureusement, il existe des gens qui ont corrigé ces problèmes et qui fournissent un correctif. Seul problème, l'application de ce correctif n'est pas la chose la plus facile et intuitive au monde. C'est pourquoi je me suis décidé à écrire un petit texte la dessus.
Pré-requis
Avant de pouvoir se lancer dans l'intégration du correctifs, il faut récuperer un certain nombre de fichiers. Je vais détailler la procédure pour la distribution Gentoo 2005.1, mais le principe reste valable pour n'importe quelle autre distribution (testé personnellement sur une Mandriva 2006 Power pack, Debian Sid).
Voila la liste :
- les sources du noyau courant
- le compilateur gcc
- Compilateur ACPI d'Intel
- Patchs du noyau pour incorporer la DSDT corrigée dans l'initrd du kernel et pour pour un éventuel problème avec l'inirtd
- DSDT corrigée
Etape 1 : le compilateur ACPI D'Intel
Au moment où ce guide est écrit, la version du compilateur Intel est acpica-unix-20050930.tar.gz. Pour le compiler, il faut :
- décompresser les sources : tar xvfz acpica-unix-20050930.tar.gz
- aller dans le répertoire compiler : cd acpica-unix-20050930/compiler
- lancer la compilation : make
En cas d'erreur de ce genre :
flex -i -PAslCompiler -oaslcompilerlex.c aslcompiler.l
cc -Wall -O2 -Wstrict-prototypes -D_LINUX -DACPI_ASL_COMPILER -I../include -c -o aslcompilerlex.o aslcompilerlex.c
aslcompiler.l: In function 'comment':
aslcompiler.l:847: error: 'yytext_ptr' undeclared (first use in this function)
aslcompiler.l:847: error: (Each undeclared identifier is reported only once
aslcompiler.l:847: error: for each function it appears in.)
make: *** [aslcompilerlex.o] Error 1
il faut installer une version plus vieille de flex - si tout se passe bien, on a un exécutable iasl
Etape 2 : Compiler la DSDT corrigée
Après avoir téléchargé la DSDT corrigée, on a un fichier ACER-Aspire_1692WLMi-S3A18-custom.asl.gz qu'il faut décompresser :
gunzip ACER-Aspire_1692WLMi-S3A18-custom.asl.gz
il faut ensuite copier le fichier ACER-Aspire_1692WLMi-S3A18-custom.asl dans le répertoire du compilateur Intel. Pour lancer la compilation :
./iasl -tc ACER-Aspire_1692WLMi-S3A18-custom.asl
Voila le résultat attendu
Intel ACPI Component Architecture
ASL Optimizing Compiler version 20050902 [Sep 20 2005]
Copyright (C) 2000 - 2005 Intel Corporation
Supports ACPI Specification Revision 3.0
ASL Input: ACER-Aspire_1692WLMi-S3A18-custom.asl - 6942 lines, 244315 bytes, 3200 keywords
AML Output: DSDT.aml - 27363 bytes 675 named objects 2525 executable opcodes
Compilation complete. 0 Errors, 0 Warnings, 0 Remarks, 1121 Optimizations
Après cela, on obtient deux fichiers
- DSDT.aml
- ACER-Aspire_1692WLMi-S3A18-custom.hex
Etape 3 : Intégrer la DSDT corrigée dans le noyau
Pour cela, il y a deux possibilités, selon la distribution utilisée et les patchs déjà appliqués au noyau. Je vais détailler celle basée sur l'inirtd, qui me semble la plus pratique.
Quelques vérifications s'imposent au niveau de la configuration du noyau :
- support de l'initrd et du ramdisk en dur dans le noyau
Device Drivers --->
Block Devices --->
<*> RAM disk support
[*] Initial RAM disk (initrd) support - si vous avez déjà la partie suivante, il n'est pas nécessaire de patcher les sources du noyau :
Power management options (ACPI, APM) --->
ACPI (Advanced Configuration and Power Interface) Support --->
[*] Read DSDT from initrd
Si non, il faut patcher les sources avec le patch acpi-dsdt_initrd- téléchargé au début. - si un fichier initramfs est utilisé, il faut patché les sources avec le patch acpi-dsdt-initramfs-fix pour éviter un problème de kernel panic - ce patch ne semble plus s'appliqué sur les sources du noyau 2.6.14
- il faut recompiler le noyau en activant les nouvelles options si un des patches a été appliqué ou si une des options était manquante. Sinon, on peut passer à la génération de l'initrd
Si aucun initrd n'est utilisé, il suffit de copier le fichier DSDT.aml dans /boot et de modifier le fichier de configuration du bootloader en ajoutant une ligne pour l'initrd :
Exemple pour GRUB :
initrd=/boot/DSDT.aml
-Si un initrd est deja utilisé, il va falloir le modifié. Avant tout, il faut faire une copie de l'initrd actuel. Ensuite, il faut :
- ajouter une signature DSDT à la fin de l'initrd : echo -n "INITRDDSDT123DSDT123" >> /boot/le_bon_fichier_initrd
- insérer la DSDT modifiée à la fin de l'initrd : cat /chemin/vers/DSDT.aml >> /boot/le_bon_fichier_initrd
Au prochain redémarrage de la machine, le noyau va lire la DSDT depuis le fichier initrd et incorporer les modifications. Le message suivant "Looking for DSDT in initrd ..." devrait apparaitre.
Dernière touche, il faut modifier la configuration du chargeur de démarrage afin d'ajouter noapic comme paramêtre au noyau.
Quelques lien qui m'ont été utiles :
