rtc(4) - wariua/manpages-ko GitHub Wiki

NAME

rtc - ์‹ค์ œ ์‹œ๊ฐ„ ํด๋Ÿญ

SYNOPSIS

#include <linux/rtc.h>

int ioctl(fd, RTC_request, param);

DESCRIPTION

์‹ค์ œ ์‹œ๊ฐ„ ํด๋Ÿญ(RTC) ๋“œ๋ผ์ด๋ฒ„์— ๋Œ€ํ•œ ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ์ปดํ“จํ„ฐ์—๋Š” ํ˜„์žฌ "๋ฒฝ์‹œ๊ณ„" ์‹œ๊ฐ„์„ ๊ธฐ๋กํ•˜๋Š” ํ•˜๋“œ์›จ์–ด ํด๋Ÿญ์ด ํ•œ ๊ฐœ ์ด์ƒ ์žˆ๋‹ค. ๊ทธ๊ฑธ "์‹ค์ œ ์‹œ๊ฐ„ ํด๋Ÿญ(RTC, Real Time Clock)"์ด๋ผ๊ณ  ํ•œ๋‹ค. ๋ณดํ†ต ๊ทธ ์ค‘ ํ•˜๋‚˜์—๋Š” ์ „์ง€๋กœ ๋œ ๋ฐฑ์—… ์ „์›์ด ์žˆ์–ด์„œ ์ปดํ“จํ„ฐ๊ฐ€ ๊บผ์ ธ ์žˆ๋Š” ๋™์•ˆ์—๋„ ์‹œ๊ฐ„์„ ๋”ฐ๋ผ๊ฐ„๋‹ค. RTC์—์„œ ์•Œ๋žŒ ๋ฐ ๊ธฐํƒ€ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

๋ชจ๋“  i386 PC, ๊ทธ๋ฆฌ๊ณ  ACPI ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ์—๋Š” ์›๋ž˜ PC/AT์— ์žˆ๋˜ ๋ชจํ† ๋กค๋ผ MC146818 ์นฉ๊ณผ ํ˜ธํ™˜๋˜๋Š” RTC๊ฐ€ ์žˆ๋‹ค. ์š”์ฆ˜ ๊ทธ RTC๋Š” ๋ณดํ†ต ๋ฉ”์ธ๋ณด๋“œ ์นฉ์…‹(์‚ฌ์šฐ์Šค ๋ธŒ๋ฆฌ์ง€)์— ํ†ตํ•ฉ๋ผ ์žˆ์œผ๋ฉฐ ๊ต์ฒด ๊ฐ€๋Šฅํ•œ ๋‹จ์ถ”ํ˜• ๋ฐฑ์—… ์ „์ง€๋ฅผ ์“ด๋‹ค.

๋‹จ์ผ ์นฉ ์‹œ์Šคํ…œ(SoC) ํ”„๋กœ์„ธ์„œ๋กœ ๋งŒ๋“  ์ž„๋ฒ ๋””๋“œ ์‹œ์Šคํ…œ ๊ฐ™์€ PC ์™ธ ์‹œ์Šคํ…œ์—์„œ๋Š” ๋‹ค๋ฅธ ๊ตฌํ˜„์ฒด๋“ค์„ ์“ด๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ PC/AT์˜ RTC์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ฑ์„ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค.

RTC ๋Œ€ ์‹œ์Šคํ…œ ํด๋Ÿญ

RTC์™€ ์‹œ์Šคํ…œ ํด๋Ÿญ์„ ํ˜ผ๋™ํ•ด์„  ์•ˆ ๋œ๋‹ค. ์‹œ์Šคํ…œ ํด๋Ÿญ์€ ์ปค๋„์—์„œ ์œ ์ง€ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ํด๋Ÿญ์œผ๋กœ gettimeofday(2), time(2), ๊ทธ๋ฆฌ๊ณ  ํŒŒ์ผ ํƒ€์ž„์Šคํƒฌํ”„ ์„ค์ • ๋“ฑ์— ์‚ฌ์šฉํ•œ๋‹ค. ์‹œ์Šคํ…œ ํด๋Ÿญ์€ ์–ด๋–ค ์‹œ์ž‘ ์‹œ์ , ์ฆ‰ 1970-01-01 00:00:00 +0000 (UTC)์œผ๋กœ ์ •์˜๋œ POSIX ์—ํฌํฌ ์ดํ›„ ์ง€๋‚œ ์ดˆ์™€ ๋งˆ์ดํฌ๋กœ์ดˆ๋ฅผ ์•Œ๋ ค์ค€๋‹ค. (ํ”ํžˆ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ตฌํ˜„ ๋ฐฉ์‹์€ 100Hz๋‚˜ 250Hz, 1000Hz ๋นˆ๋„๋กœ "์ง€ํ”ผ(jiffy)"๋‹น ํ•œ ๋ฒˆ์”ฉ ํƒ€์ด๋จธ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ์„ธ๋Š” ๊ฒƒ์ด๋‹ค.) ์ฆ‰ ๋ฒฝ์‹œ๊ณ„ ์‹œ๊ฐ„์„ ์•Œ๋ ค์ฃผ๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด๊ณ , ๊ทธ๊ฒŒ RTC์˜ ์—ญํ• ์ด๊ธฐ๋„ ํ•˜๋‹ค.

RTC์™€ ์‹œ์Šคํ…œ ํด๋Ÿญ์˜ ํ•ต์‹ฌ ์ฐจ์ด๋Š” ์‹œ์Šคํ…œ์ด ์ €์ „๋ ฅ ์ƒํƒœ(๊บผ์ง„ ์ƒํƒœ ํฌํ•จ)์ผ ๋•Œ๋„ RTC๋Š” ๋Œ์ง€๋งŒ ์‹œ์Šคํ…œ ํด๋Ÿญ์€ ๊ทธ๋Ÿด ์ˆ˜ ์—†๋‹ค๋Š” ์ ์ด๋‹ค. ์ดˆ๊ธฐํ™” ์ „๊นŒ์ง€ ์‹œ์Šคํ…œ ํด๋Ÿญ์€ POSIX ์—ํฌํฌ ์ดํ›„๊ฐ€ ์•„๋‹ˆ๋ผ ์‹œ์Šคํ…œ ๋ถ€ํŒ… ์ดํ›„์˜ ์‹œ๊ฐ„์„ ์•Œ๋ ค์ค„ ์ˆ˜ ์žˆ์„ ๋ฟ์ด๋‹ค. ๊ทธ๋ž˜์„œ ๋ถ€ํŒ… ๋•Œ, ๊ทธ๋ฆฌ๊ณ  ์‹œ์Šคํ…œ ์ €์ „๋ ฅ ์ƒํƒœ์—์„œ ๋Œ์•„์˜จ ํ›„์— RTC๋ฅผ ์จ์„œ ์‹œ์Šคํ…œ ํด๋Ÿญ์„ ํ˜„์žฌ ๋ฒฝ์‹œ๊ณ„ ์‹œ๊ฐ„์œผ๋กœ ๋งž์ถ”๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. RTC๊ฐ€ ์—†๋Š” ์‹œ์Šคํ…œ์€ ๋‹ค๋ฅธ ํด๋Ÿญ์„ ์ด์šฉํ•ด ์‹œ์Šคํ…œ ํด๋Ÿญ์„ ๋งž์ถฐ์•ผ ํ•˜๋Š”๋ฐ, ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด์„œ์ผ ์ˆ˜๋„ ์žˆ๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ์ž…๋ ฅํ•ด ์ฃผ๋Š” ๋ฐฉ์‹์ผ ์ˆ˜๋„ ์žˆ๋‹ค.

RTC์˜ ๊ธฐ๋Šฅ

hwclock(8)์„ ํ†ตํ•ด์„œ, ๋˜๋Š” ์•„๋ž˜ ๋‚˜์—ดํ•˜๋Š” ioctl ์š”์ฒญ์œผ๋กœ ์ง์ ‘ RTC์— ์ฝ๊ณ  ์“ธ ์ˆ˜ ์žˆ๋‹ค.

๋‚ ์งœ์™€ ์‹œ๊ฐ„์„ ๋”ฐ๋ผ๊ฐ€๋Š” ๊ฒƒ ์™ธ์— ์—ฌ๋Ÿฌ RTC๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ํด๋Ÿญ ๊ฐฑ์‹  ๋•Œ๋งˆ๋‹ค (์ฆ‰ ์ดˆ๋‹น ํ•œ ๋ฒˆ์”ฉ)

  • 2Hz์—์„œ 8192Hz๊นŒ์ง€ ๋ฒ”์œ„์—์„œ 2์˜ ์ œ๊ณฑ ์ˆ˜๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ„๊ฒฉ์œผ๋กœ ์ฃผ๊ธฐ์ ์œผ๋กœ

  • ์•ž์„œ ์ง€์ •ํ•œ ์•Œ๋žŒ ์‹œ๊ฐ„์ด ๋์„ ๋•Œ

์ด๋Ÿฐ ์ธํ„ฐ๋ŸฝํŠธ ์›์ฒœ ๊ฐ๊ฐ์„ ๋”ฐ๋กœ ์ผœ๊ฑฐ๋‚˜ ๋Œ ์ˆ˜ ์žˆ๋‹ค. ์—ฌ๋Ÿฌ ์‹œ์Šคํ…œ์—์„œ๋Š” ์•Œ๋žŒ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ์‹œ์Šคํ…œ ๊นจ์šฐ๊ธฐ ์ด๋ฒคํŠธ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์–ด์„œ Suspend-to-RAM(SRT, ACPI ์‹œ์Šคํ…œ์—์„œ S3)๋‚˜ ํ•˜์ด๋ฒ„๋„ค์ด์…˜(ACPI ์‹œ์Šคํ…œ์—์„œ S4), ์‹ฌ์ง€์–ด "๊บผ์ง"(ACPI ์‹œ์Šคํ…œ์—์„œ S5) ๊ฐ™์€ ์ €์ „๋ ฅ ์ƒํƒœ์˜ ์‹œ์Šคํ…œ์„ ๋ณต์›์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. ์–ด๋–ค ์‹œ์Šคํ…œ์—์„œ๋Š” ์ „์ง€ ๊ธฐ๋ฐ˜ RTC๊ฐ€ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์—†์ง€๋งŒ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์—์„œ๋Š” ๊ฐ€๋Šฅํ•˜๋‹ค.

/dev/rtc (๋˜๋Š” /dev/rtc0, /dev/rtc1 ๋“ฑ) ์žฅ์น˜๋Š” ๋™์‹œ์— ํ•œ ํ”„๋กœ์„ธ์Šค์—์„œ๋งŒ ์—ด ์ˆ˜ ์žˆ๋‹ค. read(2)๋‚˜ select(2)๋ฅผ ํ˜ธ์ถœํ•œ ํ”„๋กœ์„ธ์Šค๋Š” ๊ทธ RTC์—์„œ ๋‹ค์Œ ๋ฒˆ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ์ˆ˜์‹ ํ•  ๋•Œ๊นŒ์ง€ ๋ธ”๋ก ๋œ๋‹ค. ์ธํ„ฐ๋ŸฝํŠธ ์ดํ›„ ํ”„๋กœ์„ธ์Šค์—์„œ long ์ •์ˆ˜ ํ•˜๋‚˜๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ตœํ•˜์œ„ ๋ฐ”์ดํŠธ๋Š” ๋ฐœ์ƒ ์ธํ„ฐ๋ŸฝํŠธ ์ข…๋ฅ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋น„ํŠธ ๋งˆ์Šคํฌ๋ฅผ ๋‹ด๊ณ  ์žˆ๊ณ  ๋‚˜๋จธ์ง€ 3๋ฐ”์ดํŠธ๋Š” ๋งˆ์ง€๋ง‰ read(2) ์ดํ›„ ์ธํ„ฐ๋ŸฝํŠธ ํšŸ์ˆ˜๋ฅผ ๋‹ด๊ณ  ์žˆ๋‹ค.

ioctl(2) ์ธํ„ฐํŽ˜์ด์Šค

RTC ์žฅ์น˜์— ์—ฐ๊ฒฐ๋œ ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ์—์„œ ๋‹ค์Œ ioctl(2) ์š”์ฒญ๋“ค์ด ์ •์˜๋ผ ์žˆ๋‹ค.

RTC_RD_TIME

๋‹ค์Œ ๊ตฌ์กฐ์ฒด๋กœ 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;     /* ์‚ฌ์šฉ ์•ˆ ํ•จ */
    int tm_yday;     /* ์‚ฌ์šฉ ์•ˆ ํ•จ */
    int tm_isdst;    /* ์‚ฌ์šฉ ์•ˆ ํ•จ */
};

์ด ๊ตฌ์กฐ์ฒด ํ•„๋“œ๋“ค์˜ ์˜๋ฏธ์™€ ๋ฒ”์œ„๋Š” gmtime(3)์— ์„ค๋ช…๋œ tm ๊ตฌ์กฐ์ฒด์™€ ๊ฐ™๋‹ค. ioctl(2) ์„ธ ๋ฒˆ์งธ ์ธ์ž๋กœ ์ด ๊ตฌ์กฐ์ฒด์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ•œ๋‹ค.

RTC_SET_TIME
์ด RTC์˜ ์‹œ๊ฐ„์„ ioctl(2) ์„ธ ๋ฒˆ์งธ ์ธ์ž๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” rtc_time ๊ตฌ์กฐ์ฒด๊ฐ€ ๋‚˜ํƒ€๋‚ด๋Š” ์‹œ๊ฐ„์œผ๋กœ ์„ค์ •ํ•œ๋‹ค. RTC ์‹œ๊ฐ„์„ ์„ค์ •ํ•˜๋ ค๋ฉด ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ํŠน๊ถŒ์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค. (์ฆ‰ CAP_SYS_TIME ์—ญ๋Šฅ์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.)
RTC_ALM_READ, RTC_ALM_SET
์•Œ๋žŒ์„ ์ง€์›ํ•˜๋Š” RTC์— ๋Œ€ํ•ด์„œ ์•Œ๋žŒ ์‹œ๊ฐ„์„ ์ฝ๊ฑฐ๋‚˜ ์„ค์ •ํ•œ๋‹ค. ์•Œ๋žŒ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ์ผœ๊ฑฐ๋‚˜ ๋„๋Š” ๊ฑด RTC_AIE_ON ๋ฐ RTC_AIE_OFF ์š”์ฒญ์„ ์จ์„œ ๋”ฐ๋กœ ํ•ด์•ผ ํ•œ๋‹ค. ioctl(2) ์„ธ ๋ฒˆ์งธ ์ธ์ž๋Š” rtc_time ๊ตฌ์กฐ์ฒด์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ์ด๋‹ค. ๊ทธ ๊ตฌ์กฐ์ฒด์˜ tm_sec, tm_min, tm_hour ํ•„๋“œ๋งŒ ์“ด๋‹ค.
RTC_IRQP_READ, RTC_IRQP_SET
์ฃผ๊ธฐ์  ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ์ง€์›ํ•˜๋Š” RTC์— ๋Œ€ํ•ด์„œ ์ฃผ๊ธฐ์  ์ธํ„ฐ๋ŸฝํŠธ์˜ ๋นˆ๋„๋ฅผ ์ฝ๊ฑฐ๋‚˜ ์„ค์ •ํ•œ๋‹ค. ์ฃผ๊ธฐ์  ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ์ผœ๊ฑฐ๋‚˜ ๋„๋Š” ๊ฑด RTC_PIE_ON ๋ฐ RTC_PIE_OFF ์š”์ฒญ์„ ์จ์„œ ๋”ฐ๋กœ ํ•ด์•ผ ํ•œ๋‹ค. ioctl(2) ์„ธ ๋ฒˆ์งธ ์ธ์ž๋Š” ๊ฐ๊ฐ unsigned long *์™€ unsigned long์ด๋‹ค. ๊ทธ ๊ฐ’์ด ์ดˆ๋‹น ์ธํ„ฐ๋ŸฝํŠธ ๋นˆ๋„์ด๋‹ค. ํ—ˆ์šฉ ๊ฐ€๋Šฅํ•œ ๋นˆ๋„๋Š” 2์—์„œ 8192๊นŒ์ง€ ๋ฒ”์œ„ ๋‚ด์˜ 2์˜ ๋ฐฐ์ˆ˜๋“ค์ด๋‹ค. ํŠน๊ถŒ ํ”„๋กœ์„ธ์Šค๋งŒ (์ฆ‰ CAP_SYS_RESOURCE ์—ญ๋Šฅ์„ ๊ฐ€์ง„ ํ”„๋กœ์„ธ์Šค๋งŒ) /proc/sys/dev/rtc/max-user-freq์— ์ง€์ •๋œ ๊ฐ’๋ณด๋‹ค ๋†’๊ฒŒ ๋นˆ๋„๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. (์ด ํŒŒ์ผ์— ๊ธฐ๋ณธ์œผ๋กœ ๋“ค์–ด ์žˆ๋Š” ๊ฐ’์€ 64์ด๋‹ค.)
RTC_AIE_ON, RTC_AIE_OFF
์•Œ๋žŒ์„ ์ง€์›ํ•˜๋Š” RTC์— ๋Œ€ํ•ด์„œ ์•Œ๋žŒ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ์ผœ๊ฑฐ๋‚˜ ๋ˆ๋‹ค. ioctl(2) ์„ธ ๋ฒˆ์งธ ์ธ์ž๋Š” ๋ฌด์‹œํ•œ๋‹ค.
RTC_UIE_ON, RTC_UIE_OFF
์ดˆ๋‹น ์ผํšŒ ๋ฐฉ์‹ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ์ง€์›ํ•˜๋Š” RTC์— ๋Œ€ํ•ด์„œ ๋ชจ๋“  ํด๋Ÿญ ๊ฐฑ์‹  ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ์ผœ๊ฑฐ๋‚˜ ๋ˆ๋‹ค. ioctl(2) ์„ธ ๋ฒˆ์งธ ์ธ์ž๋Š” ๋ฌด์‹œํ•œ๋‹ค.
RTC_PIE_ON, RTC_PIE_OFF
์ฃผ๊ธฐ์  ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ์ง€์›ํ•˜๋Š” RTC์— ๋Œ€ํ•ด์„œ ์ฃผ๊ธฐ์  ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ์ผœ๊ฑฐ๋‚˜ ๋ˆ๋‹ค. ioctl(2) ์„ธ ๋ฒˆ์งธ ์ธ์ž๋Š” ๋ฌด์‹œํ•œ๋‹ค. ํ˜„์žฌ ๋นˆ๋„๊ฐ€ /proc/sys/dev/rtc/max-user-freq์— ์ง€์ •๋œ ๊ฐ’๋ณด๋‹ค ๋†’๊ฒŒ ์„ค์ •๋ผ ์žˆ๋Š” ๊ฒฝ์šฐ ํŠน๊ถŒ ํ”„๋กœ์„ธ์Šค๋งŒ (์ฆ‰ CAP_SYS_RESOURCE ์—ญ๋Šฅ์„ ๊ฐ€์ง„ ํ”„๋กœ์„ธ์Šค๋งŒ) ์ฃผ๊ธฐ์  ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ์ผค ์ˆ˜ ์žˆ๋‹ค.
RTC_EPOCH_READ, RTC_EPOCH_SET
์—ฌ๋Ÿฌ RTC๋“ค์—์„  8๋น„ํŠธ ๋ ˆ์ง€์Šคํ„ฐ๋กœ ์—ฐ๋„๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ  8๋น„ํŠธ ์ด์ง„ ๊ฐ’์œผ๋กœ ๋˜๋Š” BCD ๊ฐ’์œผ๋กœ ํ•ด์„ํ•œ๋‹ค. ์–ด๋А ๊ฒฝ์šฐ๋“  ์ด RTC์˜ ์—ํฌํฌ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ทธ ๊ฐ’์„ ํ•ด์„ํ•œ๋‹ค. ๋งŽ์€ ์‹œ์Šคํ…œ์—์„  RTC์˜ ์—ํฌํฌ๊ฐ€ 1900์œผ๋กœ ์ดˆ๊ธฐํ™” ๋ผ ์žˆ์ง€๋งŒ Alpha๋‚˜ MIPS์—์„œ๋Š” RTC์˜ ์—ฐ๋„ ๋ ˆ์ง€์Šคํ„ฐ ๊ฐ’์— ๋”ฐ๋ผ 1952๋‚˜ 1980, 2000์œผ๋กœ ์ดˆ๊ธฐํ™” ๋ผ ์žˆ์„ ์ˆ˜๋„ ์žˆ๋‹ค. ์ผ๋ถ€ RTC๋“ค์—์„  ์ด ๋™์ž‘๋“ค์„ ์‚ฌ์šฉํ•ด RTC์˜ ์—ํฌํฌ๋ฅผ ์ฝ๊ฑฐ๋‚˜ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ioctl(2) ์„ธ ๋ฒˆ์งธ ์ธ์ž๋Š” ๊ฐ๊ฐ unsigned long *์™€ unsigned long์ด๋ฉฐ ๋ฐ˜ํ™˜(ํ• ๋‹น) ๊ฐ’์ด ์—ํฌํฌ์ด๋‹ค. RTC์˜ ์—ํฌํฌ๋ฅผ ์„ค์ •ํ•˜๋ ค๋ฉด ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ํŠน๊ถŒ์ด ์žˆ์–ด์•ผ (์ฆ‰ CAP_SYS_TIME ์—ญ๋Šฅ์ด ์žˆ์–ด์•ผ) ํ•œ๋‹ค.
RTC_WKALM_RD, RTC_WKALM_SET

์ผ๋ถ€ RTC๋“ค์€ ๋” ๊ฐ•๋ ฅํ•œ ์•Œ๋žŒ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ์ด ioctl์„ ์ด์šฉํ•ด ๊ทธ RTC์˜ ์•Œ๋žŒ ์‹œ๊ฐ„์„ ๋‹ค์Œ ๊ตฌ์กฐ์ฒด๋กœ ์ฝ๊ฑฐ๋‚˜ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

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

enabled ํ”Œ๋ž˜๊ทธ๋Š” ์•Œ๋žŒ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ์ผœ๊ณ  ๋„๊ฑฐ๋‚˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ์ฝ๋Š” ๋ฐ ์“ด๋‹ค. ์ด ํ˜ธ์ถœ ์‚ฌ์šฉ ์‹œ RTC_AIE_ON ๋ฐ RTC_AIE_OFF๋Š” ์“ฐ์ง€ ์•Š๋Š”๋‹ค. pending ํ”Œ๋ž˜๊ทธ๋Š” RTC_WKALM_RD์—์„œ ๋ฏธ์ฒ˜๋ฆฌ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ์•Œ๋ ค ์ฃผ๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด๋‹ค. (๊ทธ๋ž˜์„œ EFI ํŽŒ์›จ์–ด๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” RTC๋ฅผ ๋‹ค๋ฃฐ ๋•Œ๋ฅผ ๋นผ๋ฉด ๋ฆฌ๋ˆ…์Šค์—์„œ๋Š” ์“ธ ์ผ์ด ๊ฑฐ์˜ ์—†๋‹ค.) time ํ•„๋“œ๋Š” RTC_ALM_READ ๋ฐ RTC_ALM_SET์—์„œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€์ด๋˜ tm_mday, tm_mon, tm_year ํ•„๋“œ๋„ ์œ ํšจํ•˜๋‹ค. ์ด ๊ตฌ์กฐ์ฒด์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋ฅผ ioctl(2) ์„ธ ๋ฒˆ์งธ ์ธ์ž๋กœ ์ „๋‹ฌํ•ด์•ผ ํ•œ๋‹ค.

FILES

/dev/rtc, /dev/rtc0, /dev/rtc1 ๋“ฑ
RTC ํŠน์ˆ˜ ๋ฌธ์ž ์žฅ์น˜ ํŒŒ์ผ.
/proc/driver/rtc
(์ฒซ ๋ฒˆ์งธ) RTC์˜ ์ƒํƒœ.

NOTES

adjtimex(2)๋ฅผ ์จ์„œ ์ปค๋„ ์‹œ์Šคํ…œ ์‹œ๊ฐ„์„ ์™ธ๋ถ€ ์ฐธ์กฐ ์‹œ๊ฐ„์— ๋™๊ธฐํ™”ํ•˜๋Š” ๊ฒฝ์šฐ 11๋ถ„๋งˆ๋‹ค ์ฃผ๊ธฐ์ ์œผ๋กœ ์ง€์ • RTC๋ฅผ ๊ฐฑ์‹ ํ•˜๊ฒŒ ๋œ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ์ปค๋„์—์„œ ์ฃผ๊ธฐ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ์ž ์‹œ ๊บผ์•ผ ํ•˜๋Š”๋ฐ, ์ด๋กœ ์ธํ•ด ๊ทธ RTC๋ฅผ ์“ฐ๋Š” ํ”„๋กœ๊ทธ๋žจ๋“ค์ด ์˜ํ–ฅ์„ ๋ฐ›์„ ์ˆ˜๋„ ์žˆ๋‹ค.

RTC์˜ ์—ํฌํฌ์™€ ์‹œ์Šคํ…œ ํด๋Ÿญ์—๋งŒ ์“ฐ์ด๋Š” POSIX ์—ํฌํฌ๋Š” ์•„๋ฌด ์ƒ๊ด€์ด ์—†๋‹ค.

RTC ์—ํฌํฌ ๋ฐ ์—ฐ๋„ ๋ ˆ์ง€์Šคํ„ฐ์— ๋”ฐ๋ฅธ ์—ฐ๋„๊ฐ€ 1970๋ณด๋‹ค ์ž‘์œผ๋ฉด 100๋…„ ํ›„๋ผ๊ณ  ๋ณธ๋‹ค. ์ฆ‰ 2000๋…„์—์„œ 2069๋…„๊นŒ์ง€ ์—ฐ๋„์ด๋‹ค.

์ผ๋ถ€ RTC์—์„œ๋Š” ์•Œ๋žŒ ํ•„๋“œ์— "์™€์ผ๋“œ์นด๋“œ" ๊ฐ’์„ ์ง€์›ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ๋งค์‹œ 15๋ถ„์—, ๋˜๋Š” ๋งค์›” ์ฒซ ๋ฒˆ์งธ ๋‚ ์— ์ฃผ๊ธฐ์  ์•Œ๋žŒ์„ ๋ฐ›๋Š” ๊ฒƒ ๊ฐ™์€ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ง€์›ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๋Ÿฐ ์‚ฌ์šฉ ๋ฐฉ์‹์€ ์ด์‹์„ฑ์ด ์—†๋‹ค. ์ด์‹ ๊ฐ€๋Šฅํ•œ ์‚ฌ์šฉ์ž ๊ณต๊ฐ„ ์ฝ”๋“œ์—์„œ๋Š” ํ•œ ๊ฐœ์˜ ์•Œ๋žŒ ์ธํ„ฐ๋ŸฝํŠธ๋งŒ์„ ๊ธฐ๋Œ€ํ•˜๋ฉฐ ์•Œ๋žŒ์„ ์ˆ˜์‹ ํ•œ ํ›„์—๋Š” ๋„๊ฑฐ๋‚˜ ์•„๋‹ˆ๋ฉด ์žฌ์ดˆ๊ธฐํ™” ํ•œ๋‹ค.

์ผ๋ถ€ RTC์—์„œ๋Š” 1์ดˆ๋ฅผ ์ชผ๊ฐ  ๊ฐ„๊ฒฉ์ด ์•„๋‹ˆ๋ผ 1์ดˆ ๋ฐฐ์ˆ˜ ์ฃผ๊ธฐ์˜ ์ฃผ๊ธฐ ์ธํ„ฐ๋ŸฝํŠธ, ์—ฌ๋Ÿฌ ๊ฐœ ์•Œ๋žŒ, ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐ€๋Šฅํ•œ ์ถœ๋ ฅ ํด๋Ÿญ ์‹œ๊ทธ๋„, ๋น„ํœ˜๋ฐœ์„ฑ ๋ฉ”๋ชจ๋ฆฌ ๋“ฑ๊ณผ ๊ฐ™์ด ํ˜„์žฌ ์ด API์— ์—†๋Š” ์—ฌ๋Ÿฌ ํ•˜๋“œ์›จ์–ด ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

SEE ALSO

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

๋ฆฌ๋ˆ…์Šค ์ปค๋„ ์†Œ์Šค ํŠธ๋ฆฌ์˜ Documentation/rtc.txt


2017-09-15

โš ๏ธ **GitHub.com Fallback** โš ๏ธ