NVRAM-WakeUp (C) 2001-2004, Sergei Haller $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 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