NVRAM WakeUp
Inhaltsverzeichnis |
Autor
Sergei Haller (bistr-o-math)
Einleitung
NVRAM-Wakeup ist ein Programm, das dafür sorgt, dass ein Rechner zu einem bestimmten Zeitpunkt selbständig aus dem ausgeschalteten Zustand startet. Dazu verwendet NVRAM-Wakeup die Fähigkeiten des BIOS, den Rechner mittels Echtzeituhr-Alarm (RTC RealTimeClock) automatisch zu starten. Diese Fähigkeit wird von den meisten Mainboards mit ATX-Formfaktor und auch einigen AT/BAT-Mainboards mit ATX-Buchse unterstützt. Neuere Mainboards unterstützt als bessere alternative ebenfalls ACPI Wakeup.
NVRAM-Wakeup hängt nicht vom VDR ab sondern ist ein eigenständiges Programm, kann aber sehr gut zum automatischen Starten des VDR-Rechners rechtzeitig zur nächsten Aufnahme benutzt werden.
Im Normalfall wird es im Shutdown-Skript aufgerufen, welches den Zeitpunkt des nächsten Timers übergeben bekommt.
NVRAM-Wakeup zieht von dieser Zeit dann noch einmal fünf Minuten ab (damit der Rechner zum Zeitpunkt der Aufnahme bereits fertig gebootet hat und rund läuft) und schreibt den Aufwachzeitpunkt in den NVRAM.
Fünf Minuten nach erfolgter Aufnahme lässt VDR den Rechner automatisch herunterfahren, sofern keine Benutzeraktivität auftrat und kein weiterer Timer innerhalb der nächsten MinEventTimeout Minuten ("Mindest Event Pause") liegt.
Während dieser fünf Minuten wird der Hinweis "Taste drücken um Shutdown abzubrechen" eingeblendet, um einem eventuell doch anwesenden oder hinzu kommenden Benutzer eine Abbruchmöglichkeit zu geben.
Der jeweils neueste Quelltext (und damit der aktuelle Stand was die Unterstützung von Mainboards angeht) kann von der Projektseite bezogen werden.
Liste funktionierender Mainboards
Grundsätzlich lässt sich jedes Mainboard mit Nvram-Wakeup betreiben.
Man unterscheidet hier zwischen Mainboards, die einen Reboot benötigen und solchen, die keinen Reboot benötigen. Bei ersteren kann die neue Aufwach-Zeit im BIOS nur aktiviert werden, wenn sie nach dem Eintragen der Zeit nochmals bis zum Laden des Kernels gebootet werden. Letztere können nach dem Setzen der Zeit einfach per APM abgeschaltet werden.
Bei manchen Mainboards (z.B. EPIA M10000) muss im Bios "Instant Off" unter Power Management gewählt sein!
Eine Liste von Haus aus unterstützter Mainboards befindet sich auf der Projektseite. [1]
Weitere Möglichkeiten eine nvram-wakeup.conf für das jeweilige Mainboard zu finden: Mainboard spezifische NVRAM Einstellungen / [2]
Von VDR Nutzern werden erfolgreich/nicht erfolgreich eingesetzt:
Mainboard | Reboot | Besonderheiten |
Abit KV7 | ja | Reboot nur ON_STAT notwendig |
Abit KT7 | ja | IWNAME: bio_m6vcg |
Abit AV8 | ja | - |
Abit ANM-2 | ja | --directisa, reboot und poweroff-kernel, nvram-wakup.conf: addr_stat = 0x4A ; shift_stat = 3 ; addr_day = 0x4C ; addr_hour = 0x4D ; addr_min = 0x4E ; addr_sec = 0x4F; addr_chk_h = 0x6D; addr_chk_l = 0x6E ; upper_method = VT82Cxxx |
Abit IP35 PRO | ja | Bios ID: 17 |
Abit NF-M2SV | ja | - |
AOpen AX6BC | ja | BIOS Version 2.59, nvram-wakeup.conf: need_reboot = ON_ANY_CHANGE ; addr_day = 0x47 ; addr_hour = 0x48 ; addr_min = 0x49 ; addr_sec = 0x4A ; addr_stat = 0x4D ; addr_chk_h = 0x6F # guessed ; addr_chk_l = 0x70 |
ASRock AM2NF3-VSTA | nein | --directisa und upper_method = VT8235_37 |
ASRock K7VT4A+ | ja | - |
ASRock K7VM2 | ja | - |
ASRock K7S41GX | nein | Bios v2.80, iwname:asrock_k7s41gx, --directisa ist anzugeben |
ASRock K7S8X Rev. 3.0 | Ja | Bios V2.5 wird direkt erkannt, V2.6 nicht |
Asrock K8Upgrade-NF3 | nein | Bios Version 1.0 - 1.5 mit guess-helper (Chipsatz Auswahl: "v"). --directisa ist anzugeben |
Asrock K8NF4G-SATA2 Rev 1.0 | nein | Bios Version 1.70 mit guess-helper (Chipsatz Auswahl: "v"). --directisa ist anzugeben |
Asrock ALiveNF7G-HDReady | nein | Bios Version 1.90 mit guess-helper (Chipsatz Auswahl: "v"). --directisa ist anzugeben, Tipps |
Asrock P4i65G | ja | mit --directisa, nvram-wakeup.conf mit guess-helper erstellt |
Asus A7N8X-VM-400 | ja | BIOS Version: 1004.009 |
Asus A7V333-X | nein | Läuft mit "asus_a7v8x" out of the box. |
Asus A7V600-X | nein | ist jetzt im neuesten CVS enthalten (ist gleich wie A7V600) |
Asus A7V400-MX | nein | BIOS 1009, mit --directisa |
Asus A7v8x-x | nein | - |
Asus A7V8X | nein | ab Bios 1013 mit --iwname asus_a7v8x (der Parameter funktioniert auch mit dem latest beta-Bios 1015.003, das zusätzlich Wake-On-Lan beherrscht) |
Asus CUSL-2(C) | nein | --directisa klappt ohne Reboot |
Asus CUV4X-E | nein | OpenSuse 10.2 - Bootoption ACPI=off APM=power-off |
Asus CUV4X-M | ja | funktioniert mit Bios Version 1007 und option "-I asus_cuv4xe --directisa". |
Asus M2A-VM | ja | mit --directisa. Re-Boot und Power-Off-Kernel erforderlich. mehr |
Asus M2N-VM DVI | ja | mit --directisa. Re-Boot und Power-Off-Kernel erforderlich. mehr |
Asus M2NPV-VM | ja | mit --directisa. Re-Boot und Power-Off-Kernel erforderlich. |
Asus M3N78-EM | ja | mit --directisa. Re-Boot und Power-Off-Kernel erforderlich. |
Asus P2B-F | ja | - |
Asus P3B-F | ja | mit --directisa. Außerdem darf hwclock beim Shutdown nur mit --directisa verwendet werden (Init-Skript hwclock.sh anpassen). |
Asus P4P800-VM | ja | mit --directisa. |
Asus P4PE | nein | - |
Asus P4S533-MX | nein | - |
ASUS P4S8L | ja | Bios Vers. 1005, wird von neuester NVRAM-Version automatisch erkannt. |
Asus P5A | nein | Kernel muss für 128 Bytes in NVRAM-Treiber gepatched sein. (oder seit Version 0.95 die --directisa Option benutzen) |
Asus P5B | nein | BIOS version "0806": addr_min = 0x50, addr_sec = 0x58, addr_day = 0x5D, addr_hour = 0x5E, addr_stat = 0xE0, shift_stat = 3, addr_chk_h = 0x30, addr_chk_l = 0x31, upper_method = INTEL |
ASUS P5LD2-VM | ja | Bios Version: 1401 |
ASUS P5VD2-X | ja | Konfiguration |
Asus TUSL2 | nein | Reboot unnötig. Ab c't VDRDevel 1.3.36 (=4.5) funktioniert alles mit Standardeinstellungen (Tipps [[C%27t-VDR_-_Leitfaden_f%FCr_Einsteiger#NVram-Wakeup|hier]]) |
Biostar M7VKA | nein | Bios von Okt. 2000 |
Asus TUSL2-C | ja | - |
DFI K6BV3+ | nein | BAT-Format mit ATX-Anschluss |
DFI Infinity NF4 Ultra-U | ja | Konfiguration: DFI_Infinity_NF4_Ultra-U |
Elitegroup K75SA | ja | benötigt die Option --directisa; es gibt mehrere, verschiedene BIOS-Versionen, die sich alle als 1.0 identifizieren - hier muss ggf. manuell die richtige Version gesucht werden (siehe Projektseite) |
Elitegroup KT600-A | nein | Konfiguration |
Elitegroup L7VMM2 | nein | benötigt die Option --directisa |
Elitegroup RS485M-M | ja | benötigt die Option --directisa |
Epox 8KTA3+ Pro | ja | Reboot beim Statuswechsel (Enabled / Disabled) notwendig |
Foxconn 6150K8MD-8EKRSH | ja | µATX-Board / Sockel 939 / nforce-Chipsatz |
Gigabyte GA-5AX | ja | - |
Gigabyte GA-6WMMC7 | ja | - |
Gigabyte GA-7IX | ja | Zuverlässiger Slot-A-Dino, Reboot ON_ANY_CHANGE |
Gigabyte GA-7N400E-L | ja | - |
Gigabyte GA-8SIMLH | nein | - |
Gigabyte GA-K8NS-Ultra 939 | ja | Reboot immer notwendig, auch ohne Zeitänderung |
Gigabyte M78SM-S2H | ja | wurde per guess-helper erstellt, als Option wurde VIA VT82Cxxx angegeben (Die Option "unbekannt" funktionierte nicht!) |
Gigabyte MA785GM-US2H | ja | wurde per guess-helper erstellt, als Option wurde VIA VT82Cxxx angegeben |
Gigabyte 73PVM-S2H | ja | per guess-helper erstellt, als Option VIA VT82Cxxx verwendet und im Ergebnis den doppelten Eintrag addr_stat = 0x6D entfernt. Das Mainboard erfordert einen Reboot um den neuen Wert zu verwenden zu können. |
MSI 6701 entspricht Medion MD 5000 | ja | need_reboot=ON_ANY_CHANGE, addr_stat=0x32, shift_stat=1,addr_chk_l =0x6F, addr_chk_h=0x70 |
MSI 6156 | nein | MS-6156 (VT693). Funktioniert über directisa ohne Neustart |
MSI 6318 | ja | Guess-Helper erkennt das Mainboard, allerdings nur mit BIOS Rev. 1.9 oder höher! Mainboard aus Medion 2000 PC |
MSI 6340 | ja | Guess-Helper erkennt Board zuverlässig- Option "--directisa" ist anzugeben |
MSI 6535 / Hermes 651 | ja | Option -I msi_6535_20b, -I msi_6535 oder -I msi_6535_oldbios (für BIOS 2.0B, 1.2, 1.0 bzw 1.1). Option -C /etc/nvram-wakeup.conf nicht angeben |
MSI 6570 | ja | Guess-Helper brachte falsche Werte für "addr_chk_h" und "addr_chk_l" Board ist bekannte, aktuelle Bios Version nicht, funktioniert mit Option -I msi_ms_6570 |
MSI 6723 | ja | Guess-Helper erkennt Board zuverlässig- Option "--directisa" ist anzugeben Board aus Digitainer von Medion |
MSI 694T Pro | nein | - |
MSI 6398E | ja | - |
MSI 6368 | ja | - |
MSI K8N Neo2 (MS-7025) | ja | Guess-Helper erkennt das Mainboard, mit option "--directisa". Braucht leider nen Reboot, damit der Timer funktioniert. |
MSI KT6V (MS-7021) | ja | Guess-Helper erkennt das Mainboard. Es geht sowohl mit als auch ohne "--directisa". Braucht leider nen Reboot, damit der Timer funktioniert. |
MSI K8MM3-V (MS-7181) | ja | getestet mit Board-Rev 1.0 (BIOS 1.1 + 1.5) und Rev. 2.0 --- µATX-Board / Sockel 754 / VIA-Chipsatz |
PC-Chips M810DLU (Pro2000A+) | ja | IWNAME: ecs_k7som_p (Option -I ecs_k7som_p) --- µATX-Board mit Mobile-Athlon 950 / SIS-Chipsatz |
Shuttle SK21G | ja | Guess-Helper erkennt die Parameter nicht zuverlässig, Config-File hier |
Tekram P5M4-M Rev. 1.x | ja | Reboot nur ON_STAT notwendig. |
VIA EPIA VE5000 | - | NVRAM-WakeUp erkennt das Mainboard nicht und kann die RTC-Parameter nicht ermitteln. Daher sollte set_timer verwendet/versucht werden (s. u.). |
VIA EPIA ML5000A | ja | - |
VIA EPIA ML8000A | nein | ohne --directisa Im Powermanagement "Instant Off" ausgewählt |
VIA EPIA ME6000G | ja | BIOS release: "05/19/2004"; BIOS version: "6.00 PG"; BIOS vendor: "Award Software International, Inc." |
VIA [[C%27t-VDR_-_NVRAM_Wakeup_f%FCr_VIA_EPIA_M10000 | EPIA M10000]]B | ja | im Bios "Instant Off" unter Power Management wählen! Braucht "Reboot On_Any_Change", --directisa ist unnötig! |
VIA EPIA SP8000 | ja | Braucht "Reboot On_Any_Change" |
VIA EPIA SP13000 | ja | - |
VIA EPIA CN10000G | ja | Funktioniert mit --directisa, benötigt "need_reboot = ON_ANY_CHANGE" |
VIA EPIA CN700-8237R | ja | Funktioniert mit "need_reboot = ON_ANY_CHANGE", --directisa ist unnötig! |
Für Mainboards, die nur Wake on Time (keinen Datumseintrag) unterstützen (z.B. ASUS A7N8X-Deluxe) gibt es eine Lösung: Wake on time
Wenn NVRAM nicht mit dem verwendeten Mainboard funktioniert, bleibt noch die Möglichkeit der Wakeup-Hardwarelösung.
Installation
Allgemein
- herunterladen
- auspacken
- README lesen
- folgendes ausführen:
make devices make make install man nvram-wakeup nvram-wakeup -D
- wenn man Glück hatte, war's das schon
- wenn das Board nicht unterstützt wird. Halb-automatisch anlernen:
- guess-helper ausführen. Das funktioniert so: VDR booten lassen, sich dann in der Console anmelden und einfach guess-helper eingeben. Return -> und der Anleitung folgen
- Mit der fast fertigen nvram-wakeup.conf die Anleitung aus README.reboot durchgehen um zu testen ob das Mainboard einen Reboot braucht.
Dieses dann in nvram-wakeup.conf eintragen.
- wenn die generierte nvram-wakeup.conf nicht funktioniert, im VDR Portal im NVRAM-Forum posten.
Distributionsspezifisch
Mit set_timer für problematische Boards (ansonsten weiter zum checkscript, s.u.)
Falls nvram_wakeup das Mainboard nicht kennt und auch guess-helper.sh zur Parameter-Ermittlung nicht weiter hilft gibt es noch ein Script, das im Paket NVRAM-Wakeup enthalten ist und welches immer zum Ziel führen sollte. Das Skript heißt set_timer.
- Installation ist im Skript selbst beschrieben siehe hier
Checkscript Beispiele
Im Header der vdrshutdown finden sich bereits ein paar Beispiele, alternativ ist auch das Skript unter checkscript.sh ein guter Startpunkt. Nicht vergessen das Skript mit
chmod +x checkscript.sh
nach dem Erstellen ausführbar zu machen. Anschließend muss in dem vdrshutdown-Skript (im CTVDR /usr/share/doc/nvram-wakeup/examples/vdrshutdown) folgende Variable angepasst werden. (Bsp.)
CHECKSCRIPT=/usr/local/bin/checkscript.sh
Testen, ob die WakeUp-Daten (Tag, Zeit, WakeUp An/Aus) korrekt im BIOS gesetzt werden mit folgender Kommandozeileneingabe:
nvram-wakeup -C /etc/nvram-wakeup.conf --directisa -s $(date +%s -d +10minutes)
oder falls man kein directisa benötigt und das Board bekannt ist:
nvram-wakeup -s $((`date +%s` + 20 * 60))
Wenn nach dem Herunterfahren im BIOS Eintrag dann die Zeit des Eintrages +20 Minuten eingetragen ist, dann kann man den VDR ausmachen und warten, ob das System dann angeht.
Wenn dies geht, dann liegt der Fehler bei der Einbindung ins VDR.
Wenn er nicht angeht, liegt es eventuell am nicht erfolgten Reboot, den manche Mainboards, wie oben beschrieben erfordern. Man kann auch mal testen, ob das Mainboard wenigstens angeht, wenn man von Hand im BIOS ein WakeUp-Event einträgt, ob er dann zur eingestellten Zeit angeht.
WakeUp nach einfachem Herunterfahren
Schaltet man den Computer nicht über die Fernbedienung oder aus dem VDR-Menü aus, wird mit obiger Variante nicht in den NVRAM geschrieben, da VDR dann das Shutdown-Skript nicht ausführt. Deswegen sollte man in diesem Fall den folgenden Befehl vor einem kill des VDR ausführen (in der Regel in /etc/init.d/vdr):
wakeup=$(svdrpsend.pl -d localhost NEXT abs|grep 250 |cut -f3 -d' '|tr -d '\r') nvram-wakeup -s ${wakeup:-0}
Bei ct'VDR in der Version 5.x muss der Eintrag so heißen:
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/lib/vdr/ wakeup=$(svdrpsend.pl -d localhost NEXT abs|grep 250 |cut -f3 -d' '|tr -d '\r') nvram-wakeup -s ${wakeup:-0}
Snapshot
svn co https://nvram-wakeup.svn.sourceforge.net/svnroot/nvram-wakeup nvram-wakeup