Suspend

Aus Digiwiki

Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

allgemein

Der Schlafmodus ist hilfreich, da Energiesparend.

Die meisten Distributionen bringen acpi tools ( /etc/acpi ) von Haus aus mit, die auch häufig gut funktionieren (siehe [Ubuntu_suspend]).

Hinweis:
Nachdem das proc Interface deprecated ist wird wird nun
echo mem > /sys/power/state

verwendet.

Einstellungen

Über

/proc/acpi/wakeup

kann eingestellt werden wodurch das Aufwachen ausgelöst wird.

Device  S-state   Status   Sysfs node
LID       S3    *enabled
SLPB      S3    *enabled
IGBE      S4     disabled  pci:0000:00:19.0
EXP0      S4     disabled  pci:0000:00:1c.0
EXP1      S4     disabled  pci:0000:00:1c.1
EXP2      S4     disabled
EXP3      S4     disabled
EXP4      S4     disabled
PCI1      S4     disabled  pci:0000:00:1e.0
USB0      S3     disabled  pci:0000:00:1d.0
USB1      S3     disabled  pci:0000:00:1d.1
USB2      S3     disabled
USB3      S3     disabled  pci:0000:00:1a.0
USB4      S3     disabled  pci:0000:00:1a.1
EHC0      S3     disabled  pci:0000:00:1d.7
EHC1      S3     disabled  pci:0000:00:1a.7
HDEF      S4     disabled  pci:0000:00:1b.0

z.B.

echo "LID" > /proc/acpi/wakeup

schaltet das Aufwachen durch öffnen des Displays an oder aus.

Probleme

allgemein

http://www.thinkwiki.org/wiki/Problems_with_ACPI_suspend-to-ram

Display bleibt schwarz nach resume

Mit Wechsel auf eine Systemkonsole (<strg>F1) geht das Licht wieder an

echo DISPLAY_QUIRK_S3_BIOS=\"true\" >> /etc/pm/config.d/config

sollte das Problem beheben.

echo -n "mem" > /sys/power/state sagt was von belegt

ps -aux|grep echo

und entsprechende pid mit

kill -9 [pid hier]

grafikkartentreiber

in die

/etc/default/acpi-support

bei den zu entladenden Modulen fglrx hinzufügen

also z.B.:

MODULES="fglrx"

der fglrx Treiber wird dann kurz vor dem Suspend entladen, und beim resume frühzeitig wieder geladen

debugging

Suspend to Ram funktioniert nicht immer so wie es könnte. Häufige Gründe dafür sind Grafikkartentreiber und powerdemons.

Deswegen hier eine möglichst zeitsparende Schritt für Schritt Anleitung, falls Suspend2ram nicht funktioniert

testen ob suspend to ram generell auf der Maschine möglich ist

...geht am besten mit minimaler Konfiguration und möglichst wenig geladen Programmen, die Ärger machen können.

Dazu hängen wir beim Start von Grub an die Parameterzeile ein "init=/bin/bash" an, womit wir gleich in die Bash booten ohne zuvor irgendetwas anderes zu laden oder zu starten. also z.B.:

kernel          /vmlinuz-2.6.21.1 root=/dev/hda3 init=/bin/bash

sobald fertig gebootet ist mounten wir sys und proc mit

mount /sys
mount /proc

und testen dann suspend2ram mit

echo "mem">/sys/power/state

Der Rechner sollte nun in den suspend Modus wechseln (lüfter aus, keinerlei Festplattenaktivität).

Tut er das nicht, ist der Kernel mit den falschen Optionen gebaut worden (z.B. ohne Hot-pluggable CPU),oder Suspend2Ram wird vom dem Rechner nicht unterstützt.

Ist beim resume (nach drücken des Fn-Buttons oder öffnen und schließen des Displays oder...) die Konsole zugemüllt, oder das Display bleibt schwarz (jedoch Festplattenaktivität, wenn man blind "find /" eingibt"), so kann dies durch ein zusätzliches acpi_sleep=s3_bios,s3_mode in der Boot-Parameter-Zeile gelöst werden.

Als z.B.:

kernel          /vmlinuz-2.6.21.1 root=/dev/hda3 acpi_sleep=s3_bios,s3_mode

oder zum Testen:

kernel          /vmlinuz-2.6.21.1 root=/dev/hda3 acpi_sleep=s3_bios,s3_mode init=/bin/bash

Sollte nun der Suspend so funktionieren wie er sollte, steht zumindest fest, das der Rechner eigentlich suspend2ram kann.

ohne Grafikkartentreiber und unnötige angeschlossene Geräte

displaymanager beenden, und Grafikkartentreiber entfernen:

also für kdm und fglrx (offizieller ATI Treiber):

killall kdm
rmmod fglrx

suspend2ram testen mit

echo "mem">/sys/power/state

klappt jetzt alles, so ist wahrscheinlich der Grafikkartentreiber der Bösewicht.

treten Fehler auf, so liegt das an den geladenen Modulen, und eventuell angeschlossen Geräten

Ein Testscript das die mir bekannten Problematischen Treiber entlädt:

#!/bin/sh
#script for safe sleep

#clear log
echo > /tmp/suspend.log

#stop acpi
/etc/init.d/acpid stop >> /tmp/suspend.log &

# sync filesystem
sync

# remove USB 1.1 driver
modprobe -r uhci_hcd >> /tmp/suspend.log &
modprobe -r ath_pci >> /tmp/suspend.log &

# sync clock
/sbin/hwclock --systohc

# switch to console
FGCONSOLE=`fgconsole`
chvt 6
/usr/sbin/radeontool light off

# go to sleep
sleep 3 && echo -n "mem" > /sys/power/state

# readjust the clock (it might be off a bit after suspend)
/sbin/hwclock --adjust
/sbin/hwclock --hctosys

# reload USB 1.1 driver
modprobe uhci_hcd >> /tmp/suspend.log &
modprobe ath_pci >> /tmp/suspend.log &

#restart acpi
/etc/init.d/acpid start >> /tmp/suspend.log &

# turn on the backlight and switch back to X
radeontool light on
chvt $FGCONSOLE
Persönliche Werkzeuge