| |

|
|
Name
rtc — real-time clock
Synopsis
#include <linux/rtc.h>
int
ioctl( |
|
fd, |
| |
|
RTC_request, |
| |
|
param); |
DESCRIPTION
This is the interface to drivers for real-time clocks
(RTCs).
Most computers have one or more hardware clocks which
record the current "wall clock" time. These are called "Real
Time Clocks" (RTCs). One of these usually has battery backup
power so that it tracks the time even while the computer is
turned off. RTCs often provide alarms and other
interrupts.
All x86 PCs, and ACPI based systems, have an RTC that is
compatible with the Motorola MC146818 chip on the original
PC/AT. Today such an RTC is usually integrated into the
mainboard's chipset (south bridge), and uses a replaceable
coin-sized backup battery.
Non-PC systems, such as embedded systems built around
system-on-chip processors, use other implementations. They
usually won't offer the same functionality as the RTC from a
PC/AT.
RTC vs System Clock
RTCs should not be confused with the system clock, which
is a software clock maintained by the kernel and used to
implement gettimeofday(2) and
time(2), as well as
setting timestamps on files, etc. The system clock reports
seconds and microseconds since a start point, defined to be
the POSIX Epoch: Jan 1, 1970, 0:00 UTC. (One common
implementation counts timer interrupts, once per "jiffy",
at a frequency of 100, 250, or 1000 Hz.) That is, it is
supposed to report wall clock time, which RTCs also do.
A key difference between an RTC and the system clock is
that RTCs run even when the system is in a low power state
(including "off"), and the system clock can't. Until it is
initialized, the system clock can only report time since
system boot ... not since the POSIX Epoch. So at boot time,
and after resuming from a system low power state, the
system clock will often be set to the current wall clock
time using an RTC. Systems without an RTC need to set the
system clock using another clock, maybe across the network
or by entering that data manually.
RTC functionality
RTCs can be read and written with hwclock(8), or directly
with the ioctl requests listed below.
Besides tracking the date and time, many RTCs can also
generate interrupts
-
on every clock update (i.e. once per second);
-
at periodic intervals with a frequency that can be
set to any power-of-2 multiple in the range 2 Hz to
8192 Hz;
-
on reaching a previously specified alarm time.
Each of those interrupt sources can be enabled or
disabled separately. On many systems, the alarm interrupt
can be configured as a system wakeup event, which can
resume the system from a low power state such as
Suspend-to-RAM (STR, called S3 in ACPI systems),
Hibernation (called S4 in ACPI systems), or even "off"
(called S5 in ACPI systems). On some systems, the battery
backed RTC can't issue interrupts, but another one can.
The /dev/rtc (or
/dev/rtc0, /dev/rtc1, etc) device can be opened only
once (until it is closed) and it is read-only. On read(2) and select(2) the calling
process is blocked until the next interrupt from that RTC
is received. Following the interrupt, the process can read
a long integer, of which the least significant byte
contains a bit mask encoding the types of interrupt that
occurred, while the remaining 3 bytes contain the number of
interrupts since the last read(2).
ioctl(2) interface
The following ioctl(2)
requests are defined on file descriptors connected to RTC
devices:
RTC_RD_TIME
-
Returns this RTC's time in the following
structure:
| struct |
rtc_time { |
|
|
int |
|
tm_sec; |
|
|
|
int |
|
tm_min; |
|
|
|
int |
|
tm_hour; |
|
|
|
int |
|
tm_mday; |
|
|
|
int |
|
tm_mon; |
|
|
|
int |
|
tm_year; |
|
|
|
int |
|
tm_wday; |
/* unused */ |
|
|
int |
|
tm_yday; |
/* unused */ |
|
|
int |
|
tm_isdst; |
/* unused */ |
| }; |
| struct |
rtc_wkalrm { |
|
|
unsigned char |
|
enabled; |
|
|
|
unsigned char |
|
pending; |
|
|
|
struct rtc_time |
|
time; |
|
| }; |
-
The enabled flag is used
to enable or disable the alarm interrupt, or to read
its current status; when using these calls,
RTC_AIE_ON and
RTC_AIE_OFF are not
used. The pending flag is used
by RTC_WKALM_RD to report a pending interrupt (so
it's mostly useless on Linux, except when talking to
the RTC managed by EFI firmware). The time field is as used with
RTC_ALM_READ and
RTC_ALM_SET except that
the tm_mday, tm_mon, and
tm_year
fields are also valid. A pointer to this structure
should be passed as the third ioctl(2)
argument.
FILES
/dev/rtc, /dev/rtc0, /dev/rtc1, etc: RTC special character
device files.
/proc/driver/rtc: status of the
(first) RTC.
NOTES
When the kernel's system time is synchronized with an
external reference using adjtimex(2) it will update
a designated RTC periodically every 11 minutes. To do so, the
kernel has to briefly turn off periodic interrupts; this
might affect programs using that RTC.
An RTC's Epoch has nothing to do with the POSIX Epoch
which is only used for the system clock.
If the year according to the RTC's Epoch and the year
register is less than 1970 it is assumed to be 100 years
later, i.e. between 2000 and 2069.
Some RTCs support "wildcard" values in alarm fields, to
support scenarios like periodic alarms at fifteen minutes
after every hour, or on the first day of each month. Such
usage is non portable; portable user space code only expects
a single alarm interrupt, and will either disable or
reinitialize the alarm after receiving it.
Some RTCs support periodic interrupts with periods that
are multiples of a second rather than fractions of a second;
multiple alarms; programmable output clock signals;
non-volatile memory; and other hardware capabilities that are
not currently exposed by this API.
SEE ALSO
hwclock(8), date(1), time(2), stime(2), gettimeofday(2), settimeofday(2), adjtimex(2), gmtime(3), time(7),
/usr/src/linux/Documentation/rtc.txt
rtc.4
Copyright 2002 Urs Thuermann (urs@isnogud.escape.de)
This is free documentation; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
The GNU General Public License's references to "object code"
and "executables" are to be interpreted as the output of any
document formatting or typesetting system, including
intermediate and printed output.
This manual is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public
License along with this manual; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111,
USA.
$Id: rtc.4,v 1.4 2005/12/05 17:19:49 urs Exp $
2006-02-08 Various additions by mtk
2006-11-26 cleanup, cover the generic rtc framework; David Brownell
|
|
|
| Random Linux Commands |
|
GNU The GNU Project was launched in 1984 to develop a complete Unix-like free operating system. GNU is a recursive acronym for "GNU's Not Unix'' (pronounced "guh-NEW"). Linux systems today are comprised of GNU tools and software with Linux as a kernel, hence the name GNU/Linux. Common Linux terms
|
| | |
| | |
| | |
|

|
|