ACPI
cette page contient surement des inexactions/Erreur (je me base sur ce que j'ai compris et non sur une documentation stricte) et n'est pas complet. Je ne l'ai expérimenté que sur un pc portable, à voir si ça change sur des server ou pc fixe (tour)
Erreurs ACPI lors du boot
Ces messages d’erreur sont fréquents et dans la majorité des cas ne sont pas problématique.
Causes principales
UEFI obsolète
Beaucoup d’erreurs ACPI proviennent directement du firmware.
Solution simple : Mettre à jour votre bios (peut être compliquer si vous êtes sous linux, tous les fabricants ne fournisse pas la possibilité de mettre à jour le bios sous linux, vous devrez donc installer Windows pour le mettre à jour)
Appels ACPI vers du matériel inexistant
Linux essaye d’accéder à des composants définis dans l’ACPI mais physiquement absents sur le pc portable :
- Touchpad
- TrackPoint
Résultat :
[ 0.112751] ACPI BIOS Error (bug): Could not resolve symbol [\_SB.PC00.I2C0.TPD0], AE_NOT_FOUND (20240827/dswload2-162)
[ 0.112758] ACPI Error : AE_NOT_FOUND, During name lookup/catalog (20240827/psobject-220)
[ 0.112777] ACPI BIOS Error (bug): Could not resolve symbol [\_SB.PC00.I2C0.TPL1], AE_NOT_FOUND (20240827/dswload2-162)
[ 0.112700] ACPI Error : AE_NOT_FOUND, During name lookup/catalog (20240827/psobject-220)
Cela signifie simplement :
Le BIOS déclare un périphérique ACPI qui n’existe pas réellement.
Interpretation des messages d'erreur
[ 0.112751] ACPI BIOS Error (bug): Could not resolve symbol [\_SB.PC00.I2C0.TPD0], AE_NOT_FOUND (20240827/dswload2-162)
Linux cherche un périphérique ACPI (TPD0) déclaré par le BIOS, mais il n’existe pas dans l’arbre ACPI réel.
Je pense que c'est parce que le bios est le même pour beaucoup de pc et que tous ces pc non pas les mêmes composants du coup la distrib linux essaye de maximiser la compatibilité avec votre hardware et que Ducoup il essaye de trouver tous les composants déclarés par le bios même s'il n'existe pas.
Rappel :
si votre pc boot quand même alors ces erreurs n'ont pas besoin d'être retenue
Tant que :
- le clavier fonctionne
- le touchpad fonctionne
- le trackpoint fonctionne (si vous en avez un)
Alors tout vas bien
Solutions possibles
1 - BIOS
- Mettre à jour votre BIOS
2 - Niveau de logs
Masquer les messages en modifiant le démarrage du grub
Dans /etc/default/grub :
GRUB_CMDLINE_LINUX_DEFAULT="quiet loglevel=3"
n'a pas marchez pour moi
loglevel vous permet de donner le niveau de détail de log que vous souhaitez
| Valeur loglevel | Niveau noyau | Description | Effet au démarrage |
|---|---|---|---|
| 0 | KERN_EMERG | Système inutilisable | Messages critiques uniquement |
| 1 | KERN_ALERT | Action immédiate nécessaire | Presque silencieux |
| 2 | KERN_CRIT | Erreur critique | Très peu de messages |
| 3 | KERN_ERR | Erreurs | Messages d’erreurs |
| 4 | KERN_WARNING | Avertissements | Warnings visibles |
| 5 | KERN_NOTICE | Événements importants | Démarrage propre |
| 6 | KERN_INFO | Informations | Logs normaux |
| 7 | KERN_DEBUG | Debug complet | Tous les messages noyau |
tableau récupéré sur internet
3 - Correction propre (partie incertaine, a ne pas refaire sauf si vous avez peu de considération pour votre os)
Patch ACPI (DSDT/SSDT)
Objectif : supprimer ou corriger les appels ACPI invalides
Etape :
- Extraire les tables ACPI
- Décompiler les tables ACPI
- Commenter les
Scope()invalides - Commenter les appels vers les devices inexistants
- Recompiler les tables ACPI
- Charger via GRUB ou initramfs
Exemple :
Erreur (vous pouvez retrouver ces erreurs avec la commande sudo dmesg | grep -i AE_NOT_FOUND) :
[ 0.112751] ACPI BIOS Error (bug): Could not resolve symbol [\_SB.PC00.I2C0.TPD0], AE_NOT_FOUND (20240827/dswload2-162)
[ 0.112758] ACPI Error : AE_NOT_FOUND, During name lookup/catalog (20240827/psobject-220)
[ 0.112777] ACPI BIOS Error (bug): Could not resolve symbol [\_SB.PC00.I2C0.TPL1], AE_NOT_FOUND (20240827/dswload2-162)
[ 0.112700] ACPI Error : AE_NOT_FOUND, During name lookup/catalog (20240827/psobject-220)
Ce qui vas nous intéresser dans ce message est :
\_SB.PC00.I2C0.TPD0
\_SB.PC00.I2C0.TPL1
Ça nous permet de savoir quoi corriger.
Maintenant ouvrez un Shell et vérifier que les paquets suivants sont installer :
- acpica-tools
Première étape : Extraire les tables ACPI
sudo acpidump -o acpi.dat
Explication :
acpidumpvient du paquet acpica-tools et permet de lire les tables ACPI du BIOS-o acpi.datprécise le fichier de sortie (-o = outpout)
Maintenant on un fichier (acpi.dat) qui contient toute les tables ACPI ( le fichier est un binaire donc illisible).
Avant de le rendre visible on va extraire les différente table contenue dans acpi.dat.
acpixtract acpi.dat
Résultat (pour moi) :
DSDT - 355423 bytes written (0x00056C5F) - dsdt.dat
SSDT - 23118 bytes written (0x00005A4E) - ssdt1.dat
SSDT - 14614 bytes written (0x00003916) - ssdt2.dat
SSDT - 248 bytes written (0x000000F8) - ssdt3.dat
SSDT - 1915 bytes written (0x0000077B) - ssdt4.dat
SSDT - 8575 bytes written (0x0000217F) - ssdt5.dat
SSDT - 2079 bytes written (0x0000081F) - ssdt6.dat
SSDT - 17083 bytes written (0x000042BB) - ssdt7.dat
SSDT - 15812 bytes written (0x00003DC4) - ssdt8.dat
SSDT - 2928 bytes written (0x00000B70) - ssdt9.dat
SSDT - 262 bytes written (0x00000106) - ssdt10.dat
SSDT - 9564 bytes written (0x0000255C) - ssdt11.dat
SSDT - 3512 bytes written (0x00000DB8) - ssdt12.dat
SSDT - 51 bytes written (0x00000033) - ssdt13.dat
SSDT - 3318 bytes written (0x00000CF6) - ssdt14.dat
SSDT - 13056 bytes written (0x00003300) - ssdt15.dat
SSDT - 298 bytes written (0x0000012A) - ssdt16.dat
SSDT - 1739 bytes written (0x000006CB) - ssdt17.dat
SSDT - 1162 bytes written (0x0000048A) - ssdt18.dat
SSDT - 1162 bytes written (0x0000048A) - ssdt19.dat
SSDT - 651 bytes written (0x0000028B) - ssdt20.dat
SSDT - 454 bytes written (0x000001C6) - ssdt21.dat
SSDT - 902 bytes written (0x00000386) - ssdt22.dat
SSDT - 1236 bytes written (0x000004D4) - ssdt23.dat
SSDT - 2279 bytes written (0x000008E7) - ssdt24.dat
DSDT -> table principale
SSDT -> tables secondaires
Donc maintenant voici les différents fichiers que nous avons :
acpi.dat #fichier binaire qui contient toute les tables ACPI
dsdt.dat #fichier binaire qui contient la table principal ACPI
ssdt1.dat #fichier binaire qui contient une table secondaire
ssdt2.dat
ssdt3.dat
ssdt4.dat
ssdt5.dat
ssdt6.dat
ssdt7.dat
ssdt7.dsl
ssdt8.dat
ssdt9.dat
ssdt10.dat
ssdt11.dat
ssdt12.dat
ssdt13.dat
ssdt14.dat
ssdt15.dat
ssdt16.dat
ssdt17.dat
ssdt18.dat
ssdt19.dat
ssdt20.dat
ssdt21.dat
ssdt22.dat
ssdt23.dat
ssdt24.dat
Maintenant il faut rendre lisible tous ces fichiers. Grâce à cette commande ci-dessous on vas pouvoir les rendre lisible
iasl -d fichier.dat #transforme le fichier en code source lisible et modifiable.
Explication :
iasl(Intel ACPI Source Language compiler) c'est l'outil officiel pour compiler et décompiler l'ACPI-dpour décompiler
conseille, gardez une copie de chaque fichier que vous voulez modifier
Maintenant que nous avons nos fichier lisible et modifiable on vas essayer de ne pas tout casser.
Rappel on cherche :
- _SB.PC00.I2C0.TPD0
- _SB.PC00.I2C0.TPL1
Donc on va faire un petit grep pour trouver dans quel fichier les adresse ci-dessus sont :
grep -R "PC00.I2CO.TP" *.dsl
Résultat (pour moi) :
ssdt7.dsl:36: External (_SB_.PC00.I2C0.TPD0, DeviceObj)
ssdt7.dsl:37: External (_SB_.PC00.I2C0.TPD0._STA, MethodObj) // 0 Arguments
ssdt7.dsl:38: External (_SB_.PC00.I2C0.TPL1, DeviceObj)
ssdt7.dsl:39: External (_SB_.PC00.I2C0.TPL1._STA, MethodObj) // 0 Arguments
ssdt7.dsl:3101: Return (TD_P) /* \_SB_.PC00.I2C0.TPD0.TD_P */
ssdt7.dsl:3113: Return (TD_P) /* \_SB_.PC00.I2C0.TPD0.TD_P */
ssdt7.dsl:3165: Return (TD_P) /* \_SB_.PC00.I2C0.TPL1.TD_P */
ssdt7.dsl:3177: Return (TD_P) /* \_SB_.PC00.I2C0.TPL1.TD_P */
il est possible que d'autre fiche s'affiche, vérifier que la suite du motif correspond bien, dans notre cas D0 ou L1
Bon, bon, bon. Maintenant il nous reste plus qu'à commenter tout ce qui appel \_SB.PC00.I2C0.TPD0 et \_SB.PC00.I2C0.TPL1.
Honnêtement je ne sais pas ce qu'il faut modifier en plus, donc c'est ici que ce tuto s'arrête.
Ps: pour recompiler le fichier vous pouvez utiliser iasl -tc fichier.dsl
Ps: Ps: pour appliquer les changements je n'ai pas fini mes recherches, je crois qu'on peut passer par le grub ou initramfs