ACPI Wakeup

Aus VDR Wiki
(Unterschied zwischen Versionen)
Wechseln zu: Navigation, Suche
(Liste getesteter Mainboards)
(Liste getesteter Mainboards)
 
(145 dazwischenliegende Versionen von 67 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
==Beschreibung==
 
'''ACPI''' (''Advanced Configuration and Power Interface'') ist eine Schnittstellenspezifikation für das Zusammenspiel moderner Rechnerhardware und Betriebssysteme. Dadurch benötigt das Betriebssystem keine Informationen über die vorhandene Hardware, um gewisse Hardwarefunktionen nutzen zu können. ACPI ist eine Weiterentwicklung von APM, PNPBIOS und weiteren Techniken und bietet unter anderem Funktionen zur Kontrolle des Energieverbrauchs, zur Versetzung von Rechnern in den Ruhezustand und zur Aktivierung und Deaktivierung von Geräten.
 
 
'''ACPI-Wakeup''' bedeutet also vor diesem Hintergrund, dass der Rechner über das ACPI-Kernelinterface geweckt werden kann. Dazu schreibt man die Weckzeit in eine bestimmte Datei, die sich je nach Kernelversion entweder im proc- oder sysfs-Verzeichnisbaum befindet. Danach wird der Rechner schlafen gelegt, denn standardmäßig wird das Aufwachen nur aus den Schlafmodi Standby und Suspend to RAM unterstützt. Suspend to Disk ist optional, ist aber bei vielen Boards implementiert. Wenn alles klappt, wacht der Rechner dann zur übergebenen Uhrzeit wieder auf und fährt hoch.
 
 
 
==Anwendung==
 
==Anwendung==
  
===Kernel < 2.6.22===
+
===Kernel < 2.6.22 (veraltet) ===
Der Pfad lautet ''/proc/acpi/alarm''. Die Weckzeit wird im Format YYYY-MM-DD HH:MM:SS erwartet. Unbedingt darauf achten, ob die HW-Uhr in UTC oder in lokaler Zeit läuft! Gegebenenfalls muss man eine oder zwei Stunden abziehen.
+
Der Pfad lautet ''/proc/acpi/alarm''. Die Weckzeit wird im Format YYYY-MM-DD HH:MM:SS erwartet. Unbedingt darauf achten, ob die Hardware-Uhr in {{wikipedia|UTC}} oder in lokaler Zeit läuft! Gegebenenfalls muss man eine oder zwei Stunden abziehen.
  
 
Beispiel:
 
Beispiel:
 
 
   echo 2006-02-09 23:05:00 > /proc/acpi/alarm
 
   echo 2006-02-09 23:05:00 > /proc/acpi/alarm
  
===Kernel >= 2.6.22===
+
===Kernel ab 2.6.22===
Der Pfad lautet ''/sys/class/rtc/rtc0/wakealarm''. Näheres zur benötigten Kernelkonfiguration siehe [http://www.mythtv.org/wiki/index.php/ACPI_Wakeup MythTV-Wiki-Eintrag] zu ACPI-Wakeup. Die Weckzeit wird als Anzahl der Sekunden seit dem 01.01.1970 erwartet und ohne Beachtung der jeweiligen Zeitzone in YYYY-MM-DD HH:MM:SS umgerechnet. Es ist daher ratsam, die Systemuhr in UTC laufen zu lassen, um im Shutdown-Skript keine Zeitzonen-abhängige Korrektur der vom VDR kommenden UTC-Zeiten vornehmen zu müssen.
+
Der Pfad lautet ''/sys/class/rtc/rtc0/wakealarm''. Die Weckzeit wird als Anzahl der Sekunden seit dem 01.01.1970 erwartet und ohne Beachtung der jeweiligen Zeitzone in YYYY-MM-DD HH:MM:SS umgerechnet. Es ist daher ratsam, die Systemuhr in {{wikipedia|UTC}} laufen zu lassen, um im Shutdown-Skript keine Zeitzonen-abhängige Korrektur der vom VDR kommenden UTC-Zeiten vornehmen zu müssen.
  
Ist bereits ein Wert gesetzt, so muss der Alarm erst wieder deaktiviert werden, sonst schlägt ein zweites Setzen fehl. Dies geschieht durch Setzen eines Datums in der Vergangenheit (z.B. 0).
+
$ hwclock --systohc --utc  # the hardware clock is kept in UTC
 +
 
 +
Wenn UTC eingestellt ist, trifft folgendes zu:
 +
* Im BIOS wird UTC Zeit statt der lokalen Zeit angezeigt.
 +
* In ''/etc/default/rcS'' ist UTC=yes eingetragen
 +
* Ein ''hwclock --debug'' gibt aus:
 +
** Hardware clock is on UTC time
 +
** Assuming hardware lock is kept in UTC time
 +
 
 +
Ist bereits ein ''wakealarm'' Wert gesetzt, so muss der Alarm erst wieder deaktiviert werden, sonst schlägt ein zweites Setzen fehl. Dies geschieht durch Setzen eines Datums in der Vergangenheit (z.B. 0).
 +
 
 +
* Weiteres zur benötigten Kernelkonfiguration siehe [http://www.mythtv.org/wiki/ACPI_Wakeup MythTV-Wiki-Eintrag] zu ACPI-Wakeup.  
  
 
Beispiel:
 
Beispiel:
Zeile 22: Zeile 27:
 
   echo 0 > /sys/class/rtc/rtc0/wakealarm
 
   echo 0 > /sys/class/rtc/rtc0/wakealarm
 
   date +%s -d "Fri Feb 22 21:00:00 MET 2008" > /sys/class/rtc/rtc0/wakealarm
 
   date +%s -d "Fri Feb 22 21:00:00 MET 2008" > /sys/class/rtc/rtc0/wakealarm
 +
 +
<span style="color:#FF0000;">'''ACHTUNG:'''
 +
Bei manchen Mainboards muss man den [[wikipedia:High Precision Event Timer|HPET]] deaktivieren.
 +
Die Deaktivierung erreicht man indem man dem kernel ''hpet=disable'' als Parameter übergibt.
 +
Da die RTC-Treiber ein HPET-Gerät emulieren genügt es nicht während der Kernel-Konfiguration ''CONFIG_HPET'' abzuwählen! HPET lässt sich auch in manchen BIOSsen ausschalten.</span>
 +
 +
Siehe auch https://bugzilla.kernel.org/show_bug.cgi?id=12013
  
 
===Test===
 
===Test===
Zeile 32: Zeile 44:
 
==Überprüfen der Hardwarefähigkeiten==
 
==Überprüfen der Hardwarefähigkeiten==
  
Voraussetzung für das Funktionieren von ACPI-Wakeup ist natürlich ein ACPI-fähiges Motherboard, was auf alle Consumer-Boards ab dem Jahr 2000 zutreffen sollte. Bevor man sich genauer mit der Thematik auseinandersetzt, ist es sinnvoll, die Fähigkeiten des Boards herauszufinden. Interessant ist hier besonders, ob das Setzen des Datums und das Aufwachen aus dem SoftOff-Zustand unterstützt wird.
+
Voraussetzung für das Funktionieren von ACPI-Wakeup ist natürlich ein ACPI-fähiges [[Mainboard]], was auf alle Consumer-Mainboards ab dem Jahr 2000 zutreffen sollte. Bevor man sich genauer mit der Thematik auseinandersetzt, ist es sinnvoll, die Fähigkeiten des Mainboards herauszufinden. Interessant ist hier besonders, ob das Setzen des Datums und das Aufwachen aus dem SoftOff-Zustand unterstützt wird.
  
 
Diese Informationen sind in einer standardisierten Tabelle, der Sog. '''FADT''' (''Fixed ACPI Description Table'') hinterlegt. Bei aktuellen Kerneln (>= 2.6.22) werden diese Informationen im Kernel-Log ausgegeben:
 
Diese Informationen sind in einer standardisierten Tabelle, der Sog. '''FADT''' (''Fixed ACPI Description Table'') hinterlegt. Bei aktuellen Kerneln (>= 2.6.22) werden diese Informationen im Kernel-Log ausgegeben:
Zeile 40: Zeile 52:
 
   rtc0: alarms up to one month
 
   rtc0: alarms up to one month
  
Hat man nur einen älteren Kernel zur Verfügung, muss man die FADT selber über eine Pseudodatei im proc-Verzeichnisbaum auslesen. Das geschieht wie folgt:
+
Hat man nur einen älteren Kernel zur Verfügung, muss man die FADT selber über eine Pseudo-Datei im proc-Verzeichnisbaum auslesen. Das geschieht wie folgt:
  
 
   cat /proc/acpi/fadt > ~/fadt.bin
 
   cat /proc/acpi/fadt > ~/fadt.bin
  
Diese Datei kann nun in einem Hexeditor (z. B. xxd oder KHexEdit) geöffnet werden. Interessant sind die Bytes 0x6A (106) und 0x6B (107). Sind diese nicht null, sollte das Board das Setzten des Tages (106) und des Monats (107) unterstützen. Die Fähigkeit, aus Zustand S4 aufzuwachen, wird mit dem höchstwertigen Bit im Byte 0x70 (112) kodiert.
+
Diese Datei kann nun in einem Hexeditor (z. B. xxd oder KHexEdit) geöffnet werden. Interessant sind die Bytes 0x6A (106) und 0x6B (107). Sind diese nicht null, sollte das Mainboard das Setzten des Tages (106) und des Monats (107) unterstützen. Die Fähigkeit, aus Zustand S4 aufzuwachen, wird mit dem höchstwertigen Bit im Byte 0x70 (112) kodiert.
  
 
Beispiel (interessante Bytes mit * markiert):
 
Beispiel (interessante Bytes mit * markiert):
Zeile 58: Zeile 70:
 
   0000070:*a5*04 00 00
 
   0000070:*a5*04 00 00
  
Dieses Board (Gigabyte GA-6OXM) unterstützt also das Aufwachen aus S4 (0xA5 = '''1'''0100101b) und das Setzten des Tages, nicht aber das Setzen des Monats.
+
Dieses Mainboard (Gigabyte GA-6OXM) unterstützt also das Aufwachen aus S4 (0xA5 = '''1'''0100101b) und das Setzten des Tages, nicht aber das Setzen des Monats.
  
 
==Hinweise==
 
==Hinweise==
Zeile 66: Zeile 78:
 
   grep "hwclock" /etc/init.d/*
 
   grep "hwclock" /etc/init.d/*
  
 +
: weitere ausführliche Lösungen für debian, ubuntu, redhat, suse [http://www.mythtv.org/wiki/ACPI_Wakeup#Disable_HWclock_updates mythtv.org]<br/>nur debian systeme: /etc/init.d/hwclock.sh editieren, unter [https://help.ubuntu.com/community/MythTV/Install/WhatNext/ACPIWake help.ubuntu.com]<br/>
 
* Wenn ein Board aus S4 aufwachen kann, ist die Chance groß, dass es auch aus dem SoftOff erwacht, auch wenn dies vom ACPI-Standard nicht vorgesehen ist.
 
* Wenn ein Board aus S4 aufwachen kann, ist die Chance groß, dass es auch aus dem SoftOff erwacht, auch wenn dies vom ACPI-Standard nicht vorgesehen ist.
* ACPI-Wakeup ist verwandt mit der BIOS-Option "Wake on RTC", bei der man im BIOS eine Aufwachzeit einstellt. Diese Option muss je nach Board mal aktiviert, mal deaktivert sein, damit ACPI-Wakeup funktioniert.
+
* ACPI-Wakeup ist verwandt mit der BIOS-Option "Wake on RTC", bei der man im BIOS eine Aufwachzeit einstellt. Diese Option muss je nach Mainboard mal aktiviert, mal deaktiviert sein, damit ACPI-Wakeup funktioniert.
  
==ACPI Test Script==
+
==ACPI Test Skript==
#!/bin/bash
+
{{Box Datei|acpi-test.sh|<pre>#!/bin/bash
 +
# Startet dem Rechner nach 3 Minuten über ACPI neu.
 +
 
 +
DEV=/sys/class/rtc/rtc0/wakealarm
 +
#DEV=/proc/acpi/alarm              # Fuer Kernel < 2.6.22
 +
 
 +
nextboot=`date --date "now +180 seconds" "+%s"`
 +
echo 0 > $DEV
 +
echo $nextboot > $DEV  # Einige Mainboards sind etwas begriffsstutzig,
 +
#echo $nextboot > $DEV  # sie kapieren erst nach zwei Aufrufen, was Sache ist.
 +
 
 +
 
 +
echo "Aktuelle Zeit:        "`date "+%Y-%m-%d %H:%M:%S"`
 +
echo
 +
cat /proc/driver/rtc
 +
echo
 +
echo "Fahre Rechner runter."
 +
 
 +
#busybox poweroff
 +
#/usr/bin/poweroff.pl
 +
poweroff
 +
</pre>
 +
}}
 +
----
 +
 
 +
==VDR Shutdown Skripts==
 +
Meine BIOS-Uhr läuft mit lokaler Zeit (UTC=no in /etc/rcS bzw. /etc/defaults/rcS) - deshalb funktioniert bei mir folgendes Skript:
 +
 +
{{Box Datei|poweroff-localtime.sh|<pre>
 +
#!/bin/sh
 +
sudo hwclock --systohc --localtime
 
   
 
   
# Startet dem Rechner nach 3 Minuten über ACPI neu.  
+
DEV=/sys/class/rtc/rtc0/wakealarm
 +
#DEV=/proc/acpi/alarm              # Fuer Kernel < 2.6.22
 
   
 
   
  min=`date "+%M"`
+
#ACPI
nextmin=`expr $min + 3`
+
echo "Arguments: $*"
nextboot=`date "+%Y-%m-%d %H:"$nextmin:00`
+
echo "Next timer: $1 seconds from 1970/01/01, UTC"
echo $nextboot > /proc/acpi/alarm  # Einige Mainboards sind etwas begriffsstutzig,
+
echo "Next timer: $2 seconds from now"
echo $nextboot > /proc/acpi/alarm  # sie kapieren erst nach zwei Aufrufen, was Sache ist.
+
 
 +
naechsterTimer=$(/bin/date --date "now +$2 seconds" "+%s")
 +
#naechsterTimer=$(/bin/date --date "now +$2 seconds" "+%Y-%m-%d %H:%M:%S")# Fuer Kernel < 2.6.22
 
   
 
   
echo "Aktuelle Zeit:        "`date "+%Y-%m-%d %H:%M:%S"`
+
sudo chmod a+wr $DEV
echo "Starte Rechner neu um: "`cat /proc/acpi/alarm`
+
  echo "Fahre Rechner nun runter."
+
 
   
 
   
  busybox poweroff
+
# wakealarm löschen (wenn schon gesetzt, muss er gelöscht werden)
  #/usr/bin/poweroff.pl
+
echo 0 > $DEV
  #poweroff
+
#alarm setzen
 +
echo $naechsterTimer > $DEV
 +
echo $naechsterTimer > $DEV
 +
   
 +
sudo /sbin/shutdown -h now
 +
EXITSTATUS=0
 +
exit $EXITSTATUS
 +
</pre>
 +
}}
 +
 
 +
'''Anmerkung:''' der [[VDR]] ruft dieses Skript mit den Parametern "Uhrzeit des nächster Timerevent in utc" und "Sekunden bis dahin" wie unschwer zu erkennen ist bezieht sich $2 bei der Zuweisung von naechsterTimer auf diesen zweiten Parameter.
 +
 
 +
Eine Alternative unter Verwendung der lokalen Zeit (MET/CEST) die auf den ersten übergebenen Parameter zurückgreift:
 +
 
 +
{{Box Datei|poweroff-localtime2.sh|<pre>
 +
#!/bin/sh
 +
hwclock --systohc --localtime
 +
 
 +
DEV=/sys/class/rtc/rtc0/wakealarm
 +
#DEV=/proc/acpi/alarm              # Fuer Kernel < 2.6.22
 +
DATE=/bin/date
 +
       
 +
        if &#x5B;&#x5B; `$DATE` =~ "CEST" &#x5D;&#x5D;; then
 +
                TIMER=`echo "$1 + 2 * 60 * 60" | bc`;
 +
        else
 +
                TIMER=`echo "$1 + 60 * 60" | bc`;
 +
       
 +
        fi
 +
 +
echo 0 > $DEV
 +
echo $TIMER > $DEV
 +
 +
/sbin/shutdown -h now
 +
EXITSTATUS=0
 +
exit $EXITSTATUS
 +
</pre>
 +
}}
 +
 
 +
'''Anmerkung:''' Dieses Skript funktioniert bei lokaler Zeit, da es zuerst überprüft ob momentan Sommer-/Winterzeit ist und anschließend zur UTC 1, bzw. 2 Stunden dazurechnet um die korrekte Zeit zum Aufwachen zu setzen.
 +
 
 +
 
 +
Bei Verwendung der GMT-Zeit (UTC=yes,HWCLOCKACCESS=no in /etc/default/rcS):
 +
 
 +
{{Box Datei|poweroff-utc.sh|<pre>
 +
#!/bin/bash
 +
 
 +
offset=$(($2 - 300 ))
 +
if [ "$offset" -lt "60" ] ; then
 +
echo "ABORT_MESSAGE=\"Next timer will be here soon!\""
 +
EXITSTATUS=1
 +
exit $EXITSTATUS
 +
 
 +
else
 +
 
 +
  if [ "$UID" -ne "0" ] # Try only as real "root"
 +
  then
 +
    sudo bash "$0" "$1" "$2" "$3" "$4" "$5"
 +
    exit $!
 +
  fi
 +
 
 +
# sync system clock to RTC
 +
hwclock --systohc --utc
 +
 
 +
NextTimer=$(($1 - 300 ))  # Start 5 minutes earlier
 +
 
 +
#ACPI Device
 +
DEV=/sys/class/rtc/rtc0/wakealarm
 +
 
 +
echo "0" > $DEV
 +
echo $NextTimer > $DEV
 +
 
 +
EXITSTATUS=0
 +
fi
 +
/sbin/shutdown -h now
 +
 
 +
exit $EXITSTATUS
 +
</pre>
 +
}}
  
 
==Liste getesteter Mainboards==
 
==Liste getesteter Mainboards==
Zeile 96: Zeile 217:
 
| '''Mainboard'''
 
| '''Mainboard'''
 
| '''ACPI i.o.'''
 
| '''ACPI i.o.'''
 +
| '''systohc bug-free'''
 
| '''Hinweise/Besonderheiten'''
 
| '''Hinweise/Besonderheiten'''
 
|-
 
|-
| VIA EPIA 800
+
| Acer FMCP7A-ION
 +
| ja
 +
|
 +
| Acer Revo 3610
 +
|-
 +
| Asrock A780GMH/128M
 
| nein
 
| nein
| Nur Wecken per set_timer funktioniert.
+
|
 +
|
 
|-
 
|-
| VIA EPIA ML5000
+
| Asrock M3N78D
 
| ja
 
| ja
| Ist mit dem ACPI Test-Script aus dem Standby gestartet.
+
|
 +
|
 
|-
 
|-
| VIA EPIA M10000
+
| Asrock N68C-S UCC
 
| ja
 
| ja
| Wakeup per RTC muss im BIOS deaktiviert werden.
+
|
Nach Setzen der ACPI-Weckzeit darf die RTC per hwclock nicht mehr verändert werden.
+
|
 
|-
 
|-
| VIA PC2500
+
| Asus P2B-DS
 
| ja
 
| ja
| Wakeup per RTC muss im BIOS deaktiviert werden.
+
|  
Nach Setzen der ACPI Weckzeit darf die RTC per hwclock nicht mehr verändert werden:
+
| Board-Rev. ist 1.06 D03. Mainboard muss zunächst aus der Blacklist für ACPI entfernt werden, da ältere Revisionen offensichtlich einen Bug im ACPI-Support hatten.
In ''/etc/default/rcS'' einfügen: HWCLOCKACCESS=no
+
|-
 +
| Asus M3N WS
 +
| ja
 +
|
 +
| problemlos
 +
|-
 +
| Asus A7V333-X
 +
| ja
 +
|
 +
|
 
|-
 
|-
 
| Asus A8V Deluxe
 
| Asus A8V Deluxe
 
| ja
 
| ja
| -/-
+
|  
 +
|
 
|-
 
|-
 
| Asus P48X
 
| Asus P48X
 
| ja
 
| ja
| -/-
+
|  
 +
|
 
|-
 
|-
 
| Asus P5B WIFI Deluxe AP
 
| Asus P5B WIFI Deluxe AP
 
| ja
 
| ja
| -/-
+
|  
 +
|
 
|-
 
|-
 +
| Asus P5GD1 PRO
 +
| ja
 +
| nein
 +
|
 +
|-
 +
| Asus P5QL Pro
 +
| ja
 +
|
 +
| Wakeup per RTC muss im BIOS deaktiviert sein.
 
|-
 
|-
 
| Asus P5K
 
| Asus P5K
 
| ja
 
| ja
 +
| nein
 
| Wakeup per RTC muss im BIOS deaktiviert sein.
 
| Wakeup per RTC muss im BIOS deaktiviert sein.
Nach Setzen der ACPI-Weckzeit darf die RTC per hwclock nicht mehr verändert werden.
+
|-
 +
| Asus [http://www.asus.com/Motherboards/P8H67M_EVO/ P8H67-M EVO]
 +
| jein
 +
| ja?
 +
| Wakeup funktioniert nur wenn im suspend oder hibernate Modus ''und'' wenn RTC im BIOS aktiviert ist (bzw. eine der Anderen Wakeup Funktionen).
 
|-
 
|-
 
| Asus Pundit P1-AH2
 
| Asus Pundit P1-AH2
 
| ja
 
| ja
 +
| nein
 
| Wakeup per RTC muss im BIOS deaktiviert sein.
 
| Wakeup per RTC muss im BIOS deaktiviert sein.
Nach Setzen der ACPI-Weckzeit darf die RTC per hwclock nicht mehr verändert werden.
 
 
|-
 
|-
| Gigabyte GA-6VEML
+
| Asus M2A-VM (HDMI)
 
| ja
 
| ja
| mit BIOS v7
+
| nein
 +
|1.) Im BIOS: APM Configuration - Power on by RTC Alarm = "disabled"
 +
Bei Kernel >= 2.6.22 muss zusätzlich der Kernel-Parameter '''hpet=disable''' gesetzt werden.
 
|-
 
|-
| DFI CA63-SN
+
|Asus M4A87TD/USB3 - Bios Vers.2001
 +
|?
 +
|?
 +
|Im Bios: bei APM RTC Disabled, Aufwachen geht über localtime und deaktivierter hwclock-Aktualisierung beim shutdown, sudo sh -c "echo `date -u --date "2011-06-30 18:51:00" +%s` > /sys/class/rtc/rtc0/wakealarm" (/sys/class/rtc/rtc0/wakealarm auf null setzen nicht nötig)
 +
|-
 +
| Asus M3N78-EM
 
| ja
 
| ja
| Resume on Alarm muss im BIOS aktiviert sein und Datum und Zeit müssen alle auf 0 stehen.
+
|
 +
|
 
|-
 
|-
|MSI K8N NEO-FSR V2.0 S.754 (Version 3.0)
+
| Asus M3N78-VM (HDMI)
 
| ja
 
| ja
|Nur Uhrzeit, kein Tag einstellbar.
+
| IMHO ja
 +
|1.) Im BIOS: APM Configuration - Power on by RTC Alarm = "disabled"
 +
getestet mit /sys/class/rtc/rtc0/wakealarm
 
|-
 
|-
|MSI MS-6723 ver:1 (OEM Board im REAL Digitainer)
+
| Asus M3N78-PRO (HDMI)
 
| ja
 
| ja
|Wakeup per RTC wurde im BIOS deaktiviert.
+
| IMHO ja
BIOS 6.02 und Kernel 2.6.23.9
+
| 1.) Im BIOS: APM Configuration - Power on by RTC Alarm = "disabled"
 
|-
 
|-
|ASUS M2A-VM (HDMI)
+
| Asus M4A77T (BIOS V2401)
 
| ja
 
| ja
|1.) Im BIOS: APM Configuration - Power on by RTC Alarm = "disabled"
+
|
2.) In ''/etc/default/rcS'' einfügen: HWCLOCKACCESS=no
+
|1.) Im BIOS: APM Configuration - Power on by RTC Alarm = "disabled"  
 +
Zusätzlich muss der Kernel-Parameter '''hpet=disable''' gesetzt werden.
 +
|-
 +
| Asus M4A78-PRO
 +
| ja
 +
| nein
 +
|1.) Im BIOS: APM Configuration - Power on by RTC Alarm = "disabled"
 +
Zusätzlich muss der Kernel-Parameter '''hpet=disable''' gesetzt werden.
 +
|-
 +
| Asus M4A785TD-M EVO
 +
| ja
 +
|
 +
|Power -> ACPI APIC support: '''Disabled'''
 +
Power -> ACPI 2.0 Support:  <egal>
  
 +
Power -> APM Configuration -> Power on From S5 By ...: <egal>
 
|-
 
|-
|ASUS M2NPV-VM
+
| Asus M4A78LT-M (BIOS 0802)
 
| ja
 
| ja
|1.) Im BIOS: APM Configuration - Power on by RTC Alarm = "disabled"
+
| IMHO ja
2.) In ''/etc/default/rcS'' muss UTC=no stehen, alternativ kann man auch UTC=YES und HWCLOCKACCESS=no eintragen. Dies hat aber den Nachteil, dass die Hardwareuhr nicht mehr aktualisiert wird
+
| Power on by RTC Alarm = "disabled". Zusätzlich muss der Kernel-Parameter '''hpet=disable''' gesetzt werden.
 
|-
 
|-
|ASUS M2R68L (P2-M2A690G Barebone)
+
| Asus M4A78LT-M LE
 
| ja
 
| ja
|1.) Im BIOS: APM Configuration -> Power on by RTC Alarm = "disabled"
+
| IMHO ja
2.) In ''/etc/default/rcS'' einfügen: HWCLOCKACCESS=no
+
| Keine Änderungen im BIOS. Zusätzlich muss der Kernel-Parameter '''hpet=disable''' gesetzt werden.
 
|-
 
|-
|Shuttle XPC SN68SG2
+
| Asus M2NPV-VM
 
| ja
 
| ja
|1.) Im BIOS: APM Configuration -> Power on by RTC Alarm = "disabled"
+
| nein
2.) In ''/etc/default/rcS'' einfügen: HWCLOCKACCESS=no
+
| Im BIOS: APM Configuration - Power on by RTC Alarm = "disabled"
 +
|-
 +
| Asus M2R68L (P2-M2A690G Barebone)
 +
| ja
 +
| nein
 +
| Im BIOS: APM Configuration -> Power on by RTC Alarm = "disabled"  
 +
Bei Kernel >= 2.6.22 muss zusätzlich der Kernel-Parameter '''hpet=disable''' gesetzt werden.
 +
|-
 +
| Asus T3-M3N8200 (Barebone)
 +
| ja
 +
| n/a
 +
| Funktioniert mit Kernel-Parameter '''hpet=disable''' (ohne habe ich nicht getestet)
 +
|-
 +
| Asus M3A-H/HDMI
 +
| ja
 +
| nein
 +
| Im BIOS: Power -> APM Configuration -> Power on by RTC Alarm = "disabled"
 +
|-
 +
| Asus M4A88T-M USB3.0
 +
| ja
 +
|
 +
| Im BIOS: Power -> ACPI 2.0 Support "Disable", /etc/default/grub "hpet=disable"
 +
|-
 +
| Asus M5A78L-M/USB3
 +
| ja
 +
|
 +
| Im BIOS: Power -> APM Configuratiom "Power on From S5 by PME#" -> "Enable", /etc/default/grub "hpet=disable"
 +
|-
 +
| DFI CA63-SN
 +
| ja
 +
|
 +
| Resume on Alarm muss im BIOS aktiviert sein und Datum und Zeit müssen alle auf 0 stehen.
 +
|-
 +
| ELITEGROUP GF8200A
 +
| ja
 +
|
 +
|
 +
|-
 +
| Gigabyte GA-6VEML
 +
| ja
 +
|
 +
| mit BIOS v7
 +
|-
 +
| Gigabyte GA-8I915G-MF
 +
| ja
 +
| ja
 +
| nvram + S3
 +
S3 --> hwclock --systohc --directisa && sync && sleep 3s && s2ram --force
 
|-
 
|-
 
|Gigabyte GA-K8VT800 PRO
 
|Gigabyte GA-K8VT800 PRO
 
| ja
 
| ja
 +
| nein
 
|1.) Im BIOS: APM Configuration -> Power on by RTC Alarm = "disabled"
 
|1.) Im BIOS: APM Configuration -> Power on by RTC Alarm = "disabled"
2.) In ''/etc/default/rcS'' einfügen: HWCLOCKACCESS=no
 
 
|-
 
|-
 
|Gigabyte GA-5AX
 
|Gigabyte GA-5AX
 
| ja
 
| ja
 +
|
 
|1.) Im BIOS: APM Configuration -> PM by APM - RTC Alarm = "enabled" und feste Zeit eingestellt  
 
|1.) Im BIOS: APM Configuration -> PM by APM - RTC Alarm = "enabled" und feste Zeit eingestellt  
 
(vermutlich egal, startet so aber nach zu langem Stromausfall das nächste Mal mit der eingestellten Zeit)
 
(vermutlich egal, startet so aber nach zu langem Stromausfall das nächste Mal mit der eingestellten Zeit)
  
 
2.) Ist mit dem ACPI Test-Script nach 3 min neu gestartet (Nach Abzug von 1std. im Script, wegen "CET-Zeit")
 
2.) Ist mit dem ACPI Test-Script nach 3 min neu gestartet (Nach Abzug von 1std. im Script, wegen "CET-Zeit")
 +
|-
 +
|Gigabyte GA-B85M-HD3
 +
| ja
 +
|
 +
|
 +
|-
 +
|Gigabyte GA-H67A-UD3H-B3
 +
| ja
 +
|
 +
|Im BIOS: Power on by RTC Alarm = "disabled", HPET = 64 Bit. hpet beim Kernel nicht disabled. dmesg sagt "rtc0: alarms up to one month, 242 bytes nvram, hpet irqs".
 
|-
 
|-
 
|Gigabyte GA-M61P-S3
 
|Gigabyte GA-M61P-S3
 
| ja
 
| ja
 +
| nein
 
|1.) Im BIOS: APM Configuration -> Power on by RTC Alarm = "disabled"
 
|1.) Im BIOS: APM Configuration -> Power on by RTC Alarm = "disabled"
2.) beim Stellen der Uhrzeit Parameter "--directisa" für RTC erforderlich
+
|-
 +
|Gigabyte GA-MA770T-UD3 Rev. 1.2
 +
| ja
 +
| ? (ja)
 +
| Im Bios: Power Management Setup -> HPET Support = "disabled", funktioniert nicht, wenn enabled. Mit Ubuntu 10.04 Standard-Config kein Problem mit systohc feststellbar.
 +
|-
 +
|Gigabyte GA-MA78GM-S2H (rev.1.1) BIOS&nbsp;F5
 +
| ja
 +
| ?
 +
| getest mit 2.6.27.7 rtc_cmos und hpet=disable
 +
|-
 +
|Gigabyte GA-MA78GM-S2H (rev.1.0) BIOS&nbsp;F11
 +
| ja
 +
| ja
 +
| HPET Support Disabled und Power-On by Alarm Disabled im BIOS, Ubuntu 10.04.1 Standard-Kernel, funktioniert mit 1x schreiben nach wakealarm.
 +
|-
 +
| Gigabyte GA-MA78G-DS3H (Rev: 2.0)
 +
| ja
 +
|
 +
|1) Im BIOS: Power Management Setup -> Power on by Alarm = Disabled
 +
2) Dem Kernel ''hpet=disable'' mitgeben ([https://help.ubuntu.com/community/GrubHowto#Setting%20kernel%20parameters|alle Kernel])
 +
|-
 +
 
 +
Ubuntu 8.10 (32 Bit) // Uhrzeit und Tag einstellbar
 +
|-
 +
| Gigabyte GA-MA78GM-UD2H
 +
| ja
 +
| ?
 +
| kernel 2.6.31.6 "hpet=disable" übergeben und im BIOS (Menüpunkt: Power Management Setup) "Power-On by Alarm" ebenfalls auf disable gesetzt
 +
|-
 +
|Gigabyte M85M-US2H
 +
| ja
 +
| ja ?
 +
|
 +
* Im BIOS: APM Configuration -> Power on by RTC Alarm = "enabled"
 +
* Ubuntu Kernel 2.6.32-30-generic
 +
* hpet=diable als boot-parameter
 +
|-
 +
|IBM ThinkCentre M55p C2D
 +
| ja
 +
|
 +
|getestet mit Debian Squeeze und e-tobi vdr-Paketen
 +
|-
 +
|Intel DH67CL
 +
| ja
 +
|
 +
|
 +
* BIOS 0122
 +
* Wakeup per RTC wurde im BIOS deaktiviert.
 +
* debian 6 "squeeze" mit 2.6.38-bpo
 +
* /etc/default/rcS: HWCLOCKACCESS=no (evtl. unnötig)
 +
|-
 +
| Jetway NF9C-2600
 +
| ja
 +
| ja
 +
| debian 6 squeeze mit backport kernel 3.2.0-0.bpo.1-686-pae
 +
|-
 +
|MSI K8N NEO-FSR V2.0 S.754 (Version 3.0)
 +
| ja
 +
|
 +
|Nur Uhrzeit, kein Tag einstellbar.
 +
|-
 +
|MSI MS-6723 ver:1 (OEM Board im REAL Digitainer)
 +
| ja
 +
|
 +
|Wakeup per RTC wurde im BIOS deaktiviert.
 +
BIOS 6.02 und Kernel 2.6.23.9
 +
|-
 +
|MSI MS-7318 (OEM Board im Medion 8818)
 +
| ja
 +
| nein
 +
| Wakeup per RTC wurde im BIOS deaktiviert.
 +
ubuntu 8.04
 +
|-
 +
|MSI K9AG Neo2-Digital
 +
| ja
 +
|
 +
| sowohl per /proc/acpi/alarm als auch /sys/class/rtc/rtc0/wakealarm im BIOS 'Resume by RTC Alarm' disabled.
 +
|-
 +
| MSI 945GCM478
 +
| ja
 +
| ?
 +
| BIOS V1.0 Rev. 0422208. Einstellungen im Power Management: ACPI Function -> Enabled, ACPI Standby State -> S1, Wake Up Event by -> OS
 +
|-
 +
|MSI 945GT Speedster-A4R
 +
| ja
 +
| nein
 +
| Mit /proc/acpi/alarm oder /sys/class/rtc/rtc0/wakealarm und im BIOS 'Resume by RTC Alarm' disabled.
 +
Mit aktuelle Debian Lenny linux-image-2.6.26-13 klappt es aber nicht (/proc/driver/rtc sieht richtig aus aber kein wakeup!).
 +
 
 +
Fungiert wieder mit z.b. Sidux linux-image-2.6.27+ wie in http://www.vdrportal.de/board/thread.php?threadid=83028 .
 +
|-
 +
|NMC 8TAX+
 +
| ja
 +
| ?
 +
| Das Board ist baugleich mit Enmic 8TAX+.
 +
|-
 +
|Shuttle XPC SN68SG2
 +
| ja
 +
| nein
 +
|1.) Im BIOS: APM Configuration -> Power on by RTC Alarm = "disabled"
 +
|-
 +
| VIA EPIA 800
 +
| nein
 +
|
 +
| Nur Wecken per set_timer funktioniert.
 +
|-
 +
| VIA EPIA ML5000
 +
| ja
 +
|
 +
| Ist mit dem ACPI Test-Script aus dem Standby gestartet.
 +
|-
 +
| VIA EPIA ME6000
 +
| ja
 +
| nein
 +
| Kernel 2.6.26, RTC auf UTC, BIOS 1.13
 +
|-
 +
| VIA EPIA ME6000G
 +
| nein
 +
|
 +
| siehe [[NVRAM_WakeUp]]
 +
|-
 +
| VIA EPIA M10000
 +
| ja
 +
| nein
 +
| Wakeup per RTC muss im BIOS deaktiviert werden.
 +
|-
 +
| VIA PC2500
 +
| ja
 +
| nein
 +
| Wakeup per RTC muss im BIOS deaktiviert werden.
 +
In ''/etc/default/rcS'' einfügen: HWCLOCKACCESS=no
 +
|-
 +
| VIA SP13000
 +
| ja
 +
| ja
 +
|
 +
|-
 +
| VIA EPIA EN 15000G
 +
| ja
 +
| ja
 +
| Wakeup per RTC muss im BIOS deaktiviert werden.
 +
echo "2010-03-28 23:07:00" > /proc/acpi/alarm
 +
Wacht aus S3 (Suspend2Ram) auf.
 +
|
 
|}
 
|}
  
Siehe auch: http://linvdr.org/wiki/index.php?%20pagename=LinVDR-Mainboards
+
 
 +
systohc bug = einige Mainboards wachen nicht auf, wenn nach dem setzen der Weckzeit die Hardwareuhr per hwclock --systohc aktualisiert wird. (bei vielen Distributionen der Fall) Details siehe auch im Abschnitt [[ACPI_Wakeup#Hinweise|Hinweise]] innerhalb dieses Artikels.
  
 
==ACPI Schlafmodus==
 
==ACPI Schlafmodus==
 
Mit ACPI kann man ausserdem das System schlafen legen, wenn das Mainboard mitspielt. Je nach BIOS werden verschiedene Modi unterstützt, S1 (Standby), S3 (Suspend to RAM) oder S4 (Suspend to Disk). Im Gegensatz zum vollständigen Shutdown braucht das Reaktivieren des Systems viel weniger Zeit.
 
Mit ACPI kann man ausserdem das System schlafen legen, wenn das Mainboard mitspielt. Je nach BIOS werden verschiedene Modi unterstützt, S1 (Standby), S3 (Suspend to RAM) oder S4 (Suspend to Disk). Im Gegensatz zum vollständigen Shutdown braucht das Reaktivieren des Systems viel weniger Zeit.
  
S1: CPU und einige andere Komponenten werden abgeschaltet. Das ist die einfachste, schnellste und schonendste Variante, die aber auch am wenigsten Strom spart.  
+
S1: CPU und einige andere Komponenten werden abgeschaltet. Das ist die einfachste, schnellste Variante, die aber auch am wenigsten Strom spart.  
  
 
   echo -n "standby" > /sys/power/state
 
   echo -n "standby" > /sys/power/state
Zeile 212: Zeile 595:
 
   /etc/init.d/dvb start
 
   /etc/init.d/dvb start
 
   /etc/init.d/vdr start
 
   /etc/init.d/vdr start
 +
 +
S4: Suspend to disk (aka Ruhezustand). Der Arbeitsspeicher inkl. Videoram wird auf der Swap-Partition abgelegt. Diese Partition muss als Kernelbootoption mit resume=/dev/sdxy übergeben werden - oder wenn suspend to disk nur verwendet wird, da das Board aus S5 nicht aufwacht, man jedoch auf einen sauberen Bootvorgang angewiesen ist, dann kann man auch in /etc/rc.local folgende Sequenz einfügen:
 +
  swapoff -a
 +
  mkswap /dev/sdxy
 +
  swapon -a
 +
 +
Kommando für S4:
 +
  echo -n "disk" > /sys/power/state
  
 
==Links==
 
==Links==
 +
# http://linvdr.org/wiki/index.php?%20pagename=LinVDR-Mainboards
 
# [http://www.hubertus-sandmann.homepage.t-online.de/acpi-wakeup-0.1.tar.bz2 acpi-wakeup-0.1.tar.bz2]
 
# [http://www.hubertus-sandmann.homepage.t-online.de/acpi-wakeup-0.1.tar.bz2 acpi-wakeup-0.1.tar.bz2]
# [http://www.hubertus-sandmann.homepage.t-online.de/Der_automatische_WakeUp_fuer_VDR.htm Anleitung]
+
# [http://www.hubertus-sandmann.homepage.t-online.de/ACPI-Wakeup.htm Anleitung]  
# [http://www.linux-magazin.de/Artikel/ausgabe/2004/08/wakeup/wakeup.html "Computer programmgesteuert aufwecken" von Mirko Dölle, Linux-Magazin 8/2004]  
+
# [http://www.linux-magazin.de/Heft-Abo/Ausgaben/2004/08/Weckdienst "Computer programmgesteuert aufwecken" von Mirko Dölle, Linux-Magazin 8/2004]  
 
# [http://acpi.sourceforge.net ACPI-Projekthomepage (Dokumentation, Kernel-Patches, Wiki)]
 
# [http://acpi.sourceforge.net ACPI-Projekthomepage (Dokumentation, Kernel-Patches, Wiki)]
 
# [http://www.acpi.info/DOWNLOADS/ACPIspec20.pdf ACPI 2.0 Spezifikation, Compaq/Intel/Microsoft/Phoenix/Toshiba 27. Juli 2000]
 
# [http://www.acpi.info/DOWNLOADS/ACPIspec20.pdf ACPI 2.0 Spezifikation, Compaq/Intel/Microsoft/Phoenix/Toshiba 27. Juli 2000]
  
[[Kategorie:Begriffserklärungen]]
+
[[Kategorie:Begriffserklärungen]][[Kategorie:Wakeup]]
  
 
[[ru:ACPI Wakeup]]
 
[[ru:ACPI Wakeup]]

Aktuelle Version vom 23. März 2017, 20:36 Uhr

Inhaltsverzeichnis

[Bearbeiten] Anwendung

[Bearbeiten] Kernel < 2.6.22 (veraltet)

Der Pfad lautet /proc/acpi/alarm. Die Weckzeit wird im Format YYYY-MM-DD HH:MM:SS erwartet. Unbedingt darauf achten, ob die Hardware-Uhr in UTC oder in lokaler Zeit läuft! Gegebenenfalls muss man eine oder zwei Stunden abziehen.

Beispiel:

 echo 2006-02-09 23:05:00 > /proc/acpi/alarm

[Bearbeiten] Kernel ab 2.6.22

Der Pfad lautet /sys/class/rtc/rtc0/wakealarm. Die Weckzeit wird als Anzahl der Sekunden seit dem 01.01.1970 erwartet und ohne Beachtung der jeweiligen Zeitzone in YYYY-MM-DD HH:MM:SS umgerechnet. Es ist daher ratsam, die Systemuhr in UTC laufen zu lassen, um im Shutdown-Skript keine Zeitzonen-abhängige Korrektur der vom VDR kommenden UTC-Zeiten vornehmen zu müssen.

$ hwclock --systohc --utc  # the hardware clock is kept in UTC

Wenn UTC eingestellt ist, trifft folgendes zu:

  • Im BIOS wird UTC Zeit statt der lokalen Zeit angezeigt.
  • In /etc/default/rcS ist UTC=yes eingetragen
  • Ein hwclock --debug gibt aus:
    • Hardware clock is on UTC time
    • Assuming hardware lock is kept in UTC time

Ist bereits ein wakealarm Wert gesetzt, so muss der Alarm erst wieder deaktiviert werden, sonst schlägt ein zweites Setzen fehl. Dies geschieht durch Setzen eines Datums in der Vergangenheit (z.B. 0).

Beispiel:

 echo 0 > /sys/class/rtc/rtc0/wakealarm
 date +%s -d "Fri Feb 22 21:00:00 MET 2008" > /sys/class/rtc/rtc0/wakealarm

ACHTUNG: Bei manchen Mainboards muss man den HPET deaktivieren. Die Deaktivierung erreicht man indem man dem kernel hpet=disable als Parameter übergibt. Da die RTC-Treiber ein HPET-Gerät emulieren genügt es nicht während der Kernel-Konfiguration CONFIG_HPET abzuwählen! HPET lässt sich auch in manchen BIOSsen ausschalten.

Siehe auch https://bugzilla.kernel.org/show_bug.cgi?id=12013

[Bearbeiten] Test

Bei beiden Varianten kann mittels...

 cat /proc/driver/rtc

...der Erfolg des Setzens überprüft werden.

[Bearbeiten] Überprüfen der Hardwarefähigkeiten

Voraussetzung für das Funktionieren von ACPI-Wakeup ist natürlich ein ACPI-fähiges Mainboard, was auf alle Consumer-Mainboards ab dem Jahr 2000 zutreffen sollte. Bevor man sich genauer mit der Thematik auseinandersetzt, ist es sinnvoll, die Fähigkeiten des Mainboards herauszufinden. Interessant ist hier besonders, ob das Setzen des Datums und das Aufwachen aus dem SoftOff-Zustand unterstützt wird.

Diese Informationen sind in einer standardisierten Tabelle, der Sog. FADT (Fixed ACPI Description Table) hinterlegt. Bei aktuellen Kerneln (>= 2.6.22) werden diese Informationen im Kernel-Log ausgegeben:

 ACPI: RTC can wake from S4
 ...
 rtc0: alarms up to one month

Hat man nur einen älteren Kernel zur Verfügung, muss man die FADT selber über eine Pseudo-Datei im proc-Verzeichnisbaum auslesen. Das geschieht wie folgt:

 cat /proc/acpi/fadt > ~/fadt.bin

Diese Datei kann nun in einem Hexeditor (z. B. xxd oder KHexEdit) geöffnet werden. Interessant sind die Bytes 0x6A (106) und 0x6B (107). Sind diese nicht null, sollte das Mainboard das Setzten des Tages (106) und des Monats (107) unterstützen. Die Fähigkeit, aus Zustand S4 aufzuwachen, wird mit dem höchstwertigen Bit im Byte 0x70 (112) kodiert.

Beispiel (interessante Bytes mit * markiert):

 xxd -g 1 ~/fadt.bin
 0000000: 46 41 43 50 74 00 00 00 01 bf 47 42 54 20 20 20  FACPt.....GBT   
 0000010: 41 57 52 44 41 43 50 49 31 2e 30 42 41 57 52 44  AWRDACPI1.0BAWRD
 0000020: 00 00 00 00 00 00 ef 03 c0 30 ef 03 00 00 09 00  .........0......
 0000030: b2 00 00 00 a1 a0 00 00 00 40 00 00 00 00 00 00  .........@......
 0000040: 04 40 00 00 00 00 00 00 00 00 00 00 08 40 00 00  .@...........@..
 0000050: 2c 40 00 00 28 40 00 00 04 02 00 04 04 04 10 00  ,@..(@..........
 0000060: 5a 00 84 03 00 00 00 00 01 01*0d*00*00 00 00 00  Z...............
 0000070:*a5*04 00 00

Dieses Mainboard (Gigabyte GA-6OXM) unterstützt also das Aufwachen aus S4 (0xA5 = 10100101b) und das Setzten des Tages, nicht aber das Setzen des Monats.

[Bearbeiten] Hinweise

  • Manche Mainboards sind etwas begriffsstutzig, so dass die Weckzeit zweimal in /proc/acpi/alarm geschrieben werden muss. Die Gentoo-VDR-Skripte machen das bereits.
  • Manche Mainboards wachen nicht auf, wenn nach dem Speichern der Aufwachzeit die Hardwareuhr verändert wird, was meist beim Herunterfahren mittels eines Init-Skriptes geschieht. Die meisten Distributionen halten einen Parameter in ihren Init-Skripten oder Konfigurationsdateien bereit, um dieses zu deaktivieren. Alternativ kann man das Skript auch so modifizieren, dass es direkten ISA-Zugriff verwendet. Dazu dem hwclock-Aufruf "hwclock --systohc" zusätzlich den Parameter "--directisa" mitgeben. Das Skript findet man mit:
 grep "hwclock" /etc/init.d/*
weitere ausführliche Lösungen für debian, ubuntu, redhat, suse mythtv.org
nur debian systeme: /etc/init.d/hwclock.sh editieren, unter help.ubuntu.com
  • Wenn ein Board aus S4 aufwachen kann, ist die Chance groß, dass es auch aus dem SoftOff erwacht, auch wenn dies vom ACPI-Standard nicht vorgesehen ist.
  • ACPI-Wakeup ist verwandt mit der BIOS-Option "Wake on RTC", bei der man im BIOS eine Aufwachzeit einstellt. Diese Option muss je nach Mainboard mal aktiviert, mal deaktiviert sein, damit ACPI-Wakeup funktioniert.

[Bearbeiten] ACPI Test Skript

Datei
acpi-test.sh
#!/bin/bash
# Startet dem Rechner nach 3 Minuten über ACPI neu.

DEV=/sys/class/rtc/rtc0/wakealarm
#DEV=/proc/acpi/alarm              # Fuer Kernel < 2.6.22

nextboot=`date --date "now +180 seconds" "+%s"`
echo 0 > $DEV
echo $nextboot > $DEV  # Einige Mainboards sind etwas begriffsstutzig,
#echo $nextboot > $DEV  # sie kapieren erst nach zwei Aufrufen, was Sache ist.


echo "Aktuelle Zeit:         "`date "+%Y-%m-%d %H:%M:%S"`
echo
cat /proc/driver/rtc
echo
echo "Fahre Rechner runter."

#busybox poweroff
#/usr/bin/poweroff.pl
poweroff



[Bearbeiten] VDR Shutdown Skripts

Meine BIOS-Uhr läuft mit lokaler Zeit (UTC=no in /etc/rcS bzw. /etc/defaults/rcS) - deshalb funktioniert bei mir folgendes Skript:

Datei
poweroff-localtime.sh
#!/bin/sh
sudo hwclock --systohc --localtime
 
DEV=/sys/class/rtc/rtc0/wakealarm
#DEV=/proc/acpi/alarm              # Fuer Kernel < 2.6.22
 
#ACPI
echo "Arguments:  $*"
echo "Next timer: $1 seconds from 1970/01/01, UTC"
echo "Next timer: $2 seconds from now"

naechsterTimer=$(/bin/date --date "now +$2 seconds" "+%s")
#naechsterTimer=$(/bin/date --date "now +$2 seconds" "+%Y-%m-%d %H:%M:%S")# Fuer Kernel < 2.6.22
 
sudo chmod a+wr  $DEV
 
# wakealarm löschen (wenn schon gesetzt, muss er gelöscht werden)
echo 0 >  $DEV
#alarm setzen
echo $naechsterTimer > $DEV
echo $naechsterTimer > $DEV
 
sudo /sbin/shutdown -h now
EXITSTATUS=0
exit $EXITSTATUS


Anmerkung: der VDR ruft dieses Skript mit den Parametern "Uhrzeit des nächster Timerevent in utc" und "Sekunden bis dahin" wie unschwer zu erkennen ist bezieht sich $2 bei der Zuweisung von naechsterTimer auf diesen zweiten Parameter.

Eine Alternative unter Verwendung der lokalen Zeit (MET/CEST) die auf den ersten übergebenen Parameter zurückgreift:

Datei
poweroff-localtime2.sh
#!/bin/sh
hwclock --systohc --localtime

DEV=/sys/class/rtc/rtc0/wakealarm
#DEV=/proc/acpi/alarm              # Fuer Kernel < 2.6.22
DATE=/bin/date
        
        if [[ `$DATE` =~ "CEST" ]]; then
                TIMER=`echo "$1 + 2 * 60 * 60" | bc`;
        else
                TIMER=`echo "$1 + 60 * 60" | bc`;
        
        fi
 
echo 0 > $DEV
echo $TIMER > $DEV
 
/sbin/shutdown -h now
EXITSTATUS=0
exit $EXITSTATUS


Anmerkung: Dieses Skript funktioniert bei lokaler Zeit, da es zuerst überprüft ob momentan Sommer-/Winterzeit ist und anschließend zur UTC 1, bzw. 2 Stunden dazurechnet um die korrekte Zeit zum Aufwachen zu setzen.


Bei Verwendung der GMT-Zeit (UTC=yes,HWCLOCKACCESS=no in /etc/default/rcS):

Datei
poweroff-utc.sh
#!/bin/bash

offset=$(($2 - 300 ))
if [ "$offset" -lt "60" ] ; then
echo "ABORT_MESSAGE=\"Next timer will be here soon!\""
EXITSTATUS=1
exit $EXITSTATUS

else

  if [ "$UID" -ne "0" ]  # Try only as real "root"
  then
    sudo bash "$0" "$1" "$2" "$3" "$4" "$5"
    exit $!
  fi

# sync system clock to RTC
hwclock --systohc --utc

NextTimer=$(($1 - 300 ))  # Start 5 minutes earlier

#ACPI Device
DEV=/sys/class/rtc/rtc0/wakealarm

echo "0" > $DEV
echo $NextTimer > $DEV

EXITSTATUS=0
fi
/sbin/shutdown -h now

exit $EXITSTATUS


[Bearbeiten] Liste getesteter Mainboards

Hier eine Liste von Mainboards, bei denen das Aufwachen per ACPI funktioniert oder aber auch nicht funktioniert.

Von VDR-Benutzern werden erfolgreich bzw. nicht erfolgreich eingesetzt:

Ubuntu 8.10 (32 Bit) // Uhrzeit und Tag einstellbar
Mainboard ACPI i.o. systohc bug-free Hinweise/Besonderheiten
Acer FMCP7A-ION ja Acer Revo 3610
Asrock A780GMH/128M nein
Asrock M3N78D ja
Asrock N68C-S UCC ja
Asus P2B-DS ja Board-Rev. ist 1.06 D03. Mainboard muss zunächst aus der Blacklist für ACPI entfernt werden, da ältere Revisionen offensichtlich einen Bug im ACPI-Support hatten.
Asus M3N WS ja problemlos
Asus A7V333-X ja
Asus A8V Deluxe ja
Asus P48X ja
Asus P5B WIFI Deluxe AP ja
Asus P5GD1 PRO ja nein
Asus P5QL Pro ja Wakeup per RTC muss im BIOS deaktiviert sein.
Asus P5K ja nein Wakeup per RTC muss im BIOS deaktiviert sein.
Asus P8H67-M EVO jein ja? Wakeup funktioniert nur wenn im suspend oder hibernate Modus und wenn RTC im BIOS aktiviert ist (bzw. eine der Anderen Wakeup Funktionen).
Asus Pundit P1-AH2 ja nein Wakeup per RTC muss im BIOS deaktiviert sein.
Asus M2A-VM (HDMI) ja nein 1.) Im BIOS: APM Configuration - Power on by RTC Alarm = "disabled"

Bei Kernel >= 2.6.22 muss zusätzlich der Kernel-Parameter hpet=disable gesetzt werden.

Asus M4A87TD/USB3 - Bios Vers.2001 ? ? Im Bios: bei APM RTC Disabled, Aufwachen geht über localtime und deaktivierter hwclock-Aktualisierung beim shutdown, sudo sh -c "echo `date -u --date "2011-06-30 18:51:00" +%s` > /sys/class/rtc/rtc0/wakealarm" (/sys/class/rtc/rtc0/wakealarm auf null setzen nicht nötig)
Asus M3N78-EM ja
Asus M3N78-VM (HDMI) ja IMHO ja 1.) Im BIOS: APM Configuration - Power on by RTC Alarm = "disabled"

getestet mit /sys/class/rtc/rtc0/wakealarm

Asus M3N78-PRO (HDMI) ja IMHO ja 1.) Im BIOS: APM Configuration - Power on by RTC Alarm = "disabled"
Asus M4A77T (BIOS V2401) ja 1.) Im BIOS: APM Configuration - Power on by RTC Alarm = "disabled"

Zusätzlich muss der Kernel-Parameter hpet=disable gesetzt werden.

Asus M4A78-PRO ja nein 1.) Im BIOS: APM Configuration - Power on by RTC Alarm = "disabled"

Zusätzlich muss der Kernel-Parameter hpet=disable gesetzt werden.

Asus M4A785TD-M EVO ja Power -> ACPI APIC support: Disabled

Power -> ACPI 2.0 Support: <egal>

Power -> APM Configuration -> Power on From S5 By ...: <egal>

Asus M4A78LT-M (BIOS 0802) ja IMHO ja Power on by RTC Alarm = "disabled". Zusätzlich muss der Kernel-Parameter hpet=disable gesetzt werden.
Asus M4A78LT-M LE ja IMHO ja Keine Änderungen im BIOS. Zusätzlich muss der Kernel-Parameter hpet=disable gesetzt werden.
Asus M2NPV-VM ja nein Im BIOS: APM Configuration - Power on by RTC Alarm = "disabled"
Asus M2R68L (P2-M2A690G Barebone) ja nein Im BIOS: APM Configuration -> Power on by RTC Alarm = "disabled"

Bei Kernel >= 2.6.22 muss zusätzlich der Kernel-Parameter hpet=disable gesetzt werden.

Asus T3-M3N8200 (Barebone) ja n/a Funktioniert mit Kernel-Parameter hpet=disable (ohne habe ich nicht getestet)
Asus M3A-H/HDMI ja nein Im BIOS: Power -> APM Configuration -> Power on by RTC Alarm = "disabled"
Asus M4A88T-M USB3.0 ja Im BIOS: Power -> ACPI 2.0 Support "Disable", /etc/default/grub "hpet=disable"
Asus M5A78L-M/USB3 ja Im BIOS: Power -> APM Configuratiom "Power on From S5 by PME#" -> "Enable", /etc/default/grub "hpet=disable"
DFI CA63-SN ja Resume on Alarm muss im BIOS aktiviert sein und Datum und Zeit müssen alle auf 0 stehen.
ELITEGROUP GF8200A ja
Gigabyte GA-6VEML ja mit BIOS v7
Gigabyte GA-8I915G-MF ja ja nvram + S3

S3 --> hwclock --systohc --directisa && sync && sleep 3s && s2ram --force

Gigabyte GA-K8VT800 PRO ja nein 1.) Im BIOS: APM Configuration -> Power on by RTC Alarm = "disabled"
Gigabyte GA-5AX ja 1.) Im BIOS: APM Configuration -> PM by APM - RTC Alarm = "enabled" und feste Zeit eingestellt

(vermutlich egal, startet so aber nach zu langem Stromausfall das nächste Mal mit der eingestellten Zeit)

2.) Ist mit dem ACPI Test-Script nach 3 min neu gestartet (Nach Abzug von 1std. im Script, wegen "CET-Zeit")

Gigabyte GA-B85M-HD3 ja
Gigabyte GA-H67A-UD3H-B3 ja Im BIOS: Power on by RTC Alarm = "disabled", HPET = 64 Bit. hpet beim Kernel nicht disabled. dmesg sagt "rtc0: alarms up to one month, 242 bytes nvram, hpet irqs".
Gigabyte GA-M61P-S3 ja nein 1.) Im BIOS: APM Configuration -> Power on by RTC Alarm = "disabled"
Gigabyte GA-MA770T-UD3 Rev. 1.2 ja  ? (ja) Im Bios: Power Management Setup -> HPET Support = "disabled", funktioniert nicht, wenn enabled. Mit Ubuntu 10.04 Standard-Config kein Problem mit systohc feststellbar.
Gigabyte GA-MA78GM-S2H (rev.1.1) BIOS F5 ja  ? getest mit 2.6.27.7 rtc_cmos und hpet=disable
Gigabyte GA-MA78GM-S2H (rev.1.0) BIOS F11 ja ja HPET Support Disabled und Power-On by Alarm Disabled im BIOS, Ubuntu 10.04.1 Standard-Kernel, funktioniert mit 1x schreiben nach wakealarm.
Gigabyte GA-MA78G-DS3H (Rev: 2.0) ja 1) Im BIOS: Power Management Setup -> Power on by Alarm = Disabled

2) Dem Kernel hpet=disable mitgeben (Kernel)

Gigabyte GA-MA78GM-UD2H ja  ? kernel 2.6.31.6 "hpet=disable" übergeben und im BIOS (Menüpunkt: Power Management Setup) "Power-On by Alarm" ebenfalls auf disable gesetzt
Gigabyte M85M-US2H ja ja ?
  • Im BIOS: APM Configuration -> Power on by RTC Alarm = "enabled"
  • Ubuntu Kernel 2.6.32-30-generic
  • hpet=diable als boot-parameter
IBM ThinkCentre M55p C2D ja getestet mit Debian Squeeze und e-tobi vdr-Paketen
Intel DH67CL ja
  • BIOS 0122
  • Wakeup per RTC wurde im BIOS deaktiviert.
  • debian 6 "squeeze" mit 2.6.38-bpo
  • /etc/default/rcS: HWCLOCKACCESS=no (evtl. unnötig)
Jetway NF9C-2600 ja ja debian 6 squeeze mit backport kernel 3.2.0-0.bpo.1-686-pae
MSI K8N NEO-FSR V2.0 S.754 (Version 3.0) ja Nur Uhrzeit, kein Tag einstellbar.
MSI MS-6723 ver:1 (OEM Board im REAL Digitainer) ja Wakeup per RTC wurde im BIOS deaktiviert.

BIOS 6.02 und Kernel 2.6.23.9

MSI MS-7318 (OEM Board im Medion 8818) ja nein Wakeup per RTC wurde im BIOS deaktiviert.

ubuntu 8.04

MSI K9AG Neo2-Digital ja sowohl per /proc/acpi/alarm als auch /sys/class/rtc/rtc0/wakealarm im BIOS 'Resume by RTC Alarm' disabled.
MSI 945GCM478 ja  ? BIOS V1.0 Rev. 0422208. Einstellungen im Power Management: ACPI Function -> Enabled, ACPI Standby State -> S1, Wake Up Event by -> OS
MSI 945GT Speedster-A4R ja nein Mit /proc/acpi/alarm oder /sys/class/rtc/rtc0/wakealarm und im BIOS 'Resume by RTC Alarm' disabled.

Mit aktuelle Debian Lenny linux-image-2.6.26-13 klappt es aber nicht (/proc/driver/rtc sieht richtig aus aber kein wakeup!).

Fungiert wieder mit z.b. Sidux linux-image-2.6.27+ wie in http://www.vdrportal.de/board/thread.php?threadid=83028 .

NMC 8TAX+ ja  ? Das Board ist baugleich mit Enmic 8TAX+.
Shuttle XPC SN68SG2 ja nein 1.) Im BIOS: APM Configuration -> Power on by RTC Alarm = "disabled"
VIA EPIA 800 nein Nur Wecken per set_timer funktioniert.
VIA EPIA ML5000 ja Ist mit dem ACPI Test-Script aus dem Standby gestartet.
VIA EPIA ME6000 ja nein Kernel 2.6.26, RTC auf UTC, BIOS 1.13
VIA EPIA ME6000G nein siehe NVRAM_WakeUp
VIA EPIA M10000 ja nein Wakeup per RTC muss im BIOS deaktiviert werden.
VIA PC2500 ja nein Wakeup per RTC muss im BIOS deaktiviert werden.

In /etc/default/rcS einfügen: HWCLOCKACCESS=no

VIA SP13000 ja ja
VIA EPIA EN 15000G ja ja Wakeup per RTC muss im BIOS deaktiviert werden.

echo "2010-03-28 23:07:00" > /proc/acpi/alarm Wacht aus S3 (Suspend2Ram) auf.


systohc bug = einige Mainboards wachen nicht auf, wenn nach dem setzen der Weckzeit die Hardwareuhr per hwclock --systohc aktualisiert wird. (bei vielen Distributionen der Fall) Details siehe auch im Abschnitt Hinweise innerhalb dieses Artikels.

[Bearbeiten] ACPI Schlafmodus

Mit ACPI kann man ausserdem das System schlafen legen, wenn das Mainboard mitspielt. Je nach BIOS werden verschiedene Modi unterstützt, S1 (Standby), S3 (Suspend to RAM) oder S4 (Suspend to Disk). Im Gegensatz zum vollständigen Shutdown braucht das Reaktivieren des Systems viel weniger Zeit.

S1: CPU und einige andere Komponenten werden abgeschaltet. Das ist die einfachste, schnellste Variante, die aber auch am wenigsten Strom spart.

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

S3: Ausser dem Speicher wird alles abgeschaltet. Der Inhalt des Speichers bleibt so erhalten. Beim Einschalten kehrt das System zum ursprünglichen Zustand zurück. Man muss jedoch drauf achten, dass vor dem Abschalten alle Dateisysteme unmounted werden (vor allem Festplatten oder Netzwerk-Dateisysteme), da sonst Datenverlust droht. Ausserdem sollte VDR beendet und die DVB-Treiber entladen werden, weil die DVB-Karten auch abgeschaltet werden und beim Reaktivieren neu initialisiert werden müssen.

 /etc/init.d/vdr stop
 /etc/init.d/dvb stop
 echo -n "mem" > /sys/power/state
 /etc/init.d/dvb start
 /etc/init.d/vdr start

S4: Suspend to disk (aka Ruhezustand). Der Arbeitsspeicher inkl. Videoram wird auf der Swap-Partition abgelegt. Diese Partition muss als Kernelbootoption mit resume=/dev/sdxy übergeben werden - oder wenn suspend to disk nur verwendet wird, da das Board aus S5 nicht aufwacht, man jedoch auf einen sauberen Bootvorgang angewiesen ist, dann kann man auch in /etc/rc.local folgende Sequenz einfügen:

 swapoff -a
 mkswap /dev/sdxy
 swapon -a

Kommando für S4:

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

[Bearbeiten] Links

  1. http://linvdr.org/wiki/index.php?%20pagename=LinVDR-Mainboards
  2. acpi-wakeup-0.1.tar.bz2
  3. Anleitung
  4. "Computer programmgesteuert aufwecken" von Mirko Dölle, Linux-Magazin 8/2004
  5. ACPI-Projekthomepage (Dokumentation, Kernel-Patches, Wiki)
  6. ACPI 2.0 Spezifikation, Compaq/Intel/Microsoft/Phoenix/Toshiba 27. Juli 2000
In anderen Sprachen