Im Tiefschlaf
Software Suspend
Kernel patchen
Auf der Heft-CD finden Sie den Patch der Version 2.0.0.105 für Kernel 2.6.8.1 in der Datei software-suspend-2.0.0.105-for-2.6.8.1.tar.bz2. Auch Version 2.0.0.109 liegt im selben Verzeichnis, aber in unseren Tests erwies sich 2.0.0.105 als weniger problematisch. Auf Grund der hohen Entwicklungsgeschwindigkeit kann sich ein Blick nach neuen Versionen auf die Download-Seite lohnen. Auch ältere Patches sind hier noch zu finden.
Zudem finden Sie dort das Paket Hibernate, das Konfigurationsdateien sowie das Skript hibernate, das den Schlafzustand auslöst, enthält. Installieren Sie es als root mit rpm -Uvh hibernate-0.98-1.i386.rpm, unter Debian verwenden Sie dpkg -i hibernate_0.98-1_all.deb.
Die aktuellen Kernel-Quellen der Version 2.6.8.1 liegen auf der Heft-CD im Pfad LinuxUser/kernel-2.6.8.1. Wechseln Sie als root ins Verzeichnis /usr/src/ und entpacken Sie zunächst den Kernel mit tar xjf linux-2.6.8.1.tar.bz2. Dann folgt der swsusp2-Patch mit tar xjf software-suspend-2.0.0.105.tar.bz2.
Nun erweitern Sie den Original-Kernel um den Patch. Wechseln Sie ins Verzeichnis /usr/src/linux-2.6.8.1/ und geben Sie den Befehl ../software-suspend-2.0.0.105-for-2.6.8.1/apply ein. Das Skript bietet die Möglichkeit, einige Extras zu verwenden. Diese benötigen Sie meist nicht, so dass Sie die verneinende Voreinstellung mit [Enter] beibehalten. Läuft alles nach Plan, erhalten Sie folgende Ausgabe:
/usr/src/linux-2.6.8.1 # ../software-suspend-2.0.0.105-for-2.6.8.1/apply Apply KDB patches (for serious debugging capabilities) [yN]? Apply Bootsplash patches (includes bootsplash.org patch) [yN]? Apply Win4Lin support patches [yN]? Applying 20-software-suspend-linux-2.6.8.1-rev1-whole … Applying 21-software-suspend-linux-2.6.8.1-rev2-incremental … Applying 21-software-suspend-linux-2.6.8.1-rev3-incremental … Applying 30-software-suspend-core-2.0.0.104-whole … Applying 31-software-suspend-core-2.0.0.105-incremental … All happy!
Als nächstes konfigurieren Sie Ihren neuen Kernel. Um von der aktuell verwendeten Einstellungen auszugehen, kopieren Sie die Konfigurationsdatei des aktuell verwendeten Kernels ins neue Kernel-Verzeichnis mit cp /boot/config-X /usr/src/linux-2.6.8.1/.config. Dabei ersetzen Sie das X durch den Namen Ihrer Kernel-Version.
Anschließend passen Sie die Konfiguration Ihren Wünschen an. Haben Sie das Paket ncurses-devel bzw. ncurses-dev installiert, bringt Sie das Kommando make menuconfig in die textmenügeführte Konfigurationsoberfläche. Mit den Pfeiltasten und [Enter] navigieren Sie durch die einzelnen Punkte. Wählen Sie den Menüpunkt Power management options (ACPI, APM) aus und deaktivieren Sie dort die Einträge Software Suspend (EXPERIMENTAL) und Suspend-to-Disk Support mit der Taste [n]; sie stehen für die beiden anderen Software-Suspend-Systeme.
Darunter finden Sie das Menü Software Suspend 2. Mit [y] aktivieren Sie hier die Punkte Software Suspend 2, Swap Writer, LZF image compression, Text mode console support und Compile in debugging output. Die letzte Option ermöglicht ausführlichere Debugging-Ausgaben (Kasten 1), das hilft bei der Fehlersuche. Möchten Sie keine weiteren Änderungen vornehmen, verlassen Sie durch dreimaliges [Alt+e] die Kernelkonfiguration.
Den konfigurierten Kernel kompilieren Sie nun mit dem Aufruf make bzImage && make modules modules_install. Je nach Prozessorgeschwindigkeit und Konfiguration dauert dies bis zu einigen Stunden. Den neuen Kernel kopieren Sie danach ins /boot/-Verzeichnis: cp arch/i386/boot/bzImage /boot/vmlinuz-suspend2.
Mit mkinitrd erstellen Sie eine zum neuen Kernel passende Initial Ramdisk, es sei denn Sie haben alle zum Lesen des Wurzeldateisystems benötigten Treiber fest in den Kernel kompiliert.
Um den neuen Kernel zu starten, fügen Sie dem Boot-Loader einen neuen Eintrag hinzu, im Falle von Grub tragen Sie folgende Zeilen in die Datei /boot/grub/menu.lst ein, dabei passen Sie die Partitionen Ihrem System an:
title SuSE Linux - Software Suspend 2.0.0.105 kernel (hd0,1)/boot/vmlinuz-suspend2 root=/dev/hda2 vga=791 resume2=swap:/dev/hda6 initrd (hd0,1)/boot/initrd-suspend2
Unser Beispiel verwendet die Partition /dev/hda2 als Wurzeldateisystem. In der Grub-Sprache heißt sie hd0,1: hd0 steht für die erste Festplatte, also hda, und die 1 hinter dem Komma für die zweite Partition, also hda2. Als Swap-Partition verwenden wir hier /dev/hda6. Den Namen des Menüeintrags haben wir an die Suse-Konventionen angelehnt, hier steht Ihnen in der title-Zeile die Wahl frei. Damit finden Sie beim nächsten Neustart den Eintrag SuSE Linux - Software Suspend 2.0.0.105 in Ihrem Boot-Menü, mit dem Sie den neuen Kernel booten.
Konfiguration des Hibernate-Scripts
Damit Software Suspend 2 richtig funktioniert, werfen Sie einen Blick in die Konfigurationsdatei des Hibernate-Skripts unter /etc/hibernate/hibernate.conf. Die Voreinstellung stimmt in den meisten Fällen, folgende Zeilen sollten Sie aber hinzufügen:
RestartServices hotplug StopServices alsasound StartServices aumix LeaveXBeforeSuspend yes
Die Zeile RestartServices hotplug bewirkt, dass das Hibernate-Skript vor dem Suspend den Hotplug-Service stoppt und nach dem Resume wieder startet; damit funktionieren auch USB-Maus und -Tastatur anschliessend wieder problemlos. Die beiden folgenden Zeilen stoppen das Sound-System vor dem Suspend und stellen die Lautstärkeeinstellungen nach dem Resume wider her. LeaveXBeforeSuspend schließlich veranlasst das System, vor dem Suspend auf eine Textkonsole und anschließend wieder in den Grafikmodus zu wechseln. Unsere Tests zeigten andernfalls zahlreiche Probleme mit der Fensterdarstellung und der Tastatur.
Nach diesen Vorarbeiten bereiten Sie das System nun auf den ersten Test vor: Wechseln Sie in den Single-User-Modus mit init 1. Zum Einleiten des Suspend-Modus dient der Befehl hibernate. Funktioniert alles wie gewünscht, finden Sie das System nach dem Resume wieder im selben Zustand wieder wie zuvor. Danach starten Sie hibernate wie bei den anderen Suspend-Systemen beschrieben zunächst im Multi-User-Modus ohne grafische Oberfläche und anschließend mit ihr.
Kasten 1: Troubleshooting – wenn Software Suspend nicht funktioniert
Verschiedene Probleme können das Funktionieren von Software Suspend behindern, die meisten hängen nicht vom verwendeten System ab.
Bricht der Suspend-Vorgang ab oder bleibt gar das System stehen, überprüfen Sie, wenn nötig nach einem Neustart, mit Hilfe des Befehls free, ob auf Ihrer Swap-Partition genügend Platz frei ist:
simon@thinkpad:~$ free
total used free shared buffers cached
Mem: 386660 304692 81968 0 4316 171636
-/+ buffers/cache: 128740 257920
Swap: 975200 128 975072
Hier zeigt die letzte Zeile, dass auf der Swap-Partition noch etwa 975 MByte freier Platz zur Verfügung steht. Liegt das Problem nicht im mangelnden Speicherplatz, überprüfen Sie in den Boot-Parametern, ob Sie unter resume die richtige Partition eingetragen haben.
Nach einem fehlgeschlagenen Resume-Versuch, kann das System die Swap-Partition möglicherweise nicht mehr initalisieren; dann taucht sie in der free-Liste nicht auf. Um Ihre Swap-Partition erneut zu formatieren und zu reaktivieren verwenden Sie die Befehle mkswap /dev/hdaX und anschließend swapon /dev/hdaX.
Eine andere Fehlerquelle können Hardware-nahe Kernel-Module darstellen. Um sie ausfindig zu machen, wechseln Sie mit init 1 in den Single-User-Modus. Lassen Sie sich mit lsmod alle geladenen Module anzeigen und entfernen Sie mit modprobe -r möglichst viele davon. Insbesondere die Sound-, USB- und AGP-Module bereiten des Öfteren Probleme.
Hinweise auf die Fehlerquelle erkennen Sie häufig auch an der Ausgabe des Befehls dmesg nach einem erfolglosen Suspend-Versuch.
Bleibt Software Suspend 2 hängen, wenn die Fortschrittsanzeige (Abbildung 3) bereits auf dem Bildschirm zu sehen ist, bricht die [Esc]-Taste den Vorgang oft noch erfolgreich ab und bringt Sie zurück ins laufende System. Lässt sich an der Ausgabe von dmesg kein Fehler erkennen, aktivieren Sie die eingebauten Debugging-Funktionen:
thinkpad:~# cd /proc/software_suspend thinkpad:/proc/software_suspend# echo 3 > default_console_level thinkpad:/proc/software_suspend# echo 1 > log_everything thinkpad:/proc/software_suspend# echo 7 > debug_sections thinkpad:/proc/software_suspend# echo 1 > pause_between_steps
Anschließend starten Sie den Suspend-Vorgang erneut mit
sync && echo 1 > /proc/software_suspend/activate
Nun erhalten Sie eine ausführliche Bildschirmausgabe, jeden Schritt bestätigen Sie mit der Leertaste. Mit der individuellen Fehlermeldung gewappnet, suchen Sie auf der swsusp2-Homepage [2] unter den häufig gestellten Fragen (FAQ), im Wiki, den Archiven der Mailing-Listen und der restlichen Dokumentation nach Lösungswegen.
Funktioniert Software Suspend zwar im Single-User-Modus, aber nicht in dem Runlevel, den Sie gewöhnlich verwenden, verschuldet dies häufig ein bestimmter Dienst. Um den Missetäter zu erkennen, stoppen Sie vor einem Suspend-Versuch zunächst einen verdächtigen Dienst z. B. mit /etc/init.d/alsa stop. Hilft der erste Test nichts, stoppen Sie weitere Dienste einzeln und starten Sie jeweils wieder den Suspend-Modus, bis Sie wissen, wer das Missgelingen zu verantworten hatte.
Lässt sich kein Dienst finden, der das Software Suspend verhindert, liegt es stattdessen möglicherweise an einem Kernel-Modul. Lassen Sie sich mit lsmod alle geladenen Module anzeigen und entfernen Sie als root mit rmmod Modulname eines nach dem anderen.
Wenn eine bestimmte Hardware, beispielsweise Sound-Karte oder USB-Geräte nach dem Aufwachen nicht mehr funktioniert, stoppen Sie es manuell schon vor dem Suspend: Stoppen Sie als root den zuständigen Dienst und entladen Sie das dazugehörige Kernel-Modul. Nach dem Aufwachen starten Sie den gewünschten Dienst oder laden das Modul mit modprobe wieder in den Speicher. Lässt sich ein Modul nach dem Aufwachen nicht mehr laden, führt es in manchen Fällen zum Erfolg, es statt als Modul fest in den Kernel einzukompilieren.
Bei Software Suspend 2 hilft manchmal ein Umstieg auf eine ältere Version, da sich das Projekt noch im Entwicklungsstadium befindet. Insbesondere ab Version 2.0.0.93 hat es größere Änderungen gegenüber den Vorgängern gegeben. Zwar funktionieren seitdem einige Laptops zuverlässiger, aber möglicherweise kommt eine ältere Version mit Ihrer Hardware besser zurecht.
Bleiben Ihre Probleme trotz aller Lösungsversuche bestehen, haben Sie vielleicht mit einer der anderen Software-Suspend-Implementierungen oder mit einer Anfrage an die passende Mailing-Liste mehr Erfolg.



