RTC(4) | Manuel du programmeur Linux | RTC(4) |
rtc - Horloge temps réel
#include <linux/rtc.h>
int ioctl(fd, RTC_request, param);
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.
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.
RTCs can be read and written with hwclock(8), or directly with the ioctl(2) requests listed below.
En plus du compte de la date et de l'heure, de nombreuses RTC peuvent aussi générer des interruptions :
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).
Les appels ioctl(2) suivants sont définis sur les descripteurs des fichiers associés aux périphériques RTC :
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é */ };
struct rtc_wkalrm {
unsigned char enabled;
unsigned char pending;
struct rtc_time time; };
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.
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 nonportable; portable user-space code expects only a single alarm interrupt, and will either disable or reinitialize the alarm after receiving it.
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.
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
Cette page fait partie de la publication 5.10 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies et la dernière version de cette page peuvent être trouvées à l'adresse https://www.kernel.org/doc/man-pages/.
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> et David Prévot <david@tilapin.org>
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.
15 septembre 2017 | Linux |