Envoyer des signaux ACPI

Envoyer des signaux ACPI

Signaux déjà gérés

Certains signaux ACPI sont gérés proprement à l'aide de fichiers spéciaux. Le plus connu est utilisé pour gérer les niveaux de sommeil du système.

Niveaux de sommeil du système

Il s'agit du fichier /sys/power/state (anciennement /proc/acpi/sleep). Si on lit ce fichier, on obtient les différents états disponibles. Avec l'ancienne interface, on les récupère sous la forme "S0 S3 S4 S5", avec la nouvelle interface, on les récupère sous forme plus lisible (par exemple "mem disk")
Pour basculer le système dans un des états disponible, il suffit d'écrire le nom de l'état dans le fichier. Avec l'ancienne interface : # echo -n "1" > /proc/acpi/sleep pour passer en état S1.
Avec la nouvelle interface : #echo -n "disk" > /sys/power/state
(Le flag -n pour echo permet de ne pas rajouter de saut de ligne après la chaine de caractères affichée.) Par exemple pour mettre le système en veille, echo -n mem >/sys/power/state

Signaux personnalisés

Parfois certains signaux ne sont pas déjà gérés par des fichiers spéciaux dans /proc/acpi/, et il faut pouvoir effectuer l'appel ACPI a la mano.
Un module pour le noyau a été développé, qui permet d'émettre des appels ACPI directement en les écrivant dans un fichier spécial (/proc/acpi/call). Le module est disponible sur github Le code du module est assez court, puisque celui-ci se borne à être une interface facilement exploitable par l'utilisateur. Le module crée un fichier spécial /proc/acpi/call et y attache deux callbacks, un appelé à l'écriture du fichier, qui exécute l'appel ACPI, l'autre, appelé à la lecture du fichier, qui renvoie le résultat du dernier appel exécuté.
Comme pour la modification de la table DSDT à chaud, cette méthode est pratique pour du debug, mais il n'est pas recommandé de la conserver une fois les appels ACPI nécessaires identifiés : la création de fichiers spéciaux dans /proc/acpi/ est relativement aisée, et permet contraindre un peu les appels passés.
Ce module est utilisé entre autres pour exploiter les possibilités des cartes graphiques hybrides. Ces cartes gèrent un fonctionnement double : soit la carte est pleinement exploitée, soit un chipset graphique moins performant, mais aussi plus économe. Certains sont déjà gérés par vga_switcherooo (qui fournit un fichier spécial dans /sys/kernel/debug/vgaswitcherooo, ce qui permet de changer proprement de mode), mais pour d'autres, il faut faire les appels à la main.

Sources

Page github du module acpi_call
Gestion des cartes hybrides
États de sommeil

Comments