Suspend mit APM und ACPI

Aus LinuxUser 11/2004

Suspend mit APM und ACPI

Schlafzustände

Vor allem Laptop-Nutzer kennen das Problem: Um Strom zu sparen, wollen sie den Rechner nicht durchgehend laufen lassen, ihn aber auch nicht ständig ab- und wieder einschalten.

So praktisch tragbare Computer sind, einen Haken haben sie gemeinsam: Arbeiten Sie damit unterwegs, ist der Akku viel zu schnell leer. Abhilfe schaffen diverse Stromsparfunktionen: Sie reduzieren die Frequenz des Prozessors oder schalten Bildschirm und Festplatte aus. Trotzdem frisst der Laptop weiterhin Strom.

Die Lösung des Problems heißt Suspend: Dieser Modus schaltet alle Geräte außer Arbeitsspeicher und Prozessor ab; letzteren versetzt er in einen Sparzustand. So verringert sich der Stromverbrauch auf ein Minimum. Der Wechsel in den Suspend-Modus und zurück geschieht innerhalb einiger Sekunden.

APM und ACPI

Der schon etwas ältere Standard Advanced Power Management (APM) [1] stellt eine solche Suspend-Funktion zur Verfügung. Sie funktioniert gewöhnlich auch unter Linux reibungslos.

Seit etwa zwei Jahren verdrängt allerdings der neue Standard ACPI (Advanced Configuration and Power Interface) [2] APM immer mehr. Im Idealfall verfügen Laptops über beide Systeme und überlassen dem Benutzer die Wahl.

Die mitgelieferten Kernel aktueller Distributionen verfügen über die für APM nötigen Module. Sie versuchen aber zunächst, ACPI zu verwenden; nur wenn der Rechner ausschließlich APM kennt, verwenden sie es von sich aus. Wollen Sie trotz vorhandenem ACPI das zuverlässigere APM verwenden, erzwingen Sie dies beim Boot-Vorgang. Dazu genügen zwei Einträge in der Konfiguration des Bootloaders – bei den meisten Distributionen ist das inzwischen Grub. Hängen Sie in der Datei /boot/grub/menu.lst mit einem Texteditor der kernel-Zeile die Parameter acpi=off apm=on an. Der Eintrag sieht dann unter Suse beispielsweise so aus:

title  SuSE Personal 9.1
kernel (hd0,8)/boot/vmlinuz root=/dev/hda9 splash=silent desktop resume=/dev/hda5 showopts acpi=off apm=on
initrd (hd0,8)/boot/initrd

Nach dem nächsten Neustart überprüfen Sie den Erfolg in der Ausgabe des Befehls dmesg:

simon@thinkpad:~$ dmesg | grep -i apm
IBM machine detected. Enabling interrupts during APM calls.
Kernel command line: root=/dev/hda9 vga=791 splash=silent desktop resume=/dev/hda5 showopts apm=on acpi=off
apm: BIOS version 1.2 Flags 0x03 (Driver version 1.16ac)

Die letzte Zeile zeigt, dass das BIOS APM unterstützt. Um APM nun zu verwenden, benötigen sie das Programm apm, das sich bei den meisten Distributionen im Paket apmd befindet und gewöhnlich bereits bei der Installation eingespielt wird. Der Befehl apm -v gibt den Status ihres Akkus aus:

simon@thinkpad:~$ apm -v
APM BIOS 1.2 (kernel driver 1.16ac)
On-line, battery status high: 99%

Werkzeuge wie das wmbattery oder das KDE-Applet klaptop stellen die Ausgabe grafisch dar.

Erscheint bei der Ausgabe von dmesg die Meldung No APM support in kernel, haben Sie entweder die Boot-Parameter nicht korrekt eingegeben oder ihr PC unterstützt APM nicht.

Der Funktionstest

Läuft APM, ist es Zeit für einen Test der dazugehörigen Suspend-Funktion. Dazu wechseln Sie zunächst mit init 1 und anschließender Eingabe des root-Passworts in Runlevel 1 – den Single-User-Modus. Mit dieser Vorsichtsmaßnahme vermeiden Sie bei einem Fehlschlag Datenverlust. Das Kommando apm -s schickt nun den Laptop schlafen.

Je nach Modell wecken Sie ein Notebook wieder auf, indem Sie beispielsweise den Deckel aufklappen oder die Power-Taste drücken. Anschließend finden Sie den Rechner im gleichen Zustand wieder wie vor der Ruhepause, in unserem Test also im Single-User Modus.

Nach einem erfolgreichen ersten Test empfiehlt sich dasselbe Vorgehen im Multi-User-Modus, aber zunächst ohne grafische Oberfläche; unter Suse, Mandrake und Fedora erreichen Sie das im Runlevel 3, also mit dem Befehl init 3. Debian verwendet als Multi-User-Modus stets Runlevel 2. Den grafischen Display-Manager beenden Sie manuell, im Falle von KDM z. B. mit /etc/init.d/kdm stop.

Funktioniert APM Suspend auch bei diesem Versuch, loggen Sie sich grafisch ein und wechseln Sie erneut in den Suspend-Modus. Unter Debian starten Sie dazu den Display-Manager wieder mit /etc/init.d/kdm start, bei den anderen erwähnten Distributionen mit init 5.

Ob der Rechner tatsächlich schläft, lässt sich oft nicht leicht feststellen. Besitzern von IBM Thinkpads hilft das halbmondförmige Lämpchen, das während dem Übergang zum Suspend-Modus blinkt und nach dessen Erreichen leuchtet (Abbildung 1).

Abbildung 1: Thinkpads zeigen, ob der Laptop schläft oder nicht.

Abbildung 1: Thinkpads zeigen, ob der Laptop schläft oder nicht.

Bei den meisten Laptops sorgen jedoch nur Messgerät oder Stoppuhr für Gewissheit. Schicken Sie den Laptop schlafen und überprüfen Sie nach einiger Zeit mit apm -v, um wieviel Prozent die Akkuladung zurückgegangen ist.

Dabei überzeugen Sie sich gleichzeitig von der Effizienz des Suspend-Modus: Bei unserem Testgerät, einem IBM Thinkpad X21, schaffte der etwas ältere Akku, der im Betrieb noch etwa 90 Minuten durchhält, im Suspend-Zustand ganze 24 Stunden.

Fehlersuche

Die meisten Rechner erreichen und verlassen den APM-Suspend-Modus problemlos. Ist dem nicht so, kann das an einzelnen Kernel-Modulen liegen. Um das zu erkunden, lassen Sie sich als root mit dem Befehl lsmod alle geladenen Module anzeigen und entfernen Sie sie nach und nach mit rmmod Modulname. Nach jedem entfernten Modul probieren Sie, ob Suspend nun funktioniert.

Benutzer mit weitreichender Erfahrung haben zudem die Option, ihr BIOS zu aktualisieren. Bei Markenherstellern, die baugleiche Laptops über lange Zeit verkaufen, stehen die Chancen gut, hierdurch eine Verbesserung zu erzielen.

Manche Notebooks bieten zudem die Möglichkeit, den APM-Hibernate-Modus (Ruhezustand) an Stelle von Suspend zu verwenden (Kasten 1).

Kasten 1: Hibernate mit APM

Einige IBM Thinkpads, nämlich die mit einem Phoenix NoteBIOS, verfügen über ein besonderes Feature: Hibernate, auch Ruhezustand genannt. APM Hibernate funktioniert ähnlich wie Suspend. Der Unterschied liegt darin, dass das BIOS die Daten aus dem Arbeitsspeicher auf eine spezielle Partition schreibt. Dann schaltet sich das Notebook komplett aus und verbraucht keine Energie mehr, nicht einmal für den RAM. Beim Aufwachen lädt es dann die Daten von der Festplatte wieder in den Speicher.

Dazu benötigt APM Hibernate eine eigene primäre Partition die etwa 30 MByte grösser als der Arbeitsspeicher ist, sowie eine eigene Software. Da ein PC auf einer Festplatte nur vier primäre Partitionen verwenden kann, sollte man darauf schon bei der Installation des Betriebssystems achten. Ansonsten ist Nacharbeit mit einem Partiotionierungswerkzeug wie QtParted [3] nötig.

Haben Sie eine neue primäre Partition erstellt, führen Sie das Programm cfdisk aus. In der Partitionsliste wählen Sie mit den Pfeiltasten die erstellte Partition aus und wählen Sie über den Punkt [ Type ] den Typ 16 (Hidden Fat16). Anschließend schreiben Sie die Änderung mit [ Write ] auf die Festplatte.

Abbildung 3: Der Typ einer Hibernate-Partition ist "Hidden FAT16".

Abbildung 3: Der Typ einer Hibernate-Partition ist “Hidden FAT16”.

Nach einem Neustart legen Sie auf der neuen Partition ein FAT16-Dateisystem an und mounten Sie die Partition – in unserem Beispiel /dev/hda3.

mkfs.msdos /dev/hda3
mount -t vfat /dev/hda3 /mnt

Zum Erstellen der Hibernate-Datei benötigen Sie das Programm tphdisk[4] von der Heft-CD. Zum Kompilieren benötigen Sie den gcc-Compiler aus dem gleichnamigen Paket Ihrer Distribution. Aus dem Quell-Code erzeugen Sie nun das ausführbare Programm tphdisk:

gcc tphdisk.c -o tphdisk

Mit tphdisk legen Sie jetzt die benötigte Hibernate-Datei /mnt/save2dsk.bin auf der zuvor angelegten Partition an, als Parameter verwenden Sie die Größe der Partition in MByte. Diese erfahren Sie mit dem Befehl df -h.

./tphdisk 398 > /mnt/save2dsk.bin

Weiterhin benötigen Sie das Kernel-Modul thinkpad. Der Linux-Kernel enthält es im Standard zwar nicht, aber Suse und Mandrake liefern einen entsprechend erweiterten Kernel aus.

Unter Debian kompilieren Sie das Modul selbst: Installieren Sie das zu Ihrem Kernel gehörige kernel-headers-Paket sowie das Paket thinkpad-source. Dann wechseln Sie ins neue Verzeichnis /usr/src/kernel-headers-XXX und starten make-kpgk modules. Das generiert ein neues Paket /usr/src/thinkpad-modules-XXX.Custom.deb, installieren Sie es mit dpkg -i /usr/src/thinkpad-modules-XXX.Custom.deb. Der Befehl depmod -a liest die neuen Module ein, damit sie zum Gebrauch bereitstehen.

Suse lädt das Modul dann bei Bedarf automatisch, unter Mandrake und Debian geben Sie dazu den Befehl modprobe thinkpad ein. Um dies beim Start der letzteren beiden Distributionen automatisch zu erledigen, tragen Sie in der Datei /etc/modules in einer neuen Zeile thinkpad ein.

Hibernate nutzen Sie dann mit dem Programm tpctl aus dem gleichnamigen Paket. tpctl --px zeigt die über das Power-Management verfügbaren Informationen an. Mit tpctl -H wechseln Sie, als root ausgeführt, in den Hibernate-Zustand. Denselben Effekt hat die Tastenkombination [Fn+F12].

ACPI – ein Sorgenkind

Der Hauptgrund, dass sich ACPI zum neuen Standard aufgeschwungen hat, sind seine vielfältigen Möglichkeiten. Neben dem Energiesparen ist es zuständig für die Anzeige von Systemdaten wie der Prozessortemperatur und die Konfiguration von Hardware, darunter die automatisierte Steuerung des Lüfters. Mittlerweile haben einige PC-Hersteller APM komplett verbannt, so dass Benutzer nicht mehr die Wahl zwischen den beiden Systemen haben. Manche Laptops verweigern gar die Arbeit mit einem Betriebssystem ohne ACPI-Unterstützung. Dank der besseren Konfigurationsmöglichkeiten verbraucht ein funktionierendes ACPI-System auch weniger Strom. Es bietet also deutliche Vorteile gegenüber APM.

Die größere Funktionsvielfalt von ACPI stellt die Linux-Entwickler jedoch vor Probleme; vor allem weil viele Hersteller die ACPI-Spezifikationen nicht genau einhalten. Dadurch lassen sich auch die unter Linux bereits implementierten ACPI-Funktionen nicht mit jeder Hardware verwenden.

Das ACPI4Linux-Projekt [5] arbeitet seit dem Jahr 2001 an der Unterstützung von ACPI unter Linux. Auf der Homepage des Projekts befinden sich viele Anleitungen und ein Wiki (Abbildung 2) zum Austausch von Erfahrungen mit bestimmter Hardware. Zumdem gibt es auf der Seite eine “Blacklist” gänzlich inkompatibler Laptops.

Abbildung 2: Das ACPI4Linux-Wiki zeigt Fehler- und Erfolgsmeldungen.

Abbildung 2: Das ACPI4Linux-Wiki zeigt Fehler- und Erfolgsmeldungen.

Wie APM verfügt auch ACPI über einen Suspend-Modus. Die Spezifikation definiert sogar mehrere verschiedene Energiesparmodi, sie bezeichnet diese als S1 bis S5. Der Zustand S3 entspricht der Methode, alle Daten bis zum Aufwachen im Arbeitsspeicher zu verstauen und die restliche Hardware auszuschalten. S4 speichert wie APM-Hibernate die Daten statt im RAM auf der Festplatte und S5 beschreibt den ausgeschalteten Zustand.

Ein Schlafversuch mit ACPI

Beim ersten Test gehen Sie vor wie im APM-Abschnitt: Wechseln Sie zunächst in den Single-User-Modus mit init 1. Der Befehl, der dann den Computer in den Suspend-Modus S3 versetzt, hängt von Ihrer Kernel-Version ab. Beim mittlerweile gängigen Kernel 2.6 lautet er:

echo -n "mem" > /sys/power/state

Verwenden Sie noch Kernel-Version 2.4, geben Sie stattdessen ein:

echo -n "S3" > /proc/acpi/sleep

Den Schlafzustand zu erreichen, ist meist kein Problem, schwierig wird es erst beim Aufwachen; viele Laptops ignorieren den Druck auf die Power-Taste und das Aufklappen des Deckels beharrlich. Funktioniert es nicht, müssen Sie den Rechner manuell ausschalten, kalkulieren Sie deshalb beim Testen den Verlust nicht gespeicherter Daten ein und testen Sie erst im Single-User-Modus, dann im Multi-User-Modus ohne grafische Oberfläche und erst am Ende im grafischen Modus.

Derzeit benötigen Sie also eine Portion Glück, damit ACPI-Suspend auf Ihrem Laptop läuft. Experten finden in der Kernel-Dokumentation weitere Hinweise, wie es in Einzelfällen dennnoch funktioniert: Schalten Sie alle Treiber aus, die Sie nicht unbedingt benötigen, häufige Problemfälle sind das AGP-Modul agpgart und die USB-Module. Zudem empfiehlt sich die Verwendung des Dateisystems ext2, da es mit e2fsck über ein Prüfprogramm verfügt, das bei einem Absturz entstandene Fehler zuverlässig erkennt und korrigiert.

Oft lohnt sich auch die Installation der aktuellsten Kernel-Version und ACPI-Patches. Dazu müssen Sie aber warten, bis Ihr Distributor einen solchen Kernel bereitstellt oder selbst kompilieren. Das IBM Thinkpad X21 beispielsweise, das sich noch mit Kernel 2.6.7 weigerte, aus dem S3-Schlafzustand wieder aufzuwachen, funktioniert mit aktuellem Kernel 2.6.8.1 und dem zugehörigen Patch von [6] einwandfrei.

Funktioniert ACPI-Suspend, gibt es noch eine Hürde zu nehmen: Der Sound funktioniert nach dem Aufwachen bei vielen Geräten nicht mehr. Um diesen Fehler zu beheben, entfernen Sie vor dem Suspend alle ALSA-Module – ihre Namen beginnen mit snd – und laden Sie sie nach dem Aufwachen erneut. Ein Skript, das dies automatisiert, kann so aussehen:

/etc/init.d/alsa stop
modprobe -r snd_cs4281 snd_pcm_oss
sync
echo -n mem > /sys/power/state
modprobe snd_cs4281
modprobe snd_mixer_oss
modprobe snd_pcm_oss
/etc/init.d/alsa start

Dieses Skript stoppt zuerst das Sound-System. Dann entfernt es die ALSA-Module, schreibt mit sync alle Daten aus dem Zwischenspeicher auf die Festplatte und löst den Suspend-Vorgang aus. Nach dem Aufwachen lädt es die Sound-Module und startet den ALSA-Service wieder. Den Namen des Sound-Moduls – in unserem Beispiel snd_cs4281 – passen Sie im Skript Ihrer Hardware an. Beim Ausführen benötigen Sie root-Rechte; um das Skript anderen Benutzern zur Verfügung zu stellen, verwenden Sie Sudo [7].

Eine Enttäuschung – was nun?

In der Praxis haben also viele Laptop-Besitzer ein großes Problem, wenn sie ihren PC in den Ruhezustand versetzen möchten: APM funktioniert zwar meistens, ist aber nicht immer vorhanden, während ACPI unter Linux oft nicht arbeitet wie es soll.

Der Autor

Simon Rutishauser programmiert in C++, Java und Bash und wird bald beginnt demnächst ein Mikrotechnikstudium in Lausanne.

Glossar

Module

Der Linux-Kernel bietet die Möglichkeit, einzelne Funktionen nur bei Bedarf in den Speicher zu laden. Dazu dienen die Befehle “modprobe” zum Laden und “rmmod” zum Entfernen eines solchen Moduls.

BIOS

Das “Basic Input Output System” ist ein rudimentäres Programm, das der Computer nach dem Einschalten startet. Es ermöglicht die grundlegende Kommunikation mit der wichtigsten Hardware wie Prozessor, Arbeitsspeicher, Grafikkarte und Festplatte oder anderen Laufwerken.

Runlevel

Der Betriebsmodus des Systems. Üblicherweise bezeichnet Runlevel 1 unter Linux den Single-User-Modus für Wartungsarbeiten, Runlevel 6 startet den Computer neu und Runlevel 0 fährt ihn herunter. Dazwischen gibt es je nach Distribution Abstufungen, die verschiedene Dienste wie das Netzwerk oder die grafische Oberfläche starten oder beenden.

Infos

[1] APM: http://www.microsoft.com/whdc/archive/amp_12.mspx

[2] ACPI: http://www.acpi.info/

[3] QtParted: Hans-Georg Eßer, “Neu zugeschnitten”, LinuxUser 01/2004, S. 76 ff.

[4] tphdisk: http://samba.anu.edu.au/junkcode/#tphdisk

[5] ACPI4Linux: http://acpi.sourceforge.net

[6] Thinkpad Configuration Tool: http://tpctl.sourceforge.net

[7] Sudo: Heike Jurzik, “Neue Identität”, LinuxUser 02/2004, S. 80 ff., http://www.linux-user.de/ausgabe/2004/02/080-zubefehl/

LinuxUser 11/2004 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben