NVRAM-WakeUp
(C) 2001-2004, Sergei Haller <Sergei.Haller@math.uni-giessen.de>
$Id: README 870 2008-09-06 20:48:34Z tiber $
This is a (small) program that can read and write the WakeUp time in
the BIOS (via /dev/nvram on kernels >= 2.4.6 or via direct I/O). On
this WakeUp time the computer will be powered on automatically from
the soft-off state.
The original purpose of this program is to be called by VDR (by Klaus
Schmidinger, see http://www.cadsoft.de/vdr/) so the machine which runs
VDR doesn't have to run all the time but can decide by itself when
to wake up after a shutdown.
The original idea I had from an email by Frank Klingenhoefer
<frank.private@t-online.de> on the linux-dvb mailinglist. See
http://linuxtv.org/mailinglists/linux-dvb/2001/08-2001/msg00457.html
In the directory VDR you will find a small script which you can pass
to VDR via the -s command line option.
---- WARNING: --------------------------------------------------------
This program writes into the NVRAM (used by BIOS to store the CMOS
settings). This is DANGEROUS. Do it at your own risk. Neither the
author of this program (nvram-wakeup) nor anyone else can be made
responsible to any damage made by this program in any way.
(The worst case happened to me is that on reboot the BIOS noticed the
illegal contents of the nvram and set everything to default values.
But this doesn't mean that you can't destroy even your whole computer.)
YOU HAVE BEEN WARNED.
----------------------------------------------------------------------
1. First of all you need a recent 2.4 kernel (2.4.6 or newer) with the
/dev/nvram and /dev/rtc drivers enabled (in the kernel or as
modules and in latter case the modules to be loaded.
NOTE for Kernels 2.6.x: You must enable "Enhanced RTC support". the
"generic /dev/rtc" is not enough.
Since release 0.95 of nvram-wakeup the device /dev/nvram isn't
necessary if run with --directisa option. But read the warning in
the man page.
If the character devices /dev/nvram, /dev/rtc or /dev/mem do not
exist on your system, you can create them (as root) with:
mknod /dev/nvram c 10 144
mknod /dev/rtc c 10 135
mknod /dev/mem c 1 1
or just (also as root)
make devices
in nvram-wakeup directory.
2. To compile nvram-wakeup just enter
make
on the command line. (You may want to take a look into Makefile)
Now run nvram-wakeup in debug mode and see if it can autodetect
your board. If it does and knows the addresses of this board,
you're done. Enjoy the program.
If it detects your board correctly but doesn't know it's
configuration, there are two choices:
- if you know that it worked with the old version (until 0.05) of
nvram-wakeup, please submit the output of biosinfo and the MB
number from the old version of nvram-wakeup.
- if not, read README.mb how to determine the addresses of your
board. And submit them to the author.
While waiting for the new release you can use the determined
addresses in a configuration file with the --configfile option
(read nvram-wakeup(5) for more info)
You may also look on the MB tracker list
http://sourceforge.net/tracker/?group_id=35022&atid=412959
or the latest SVN revision of the file boards.yaml
http://nvram-wakeup.svn.sourceforge.net/viewvc/nvram-wakeup/trunk/nvram-wakeup/boards/boards.yaml
if your board is already supported out-of-the-box in the CVS
version.
2a. The version 0.90 had a complete rewrite of large parts. Some of
the boards supported in the older versions may have gotten
incorrect autodetection strings in nvram-wakeup-mb.c. If it's true,
please submit the correct ones.
3. nvram-wakeup detects automatically at run time if your RTC clock is
running local time or UTC/GMT. (run nvram-wakeup with the --debug
option to see what it detected)
4. Run nvram-wakeup without options --settime or --disable. It will
only READ the wake up date and time. Check if the reported
date/time is correct. Do it several times. (Setting different
values via BIOS setup and reading them with nvram-wakeup.)
5. If you think it works always correct, you can try to specify the
--settime option to nvram-wakeup (you may want to use the --nowrite
option while testing). The (absolute) time is given as time_t value
(number of seconds since epoch).
NOTICE that you do not specify the time to be set in nvram but the
time at which the machine should be up and running. I.e.
nvram-wakeup will set the wakeup time WAKEUP_BEFORE minutes
before the time specified with the --settime option.
e.g. with
nvram-wakeup -s $((`date +%s` + 20 * 60))
you tell nvram-wakeup that you want the machine be up and running
in 20 minutes again. The actual wakeup time will be set to
20-WAKEUP_BEFORE minutes
in the future. If you want to specify the EXACT time to be set in
nvram, you can modify WAKEUP_BEFORE value to 0 in nvram-wakeup.h.
Further, there is a NEED_TO_SHTDWN constant in nvram-wakeup.h.
nvram-wakeup will refuse a wakeup time which is less than
(NEED_TO_SHTDWN + WAKEUP_BEFORE) minutes in the future.
If NEED_TO_SHTDWN is too small, it may happen that the wake up time
is passed while shutdown process, so the machine will wake up one
month or (on the boards, which store the month number) one year
later than expected.
Defaults for WAKEUP_BEFORE and NEED_TO_SHTDWN are 5 minutes each.
6. It should work now.
(Run
nvram-wakeup -s $((`date +%s` + 10 * 60))
reboot your computer and look into BIOS if the values are set
properly. Turn off the computer. Sit back. It will wake up
automatically.)
7. NOTE: on some boards (Asus AV7-133, AV7-266, TUV4X, ...) the
program hwclock isn't able to use the rtc device for getting CMOS
time if the wakeup is enabled in the BIOS. Please use the
--directisa option of hwclock.
8. NOTE: I had reports, that on Epia M boards some values (don't
remember, which, might have been seconds) are stored not correct
before first use. I.e., you must go to BIOS Setup, enter some
values different to those, which are there, leave BIOS setup with
saving. And then try nvram-wakeup.
9. Helper programs (see appropriate man pages for more information):
biosinfo
Prints board and bios information. Uses DMI-entries from
/dev/mem.
cat_nvram [option]
Dumps the contents of nvram to stdout using direct I/O
functions. The possible option is one of the values allowed
for upper_method (see `man nvram-wakeup.conf')
guess
Tries to guess the configuration from four dumps of nvram.
See README.mb for more information.
guess-helper
Helper for guess. See README.mb for more information.
rtc
Prints the RTC Alarm values using ioctls on /dev/rtc.
time <time>
Where <time> is number of seconds since epoch. Prints the
corresponding time in UTC and Local Time in human readable
form.
10. Further README's:
README.mb
This document should help you choose the right motherboard
settings.
README.reboot
This document should tell you on the reboot problems and the
possible ways to solve or work around them.
----------------------------------------------------------------------
Suggestions, success reports, failures etc. are very welcome. Either
write me an eMail or post it on
http://sourceforge.net/projects/nvram-wakeup/ - Tracker
or on the mailing list
http://sourceforge.net/mail/?group_id=35022
or in the forum
http://www.vdr-portal.de/board/board.php?boardid=9&sid=
----------------------------------------------------------------------
At http://home.t-online.de/home/hubertus.sandmann/vdr_wakeup.htm you
will find a nice detailed German introduction into nvram-wakeup.
(Thanks to Hubertus Sandmann)
----------------------------------------------------------------------
And please don't forget to send me your new configurations
(including the name and model of your motherboard)
Or post it at the BIOS/MB Tracker on the homepage.
It will be included in the next version of nvram-wakeup
----------------------------------------------------------------------