rtc(4) Device Drivers Manual rtc(4) NUME rtc - ceas in timp real SINOPSIS #include int ioctl(fd, RTC_request, param); DESCRIERE Aceasta este interfaa cu controlorii pentru ceasurile in timp real (RTC). Majoritatea calculatoarelor au unul sau mai multe ceasuri hardware care inregistreaza ora curenta a ,,orologiului (ceasul etalon)". Acestea se numesc ,,ceasuri in timp real" (,,Real Time Clocks": RTC). De obicei, unul dintre acestea are o baterie de rezerva, astfel incat inregistreaza ora chiar i atunci cand calculatorul este oprit. RTC-urile ofera adesea alarme i alte intreruperi. Toate PC-urile i386 i sistemele bazate pe ACPI au un RTC compatibil cu cipul Motorola MC146818 de pe PC/AT original. In prezent, un astfel de RTC este de obicei integrat in chipset-ul placii de baza (,,south bridge", puntea sudica) i utilizeaza o baterie de rezerva inlocuibila de marimea unei monede. Sistemele non-PC, cum ar fi sistemele incorporate construite in jurul procesoarelor de tip ,,system-on-chip", utilizeaza alte implementari. De obicei, acestea nu vor oferi aceeai funcionalitate ca i RTC-ul de pe un PC/AT. RTC vs ceas de sistem RTC-urile nu trebuie confundate cu ceasul de sistem, care este un ceas software intreinut de nucleu i utilizat pentru a implementa gettimeofday(2) i time(2), precum i pentru a defini marcajele de timp pe fiiere i aa mai departe. Ceasul de sistem raporteaza secundele i microsecundele de la un punct de pornire, definit ca fiind POSIX Epoch: 1970-01-01 00:00:00 +0000 (UTC); (o implementare obinuita numara intreruperile cronometrului, o data pe ,,jiffy" (clipita), la o frecvena de 100, 250 sau 1000 Hz). Adica, se presupune ca raporteaza ora ,,orologiului" (ceasului etalon), ceea ce fac i RTC-urile. O diferena eseniala intre un RTC i ceasul de sistem este ca RTC-urile funcioneaza chiar i atunci cand sistemul se afla intr-o stare de consum redus de energie (inclusiv ,,oprit"), ceea ce nu este cazul ceasului de sistem. Pana cand nu este iniializat, ceasul de sistem poate raporta doar timpul de la pornirea sistemului ... nu de la POSIX Epoch. Prin urmare, in momentul pornirii i dupa reluarea unei stari de consum redus de energie a sistemului, ceasul de sistem va fi adesea fixat la ora curenta a ,,orologiului" (ceasului etalon) cu ajutorul unui RTC. Sistemele fara un RTC trebuie sa regleze ceasul sistemului folosind un alt ceas, poate prin reea sau prin introducerea manuala a acestor date. Funcionalitatea RTC RTC-urile pot fi citite i scrise cu hwclock(8), sau direct cu cererile ioctl(2) enumerate mai jos. Pe langa urmarirea datei i orei, multe RTC-uri pot genera i intreruperi. o la fiecare actualizare a ceasului (adica o data pe secunda); o la intervale periodice cu o frecvena care poate fi stabilita la orice multiplu de putere de 2 din intervalul 2 Hz pana la 8192 Hz; o la atingerea unei ore de alarma specificate anterior. Fiecare dintre aceste surse de intrerupere poate fi activata sau dezactivata separat. Pe multe sisteme, intreruperea de alarma poate fi configurata ca un eveniment de trezire a sistemului, care poate relua sistemul dintr-o stare de putere redusa, cum ar fi suspendare la memoria RAM (,,Suspend-to-RAM": STR, denumita S3 in sistemele ACPI), Hibernare (,,hibernation", denumita S4 in sistemele ACPI) sau chiar ,,oprit" (,,off", denumit S5 in sistemele ACPI). Pe unele sisteme, RTC-ul cu baterie nu poate emite intreruperi, dar un altul poate. Dispozitivul /dev/rtc (sau /dev/rtc0, /dev/rtc1, etc.) poate fi deschis o singura data (pana cand este inchis) i este numai pentru citire. La read(2) i select(2), procesul apelant este blocat pana cand se primete urmatoarea intrerupere de la acel RTC. Dupa intrerupere, procesul poate citi un numar intreg lung, din care cel mai puin semnificativ octet conine o masca de bii care codifica tipurile de intreruperi care au avut loc, in timp ce ceilali 3 octei conin numarul de intreruperi de la ultima citire read(2). interfaa ioctl(2) Urmatoarele cereri ioctl(2) sunt definite pe descriptorii de fiiere conectai la dispozitivele RTC: RTC_RD_TIME Returneaza ora acestui RTC in urmatoarea structura: struct rtc_time { int tm_sec; int tm_min; int tm_hour; int tm_mday; int tm_mon; int tm_year; int tm_wday; /* neutilizat */ int tm_yday; /* neutilizat */ int tm_isdst; /* neutilizat */ }; Campurile din aceasta structura au aceeai semnificaie i aceleai intervale ca i in cazul structurii tm descrise la gmtime(3). Un indicator catre aceasta structura trebuie sa fie transmis ca al treilea argument ioctl(2). RTC_SET_TIME Stabilete ora acestui RTC la ora specificata de structura rtc_time la care indica al treilea argument ioctl(2). Pentru a stabili ora RTC-ului, procesul trebuie sa fie privilegiat (adica sa aiba capacitatea CAP_SYS_TIME). RTC_ALM_READ RTC_ALM_SET Citete i stabilete ora alarmei, pentru RTC-urile care accepta alarme. Intreruperea alarmei trebuie sa fie activata sau dezactivata separat cu ajutorul cererilor RTC_AIE_ON, RTC_AIE_OFF. Al treilea argument ioctl(2) este un indicator la o structura rtc_time. Se utilizeaza numai campurile tm_sec, tm_min i tm_hour ale acestei structuri. RTC_IRQP_READ RTC_IRQP_SET Citete i stabilete frecvena intreruperilor periodice, pentru RTC-urile care accepta intreruperi periodice. Intreruperea periodica trebuie sa fie activata sau dezactivata separat cu ajutorul cererilor RTC_PIE_ON, RTC_PIE_OFF. Al treilea argument ioctl(2) este un unsigned long * sau respectiv un unsigned long. Valoarea este frecvena in intreruperi pe secunda. Setul de frecvene admisibile este reprezentat de multiplii de doi in intervalul 2-8192. Numai un proces privilegiat (adica unul care are capacitatea CAP_SYS_RESOURCE) poate stabili frecvene peste valoarea specificata in /proc/sys/dev/rtc/max-user-freq; (acest fiier conine in mod implicit valoarea 64). RTC_AIE_ON RTC_AIE_OFF Activeaza sau dezactiveaza intreruperea alarmei, pentru RTC-urile care accepta alarme. Al treilea argument ioctl(2) este ignorat. RTC_UIE_ON RTC_UIE_OFF Activeaza sau dezactiveaza intreruperea la fiecare actualizare a ceasului, pentru RTC-urile care accepta aceasta intrerupere o data pe secunda. Al treilea argument ioctl(2) este ignorat. RTC_PIE_ON RTC_PIE_OFF Activeaza sau dezactiveaza intreruperea periodica, pentru RTC-urile care accepta aceste intreruperi periodice. Al treilea argument ioctl(2) este ignorat. Numai un proces privilegiat (adica unul care are capacitatea CAP_SYS_RESOURCE) poate activa intreruperea periodica daca frecvena este in prezent stabilita peste valoarea specificata in /proc/sys/dev/rtc/max-user-freq. RTC_EPOCH_READ RTC_EPOCH_SET Multe RTC-uri codifica anul intr-un registru pe 8 bii care este interpretat fie ca un numar binar pe 8 bii, fie ca un numar BCD. In ambele cazuri, numarul este interpretat in raport cu Epoca acestui RTC. Epoca RTC este iniializata la 1900 pe majoritatea sistemelor, dar pe Alpha i MIPS poate fi iniializata i la 1952, 1980 sau 2000, in funcie de valoarea unui registru RTC pentru anul respectiv. In cazul unor RTC-uri, aceste operaii pot fi utilizate pentru a citi sau, respectiv, pentru a stabili Epoca RTC-ului. Al treilea argument ioctl(2) este un unsigned long * sau un unsigned long, respectiv, valoarea returnata (sau atribuita) este Epoca. Pentru a stabili Epoca RTC-ului, procesul trebuie sa fie privilegiat (adica sa aiba capacitatea CAP_SYS_TIME). RTC_WKALM_RD RTC_WKALM_SET Unele RTC-uri accepta o interfaa de alarma mai avansata, utilizand aceste ioctl-uri pentru a citi sau a scrie ora de alarma a RTC-ului (respectiv) cu aceasta structura: struct rtc_wkalrm { unsigned char enabled; unsigned char pending; struct rtc_time time; }; Fanionul enabled este utilizat pentru a activa sau dezactiva intreruperea alarmei, sau pentru a citi starea curenta a acesteia; atunci cand se utilizeaza aceste apeluri, RTC_AIE_ON i RTC_AIE_OFF nu sunt utilizate. Fanionul pending este utilizat de RTC_WKALM_RD pentru a raporta o intrerupere in ateptare (deci este in mare parte nefolositor pe Linux, cu excepia cazului in care se comunica cu RTC-ul gestionat de firmware-ul EFI). Campul time este la fel ca cel utilizat cu RTC_ALM_READ i RTC_ALM_SET, cu excepia faptului ca sunt valabile i campurile tm_mday, tm_mon i tm_year. Un indicator la aceasta structura trebuie transmis ca al treilea argument ioctl(2). FIIERE /dev/rtc /dev/rtc0 /dev/rtc1 ... Fiiere de dispozitive de caractere speciale RTC. /proc/driver/rtc starea (primului) RTC. NOTE Atunci cand ora sistemului nucleului este sincronizata cu o referina externa folosind adjtimex(2), acesta va actualiza periodic, la fiecare 11 minute, un RTC desemnat. Pentru a face acest lucru, nucleul trebuie sa dezactiveze pentru scurt timp intreruperile periodice; acest lucru ar putea afecta programele care utilizeaza acel RTC. Epoca unui RTC nu are nimic de-a face cu Epoca POSIX, care este utilizata doar pentru ceasul sistemului. In cazul in care anul conform Epocii RTC i a registrului de ani este mai mic decat 1970, se presupune ca este cu 100 de ani mai mare, adica intre 2000 i 2069. Unele RTC-uri accepta valori ,,joker" in campurile de alarma, pentru a permite scenarii cum ar fi alarme periodice la 15 minute dupa fiecare ora sau in prima zi a fiecarei luni. O astfel de utilizare nu este portabila; codul portabil din spaiul utilizatorului se ateapta la o singura intrerupere a alarmei i va dezactiva sau va reiniializa alarma dupa ce o primete. Unele RTC-uri accepta intreruperi periodice cu perioade care sunt mai degraba multipli de secunda decat fraciuni de secunda; alarme multiple; semnale de ceas de ieire programabile; memorie nevolatila; i alte capacitai hardware care nu sunt expuse in prezent de aceasta API. CONSULTAI I date(1), adjtimex(2), gettimeofday(2), settimeofday(2), stime(2), time(2), gmtime(3), time(7), hwclock(8) Documentation/rtc.txt in arborele sursa al nucleului Linux TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . Pagini de manual de Linux 6.8 2 mai 2024 rtc(4)