Man page - rtc(4)

Packages contains this manual

Available languages:

en fr ja ro de

Manual

rtc

NOM
SYNOPSIS
DESCRIPTION
RTC vs horloge systĂšme
FonctionnalitĂ©s d’une RTC
Interface ioctl(2)
FICHIERS
NOTES
VOIR AUSSI
TRADUCTION

NOM

rtc – Horloge temps rĂ©el

SYNOPSIS

#include <linux/rtc.h>

int ioctl( fd , RTC_ request , param );

DESCRIPTION

Il s’agit d’une interface aux pilotes pour les horloges temps rĂ©el (RTC).

La plupart des ordinateurs disposent d’une ou plusieurs horloges matĂ©rielles intĂ©grĂ©es, enregistrant l’heure locale. Elles sont appelĂ©es « horloges temps rĂ©el » (RTC). L’une d’entre elles est gĂ©nĂ©ralement alimentĂ©e par une pile afin de rester Ă  l’heure une fois l’ordinateur Ă©teint. Les RTC permettent souvent d’utiliser des alarmes et d’autres interruptions.

Tous les PC i386 et les systĂšmes basĂ©s sur ACPI ont une RTC compatible avec la puce Motorola MC146818 du PC/AT d’origine. Aujourd’hui l’horloge est gĂ©nĂ©ralement intĂ©grĂ©e au jeu de composants de la carte mĂšre (« south bridge ») et utilise une pile de secours remplaçable de la taille d’une piĂšce de monnaie.

Les systĂšmes autres que les PC, comme les systĂšmes embarquĂ©s construits autour de processeurs embarquant tout le systĂšme, utilisent d’autres mises en Ɠuvre. GĂ©nĂ©ralement, ils n’offrent pas les mĂȘmes fonctionnalitĂ©s qu’une RTC de PC/AT.

RTC vs horloge systĂšme

Les RTC ne doivent pas ĂȘtre confondues avec l’horloge systĂšme, qui est une horloge logicielle gĂ©rĂ©e par le noyau et utilisĂ©e dans gettimeofday (2) et time (2), ainsi que pour le marquage temporel des fichiers, etc. L’horloge systĂšme indique le nombre de secondes et microsecondes Ă©coulĂ©es depuis un instant de dĂ©part, dĂ©fini comme depuis l’époque POSIX : 1er janvier 1970 Ă  00:00:00 (UTC). (Une mise en Ɠuvre usuelle compte le nombre d’interruptions, une par pulsation Ă  une frĂ©quence de 100, 250 ou 1000 Hz.) C’est-Ă -dire qu’elle est supposĂ©e renvoyer l’heure locale, comme le font les RTC.

Une diffĂ©rence clĂ© entre une RTC et l’horloge systĂšme est qu’une RTC fonctionne mĂȘme lorsque le systĂšme est dans un Ă©tat de veille d’alimentation (incluant « éteint ») et que l’horloge systĂšme ne peut fonctionner. Jusqu’à son initialisation, l’horloge systĂšme ne peut indiquer que le temps Ă©coulĂ© depuis le dĂ©marrage du systĂšme mais pas celui depuis l’époque POSIX. Ainsi, au dĂ©marrage et aprĂšs la sortie de veille, l’horloge systĂšme sera souvent rĂ©glĂ©e Ă  l’heure locale actuelle en utilisant une RTC. Les systĂšmes sans RTC ont besoin de rĂ©gler leur horloge systĂšme par un autre moyen, peut-ĂȘtre Ă  travers le rĂ©seau ou en entrant les valeurs Ă  la main.

FonctionnalitĂ©s d’une RTC

Les RTC peuvent ĂȘtre lues et rĂ©glĂ©es avec hwclock (8), ou directement en utilisant les ioctl (2) listĂ©s ci-dessous.

En plus du compte de la date et de l’heure, de nombreuses RTC peuvent aussi gĂ©nĂ©rer des interruptions :

-

à chaque mise à jour de l’horloge (c’est-à-dire une fois par seconde) ;

-

à des intervalles réguliers, de fréquence réglable à une puissance de 2 entre 2 Hz et 8192 Hz ;

-

lorsque la date d’une alarme rĂ©glĂ©e auparavant est atteinte.

Chacune de ces sources d’interruptions peut ĂȘtre activĂ©e ou dĂ©sactivĂ©e sĂ©parĂ©ment. Sur de nombreux systĂšmes, l’interruption venant de l’alarme peut ĂȘtre configurĂ©e comme un Ă©vĂ©nement dĂ©clenchant le rĂ©veil du systĂšme, et ainsi sortir le systĂšme d’un Ă©tat de veille d’alimentation comme la veille en RAM (STR, appelĂ©e S3 dans les systĂšmes ACPI), l’hibernation (appelĂ©e S4 dans les systĂšmes ACPI) ou mĂȘme l’extinction (appelĂ©e S5 dans les systĂšmes ACPI). Sur certains systĂšmes, la pile de secours de la RTC ne peut gĂ©nĂ©rer d’interruptions, alors qu’une autre le peut.

Le pĂ©riphĂ©rique /dev/rtc (ou /dev/rtc0 , /dev/rtc1 , etc.) est en lecture seule et un seul accĂšs simultanĂ© est possible. Un processus appelant read (2) ou select (2) est bloquĂ© jusqu’à la rĂ©ception de l’interruption RTC suivante. Suite Ă  l’interruption, le processus peut lire un entier long, dont l’octet de poids faible contient le type d’interruption qui vient de se produire et les 3 octets restants contiennent le nombre d’interruptions depuis le dernier appel Ă  read (2).

Interface ioctl(2)

Les appels ioctl (2) suivants sont définis sur les descripteurs des fichiers associés aux périphériques RTC :
RTC_RD_TIME

Renvoie l’heure de cette 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; /* non utilisé */
int tm_yday; /* non utilisé */
int tm_isdst; /* non utilisé */
};

Les membres de cette structure ont les mĂȘmes sens et les mĂȘmes portĂ©es que la ceux de la structure tm dĂ©crite dans gmtime (3). Un pointeur vers cette structure est attendu en troisiĂšme paramĂštre pour ioctl (2).

RTC_SET_TIME

RĂšgle cette horloge RTC Ă  l’heure spĂ©cifiĂ©e par la structure rtc_time vers laquelle pointe le troisiĂšme paramĂštre passĂ© Ă  ioctl (2). Pour pouvoir modifier l’heure RTC, le processus doit ĂȘtre privilĂ©giĂ© (c’est-Ă -dire disposer du droit CAP_SYS_TIME ).

RTC_ALM_READ
RTC_ALM_SET

Lit et rĂšgle l’heure d’alarme, pour les horloges RTC qui gĂšrent les alarmes. L’interruption venant de l’alarme doit ĂȘtre activĂ©e ou dĂ©sactivĂ©e sĂ©parĂ©ment en utilisant respectivement les requĂȘtes RTC_AIE_ON ou RTC_AIE_OFF . Le troisiĂšme paramĂštre d’ ioctl (2) est un pointeur vers une structure rtc_time . Seuls les champs tm_sec , tm_min , et tm_hour de cette structure sont utilisĂ©s.

RTC_IRQP_READ
RTC_IRQP_SET

Lit et rĂšgle la frĂ©quence des interruptions, pour les horloges RTC gĂ©rant les interruptions pĂ©riodiques. L’interruption pĂ©riodique doit ĂȘtre activĂ©e ou dĂ©sactivĂ©e sĂ©parĂ©ment en utilisant respectivement les requĂȘtes RTC_PIE_ON ou RTC_PIE_OFF . Le troisiĂšme paramĂštre d’ ioctl (2) est un unsigned long * ou un unsigned long respectivement. La valeur reprĂ©sente la frĂ©quence en interruptions par seconde. Le jeu des frĂ©quences permises est l’ensemble des multiples de deux entre 2 et 8192. Seul un processus privilĂ©giĂ© (c’est-Ă -dire disposant du droit CAP_SYS_RESOURCE ) peut rĂ©gler une frĂ©quence supĂ©rieure Ă  celle spĂ©cifiĂ©e dans /proc/sys/dev/rtc/max-user-freq , par dĂ©faut 64.

RTC_AIE_ON
RTC_AIE_OFF

Active ou dĂ©sactive l’interruption venant de l’alarme, pour les RTC qui gĂšrent les alarmes. Le troisiĂšme paramĂštre d’ ioctl (2) est ignorĂ©.

RTC_UIE_ON
RTC_UIE_OFF

Active ou dĂ©sactive l’interruption Ă  chaque mise Ă  jour, pour les horloges gĂ©rant cette interruption envoyĂ©e chaque seconde. Le troisiĂšme paramĂštre d’ ioctl (2) est ignorĂ©.

RTC_PIE_ON
RTC_PIE_OFF

Active ou dĂ©sactive l’interruption pĂ©riodique, pour les RTC gĂ©rant ces interruptions pĂ©riodiques. Le troisiĂšme paramĂštre d’ ioctl (2) est ignorĂ©. Seul un processus privilĂ©giĂ© (c’est-Ă -dire disposant du droit CAP_SYS_RESOURCE ) peut rĂ©gler une frĂ©quence supĂ©rieure Ă  celle spĂ©cifiĂ©e dans /proc/sys/dev/rtc/max-user-freq .

RTC_EPOCH_READ
RTC_EPOCH_SET

De nombreuses RTC codent l’annĂ©e dans un registre de 8 bits, interprĂ©tĂ© soit comme un nombre binaire de 8 bits, soit comme un nombre BCD. Dans les deux cas, le nombre est interprĂ©tĂ© relativement Ă  l’époque de cette RTC. L’époque de la RTC est initialisĂ© Ă  1900 sur la plupart des systĂšmes, sauf sur Alpha et Mips oĂč il peut ĂȘtre initialisĂ© Ă  1952, 1980 ou 2000, suivant la valeur du registre RTC destinĂ© Ă  l’annĂ©e. Avec certaines RTC, ces opĂ©rations peuvent ĂȘtre utilisĂ©es respectivement pour lire ou rĂ©gler l’époque de la RTC. Le troisiĂšme paramĂštre ioctl (2) est respectivement un unsigned long * ou un unsigned long , et la valeur renvoyĂ©e (ou assignĂ©e) est l’époque. Pour rĂ©gler l’époque RTC, le processus doit ĂȘtre privilĂ©giĂ© (c’est-Ă -dire disposer de la capacitĂ© CAP_SYS_TIME ).

RTC_WKALM_RD
RTC_WKALM_SET

Certaines RTC disposent d’une interface pour les alarmes plus puissante, utilisant ces ioctl pour lire ou Ă©crire l’heure de l’alarme de la RTC avec cette structure :

struct rtc_wkalrm {
unsigned char enabled;
unsigned char pending;
struct rtc_time time;
};

L’attribut enabled est utilisĂ© pour activer ou dĂ©sactiver l’interruption venant de l’alarme, ou pour lire son Ă©tat actuel ; lorsque ces appels sont utilisĂ©s, RTC_AIE_ON et RTC_AIE_OFF ne sont pas utilisĂ©s. L’attribut pending est utilisĂ© par RTC_WKALM_RD pour signaler une interruption en attente (c’est en gĂ©nĂ©ral inutile sous Linux, exceptĂ© lors du dialogue avec la RTC gĂ©rĂ©e par un microcode EFI). Le champ time est autant utilisĂ© par RTC_ALM_READ et RTC_ALM_SET , exceptĂ© que les champs tm_mday , tm_mon et tm_year sont Ă©galement valides. Un pointeur vers cette structure doit ĂȘtre passĂ© en troisiĂšme paramĂštre ioctl (2).

FICHIERS

/dev/rtc
/dev/rtc0
/dev/rtc1

...

Fichiers spéciaux de périphérique caractÚre des différentes RTC.

/proc/driver/rtc

État de la (premiùre) RTC.

NOTES

Lorsque l’horloge du noyau est synchronisĂ©e avec une rĂ©fĂ©rence externe en utilisant adjtimex (2), le noyau met Ă  jour une RTC dĂ©signĂ©e toutes les 11 minutes. Pour y parvenir, le noyau doit arrĂȘter briĂšvement les interruptions pĂ©riodiques, ce qui peut affecter les programmes utilisant cette RTC.

L’époque d’une RTC n’a rien Ă  voir avec l’époque POSIX, utilisĂ© uniquement pour l’horloge systĂšme.

Si l’annĂ©e relative Ă  l’époque de la RTC et au registre de l’annĂ©e est infĂ©rieure Ă  1970, on considĂšre que l’annĂ©e est de 100 ans supĂ©rieure, c.-Ă -d. entre 2000 et 2069.

Certaines RTC gĂšrent les caractĂšres gĂ©nĂ©riques (« wildcard  ») dans les champs des alarmes, destinĂ©s aux scĂ©narios comme les alarmes pĂ©riodiques toutes les quinze minutes aprĂšs chaque heure, ou au premier jour de chaque mois. Une telle utilisation n’est pas portable ; un code en espace utilisateur portable n’attend qu’une seule interruption d’alarme, puis dĂ©sactivera ou rĂ©initialisera cette alarme aprĂšs l’avoir reçue.

Certaines RTC gĂšrent des interruptions de pĂ©riodes multiples d’une seconde plutĂŽt qu’en fractions de secondes, des alarmes multiples, la programmation de signaux de sortie d’horloge, la mĂ©moire non volatile, et d’autres possibilitĂ©s matĂ©rielles qui ne sont pas accessibles par cette API.

VOIR AUSSI

date (1), adjtimex (2), gettimeofday (2), settimeofday (2), stime (2), time (2), gmtime (3), time (7), hwclock (8)

Documentation/rtc.txt dans les sources du noyau Linux.

TRADUCTION

La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org> et Jean-Pierre Giraud <jean-pierregiraud@neuf.fr>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n’y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org .