rtc

Autres langues

Langue: fr

Version: 5 décembre 2005 (fedora - 16/08/07)

Autres sections - même nom

Section: 4 (Pilotes et protocoles réseau)

NOM

rtc - Horloge temps réel.

SYNOPSIS

#include <linux/rtc.h>

DESCRIPTION

Voici le pilote pour l'horloge temps réel (RTC) (Ndt : Real Time Clock).

La plupart des ordinateurs ont une horloge matérielle intégrée généralement appelée horloge temps réel. Cette horloge possède normalement une pile qui l'alimente de sorte qu'elle conserve le temps lorsque l'ordinateur est éteint. Elle représente le temps actuel sous la forme années, mois, jour du mois, heures, minutes et secondes.

L'horloge RTC est une puce qui conserve l'heure et la date et qui et capable de générer des interruptions à des moments spécifiés. La puce généralement utilisée est un Motorola MC146818, un Dallas DS12887 ou puce similaire, mais aujourd'hui elle est couramment implémentée dans le jeu de puce de la carte mère.

L'horloge RTC ne doit pas être confondue avec l'horloge système qui est une horloge logicielle pilotée par interruption, indépendante, maintenue par le noyau. L'horloge système est maintenue par une routine d'interruption qui a typiquement une fréquence de 100, 250 ou 1000 Hz. L'horloge logicielle compte les secondes et microsecondes depuis le début de l'Époque POSIX, c'est-à-dire le 1er janvier 1970 à 00H00 UTC. Cette horloge n'implique aucun matériel particulier.

L'horloge RTC peut être lue et configurée avec hwclock(8).

L'horloge RTC n'est presque jamais utilisée par le noyau Linux. Celui-ci utilise à la place le temps de l'horloge logicielle pour time(2), gettimeofday(2), l'horodatage des fichiers, etc. Toutefois, au démarrage, le noyau initialise son horloge logicielle en lisant l'horloge RTC.

En plus de gérer la date et l'heure, l'horloge RTC peut générer des interruptions

*
à chaque mise à jour de l'horloge (c'est-à-dire à chaque seconde) ;
*
à des intervalles périodiques dont la fréquence peut être configurer à tout multiple d'une puissance de deux dans l'intervalle 2 Hz à 8192 Hz ;
*
lorsqu'elle atteint une heure d'alarme précédemment spécifiée.

Chacune de ces interruptions peut être activée ou désactivée séparément.

Le périphérique /dev/rtc ne peut être ouvert qu'une seule fois simultanément et en lecture seule. Dans le cas d'un read(2) ou d'un select(2), le processus appelant est bloqué jusqu'à ce que ne soit reçue la prochaine interruption de l'horloge RTC. À la suite de l'interruption, le processus peut lire un entier long. L'octet de poids faible de celui-ci contient le type d'interruption qui est survenue alors que les trois autres octets contiennent le nombre d'interruptions depuis le dernier read(2).

Les opérations ioctl(2) suivantes sont fournies :

RTC_RD_TIME
Renvoyer le temps RTC dans la structure suivante :
struct rtc_time {
    int tm_sec;
    int tm_min;
    int tm_hour;
    int tm_mday;
    int tm_mon;
    int tm_year;
    int tm_wday;     /* inutilisé */
    int tm_yday;     /* inutilisé */
    int tm_isdst;    /* inutilisé */
};
Les champs de cette structure ont la même signification et les mêmes intervalles que la structure tm décrite dans gmtime(3). Un pointeur sur cette structure devrait être passé comme troisième argument de ioctl().
RTC_SET_TIME
Configurer le temps RTC avec la valeur temps spécifiée dans la structure rtc_time pointée par le troisième argument de ioctl(). Pour pouvoir configurer l'horloge RTC, le processus doit être privilégié (c'est-à-dire avoir la capacité CAP_SYS_TIME).
RTC_ALM_READ, RTC_ALM_SET
Lire et configurer une alarme. Le troisième argument de ioctl() est un pointeur vers une structure rtc_time. tm_sec, tm_min et tm_hour de cette structure sont utilisés.
RTC_IRQP_READ, RTC_IRQP_SET
Lire et configurer la fréquence des interruptions périodiques. Le troisième argument de ioctl() est un long * ou un long, respectivement. La valeur est la fréquence des interruptions par secondes. L'ensemble des fréquences permises est les multiples de deux dans un intervalle de 2 à 8192. Seul un processus privilégié (c'est-à-dire qui a la capacité CAP_SYS_RESOURCE) peut configurer des fréquences supérieures à la valeur spécifiée dans /proc/sys/dev/rtc/max-user-freq. (Ce fichier contient la valeur 64 par défaut.)
RTC_AIE_ON, RTC_AIE_OFF
Activer ou désactiver l'interruption de l'alarme. Le troisième argument de ioctl() est ignoré.
RTC_UIE_ON, RTC_UIE_OFF
Activer ou désactiver l'interruption à chaque mise à jour de l'horloge. Le troisième argument de ioctl() est ignoré.
RTC_PIE_ON, RTC_PIE_OFF
Activer ou désactiver l'interruption périodique. Le troisième argument de ioctl() est ignoré. Seul un processus privilégié (c'est-à-dire qui a la capacité CAP_SYS_RESOURCE) peut activer l'interruption périodique si la fréquence est actuellement supérieure à la valeur spécifiée dans /proc/sys/dev/rtc/max-user-freq.
RTC_EPOCH_READ, RTC_EPOCH_SET
L'horloge RTC encode l'année dans un registre 8 bits qui est interprété soit comme un nombre binaire 8 bits, soit comme un nombre DCB. Dans les deux cas, le nombre est interprété relativement à l'Époque RTC. L'Époque RTC est initialisée à l'année 1900 sur la plupart des systèmes mais sur Alpha et Mips, elle peut être initialisée à 1952, 1980 ou 2000, suivant la valeur du registre RTC pour l'année. Ces opérations peuvent être utilisées pour lire ou configurer l'Époque RTC, respectivement. Pour configurer l'Époque RTC, le processus doit être privilégié (c'est-à-dire avoir la capacité CAP_SYS_TIME).

FICHIERS

/dev/rtc : le fichier périphérique de caractère spécial RTC.

/proc/driver/rtc : état de l'horloge RTC.

NOTES

Lorsque l'horloge système du noyau est synchronisée avec une référence externe en utilisant adjtimex(2) il mettra à jour l'horloge RTC périodiquement toutes les 11 minutes. Pour ce faire, le noyau doit désactiver brièvement les interruptions périodiques ; cela peut affecter les programmes qui utilisent l'horloge RTC.

L'Époque RTC n'a rien à voir avec l'Époque POSIX qui est seulement utilisée pour l'horloge système.

Si l'année de l'Époque RTC et le registre année de l'horloge RTC est moins que 1970, on suppose alors que l'on est 100 ans plus tard, c'est-à-dire entre 2000 et 2069.

VOIR AUSSI

hwclock(8), date(1), time(2), stime(2), gettimeofday(2), settimeofday(2), adjtimex(2), gmtime(3), time(7), /usr/src/linux/Documentation/rtc.txt

TRADUCTION

Ce document est une traduction réalisée par Alain Portal <aportal AT univ-montp2 DOT fr> le 21 juillet 2006 et révisée le 4 août 2006.

L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=en man 4 rtc ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.