rtc(4) - wariua/manpages-ko GitHub Wiki
rtc - ์ค์ ์๊ฐ ํด๋ญ
#include <linux/rtc.h>
int ioctl(fd, RTC_request, param);
์ค์ ์๊ฐ ํด๋ญ(RTC) ๋๋ผ์ด๋ฒ์ ๋ํ ์ธํฐํ์ด์ค์ด๋ค.
๋๋ถ๋ถ์ ์ปดํจํฐ์๋ ํ์ฌ "๋ฒฝ์๊ณ" ์๊ฐ์ ๊ธฐ๋กํ๋ ํ๋์จ์ด ํด๋ญ์ด ํ ๊ฐ ์ด์ ์๋ค. ๊ทธ๊ฑธ "์ค์ ์๊ฐ ํด๋ญ(RTC, Real Time Clock)"์ด๋ผ๊ณ ํ๋ค. ๋ณดํต ๊ทธ ์ค ํ๋์๋ ์ ์ง๋ก ๋ ๋ฐฑ์ ์ ์์ด ์์ด์ ์ปดํจํฐ๊ฐ ๊บผ์ ธ ์๋ ๋์์๋ ์๊ฐ์ ๋ฐ๋ผ๊ฐ๋ค. RTC์์ ์๋ ๋ฐ ๊ธฐํ ์ธํฐ๋ฝํธ๋ฅผ ์ ๊ณตํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
๋ชจ๋ i386 PC, ๊ทธ๋ฆฌ๊ณ ACPI ๊ธฐ๋ฐ ์์คํ ์๋ ์๋ PC/AT์ ์๋ ๋ชจํ ๋กค๋ผ MC146818 ์นฉ๊ณผ ํธํ๋๋ RTC๊ฐ ์๋ค. ์์ฆ ๊ทธ RTC๋ ๋ณดํต ๋ฉ์ธ๋ณด๋ ์นฉ์ (์ฌ์ฐ์ค ๋ธ๋ฆฌ์ง)์ ํตํฉ๋ผ ์์ผ๋ฉฐ ๊ต์ฒด ๊ฐ๋ฅํ ๋จ์ถํ ๋ฐฑ์ ์ ์ง๋ฅผ ์ด๋ค.
๋จ์ผ ์นฉ ์์คํ (SoC) ํ๋ก์ธ์๋ก ๋ง๋ ์๋ฒ ๋๋ ์์คํ ๊ฐ์ PC ์ธ ์์คํ ์์๋ ๋ค๋ฅธ ๊ตฌํ์ฒด๋ค์ ์ด๋ค. ์ผ๋ฐ์ ์ผ๋ก PC/AT์ 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๊ฐ ์๋ ์์คํ ์ ๋ค๋ฅธ ํด๋ญ์ ์ด์ฉํด ์์คํ ํด๋ญ์ ๋ง์ถฐ์ผ ํ๋๋ฐ, ๋คํธ์ํฌ๋ฅผ ํตํด์์ผ ์๋ ์๊ณ ๋ฐ์ดํฐ๋ฅผ ์ง์ ์ ๋ ฅํด ์ฃผ๋ ๋ฐฉ์์ผ ์๋ ์๋ค.
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)
์ดํ ์ธํฐ๋ฝํธ ํ์๋ฅผ ๋ด๊ณ ์๋ค.
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)
์ธ ๋ฒ์งธ ์ธ์๋ก ์ ๋ฌํด์ผ ํ๋ค.
-
/dev/rtc
,/dev/rtc0
,/dev/rtc1
๋ฑ - RTC ํน์ ๋ฌธ์ ์ฅ์น ํ์ผ.
/proc/driver/rtc
- (์ฒซ ๋ฒ์งธ) RTC์ ์ํ.
adjtimex(2)๋ฅผ ์จ์ ์ปค๋ ์์คํ ์๊ฐ์ ์ธ๋ถ ์ฐธ์กฐ ์๊ฐ์ ๋๊ธฐํํ๋ ๊ฒฝ์ฐ 11๋ถ๋ง๋ค ์ฃผ๊ธฐ์ ์ผ๋ก ์ง์ RTC๋ฅผ ๊ฐฑ์ ํ๊ฒ ๋๋ค. ์ด๋ฅผ ์ํด ์ปค๋์์ ์ฃผ๊ธฐ ์ธํฐ๋ฝํธ๋ฅผ ์ ์ ๊บผ์ผ ํ๋๋ฐ, ์ด๋ก ์ธํด ๊ทธ RTC๋ฅผ ์ฐ๋ ํ๋ก๊ทธ๋จ๋ค์ด ์ํฅ์ ๋ฐ์ ์๋ ์๋ค.
RTC์ ์ํฌํฌ์ ์์คํ ํด๋ญ์๋ง ์ฐ์ด๋ POSIX ์ํฌํฌ๋ ์๋ฌด ์๊ด์ด ์๋ค.
RTC ์ํฌํฌ ๋ฐ ์ฐ๋ ๋ ์ง์คํฐ์ ๋ฐ๋ฅธ ์ฐ๋๊ฐ 1970๋ณด๋ค ์์ผ๋ฉด 100๋ ํ๋ผ๊ณ ๋ณธ๋ค. ์ฆ 2000๋ ์์ 2069๋ ๊น์ง ์ฐ๋์ด๋ค.
์ผ๋ถ RTC์์๋ ์๋ ํ๋์ "์์ผ๋์นด๋" ๊ฐ์ ์ง์ํ๋ค. ๊ทธ๋์ ๋งค์ 15๋ถ์, ๋๋ ๋งค์ ์ฒซ ๋ฒ์งธ ๋ ์ ์ฃผ๊ธฐ์ ์๋์ ๋ฐ๋ ๊ฒ ๊ฐ์ ์๋๋ฆฌ์ค๋ฅผ ์ง์ํ๋ค. ํ์ง๋ง ๊ทธ๋ฐ ์ฌ์ฉ ๋ฐฉ์์ ์ด์์ฑ์ด ์๋ค. ์ด์ ๊ฐ๋ฅํ ์ฌ์ฉ์ ๊ณต๊ฐ ์ฝ๋์์๋ ํ ๊ฐ์ ์๋ ์ธํฐ๋ฝํธ๋ง์ ๊ธฐ๋ํ๋ฉฐ ์๋์ ์์ ํ ํ์๋ ๋๊ฑฐ๋ ์๋๋ฉด ์ฌ์ด๊ธฐํ ํ๋ค.
์ผ๋ถ RTC์์๋ 1์ด๋ฅผ ์ชผ๊ฐ ๊ฐ๊ฒฉ์ด ์๋๋ผ 1์ด ๋ฐฐ์ ์ฃผ๊ธฐ์ ์ฃผ๊ธฐ ์ธํฐ๋ฝํธ, ์ฌ๋ฌ ๊ฐ ์๋, ํ๋ก๊ทธ๋๋ฐ ๊ฐ๋ฅํ ์ถ๋ ฅ ํด๋ญ ์๊ทธ๋, ๋นํ๋ฐ์ฑ ๋ฉ๋ชจ๋ฆฌ ๋ฑ๊ณผ ๊ฐ์ด ํ์ฌ ์ด API์ ์๋ ์ฌ๋ฌ ํ๋์จ์ด ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
date(1)
, adjtimex(2), gettimeofday(2), settimeofday(2), stime(2), time(2), gmtime(3), time(7), hwclock(8)
๋ฆฌ๋
์ค ์ปค๋ ์์ค ํธ๋ฆฌ์ Documentation/rtc.txt
2017-09-15