Manpages

名 前

rtc − リ ア ル タ イ ム ク ロ ッ ク

書 式

#include <linux/rtc.h>

int ioctl(fd, RTC_request, param);

説 明

こ れ は リ ア ル タ イ ム ク ロ ッ ク (RTC) の ド ラ イ バ の イ ン タ ー フ ェ ー ス で あ る 。 多 く の コ ン ピ ュ ー タ は 、 現 在 の 「 壁 時 計 」 時 刻 ("wall clock" time) を 記 録 す る 、 ハ ー ド ウ ェ ア ク ロ ッ ク を 1 個 以 上 持 っ て い る 。 こ れ ら は 「 リ ア ル タ イ ム ク ロ ッ ク 」 (RTC) と 呼 ば れ る 。 こ れ ら の 時 計 の う ち 1 つ は 、 通 常 は 電 池 で バ ッ ク ア ッ プ し て 駆 動 さ れ る の で 、 コ ン ピ ュ ー タ の ス イ ッ チ を 切 っ て も 、 時 刻 を 保 持 で き る 。 多 く の 場 合 、 RTC は ア ラ ー ム や そ の 他 の 割 り 込 み の 機 能 を 提 供 す る 。 全 て の i386 PC と ACPI ベ ー ス の シ ス テ ム に は RTC が あ る 。 こ の RTC は 、 元 々 の PC/AT に 存 在 し た Motorola MC146818 チ ッ プ と 互 換 性 が あ る 。 こ の よ う な RTC は 、 今 日 で は マ ザ ー ボ ー ド の チ ッ プ セ ッ ト (サ ウ ス ブ リ ッ ジ ) 内 で 実 装 さ れ て い る こ と が 多 く 、 交 換 可 能 な 硬 貨 く ら い の 大 き さ の バ ッ ク ア ッ プ 電 池 を 使 っ て い る 。 シ ス テ ム オ ン チ ッ プ (system−on−chip) プ ロ セ ッ サ を 使 っ て 作 ら れ た 組 み 込 み シ ス テ ム と い っ た 、 PC 以 外 の シ ス テ ム で は 、 別 な 実 装 を 用 い て い る 。 こ の よ う な シ ス テ ム で は 、 PC/AT の RTC と 同 じ 機 能 を 提 供 し て い な い 場 合 が 多 い 。

RTC と シ ス テ ム ク ロ ッ ク の 違 い
RTC を シ ス テ ム ク ロ ッ ク と 混 同 す べ き で は な い 。 シ ス テ ム ク ロ ッ ク は 、 カ ー ネ ル に 管 理 さ れ る ソ フ ト ウ ェ ア ク ロ ッ ク で あ り 、 フ ァ イ ル に よ る タ イ ム ス タ ン プ 設 定 な ど と と も に 、 gettimeofday(2)time(2) を 実 装 す る の に 使 用 さ れ て い る 。 シ ス テ ム ク ロ ッ ク は 、 POSIX に お け る 紀 元 (Epoch; 1970−01−01 00:00:00 +0000 (UTC)) か ら の 秒 と ミ リ 秒 を 表 す 。 1 つ の 一 般 的 な 実 装 で は タ イ マ ー 割 り 込 み を 、 "jiffy" 毎 に 1 回 、 100, 250, 1000 Hz と い う 周 波 数 で カ ウ ン ト す る 。

RTC と シ ス テ ム ク ロ ッ ク の 重 要 な 違 い は 、 RTC は シ ス テ ム が 低 電 力 状 態 (「 オ フ 」 の 場 合 も 含 む ) で も 動 作 す る の に 対 し 、 シ ス テ ム ク ロ ッ ク は 動 作 し な い 点 で あ る 。 シ ス テ ム ク ロ ッ ク は 、 初 期 化 が 行 わ れ る ま で は 、 POSIX 紀 元 か ら で は な く シ ス テ ム の ブ ー ト 時 か ら の 時 刻 し か 返 せ な い 。 そ の た め 、 ブ ー ト 時 や シ ス テ ム の 低 電 力 状 態 か ら の 復 帰 (resume) 後 に は 、 シ ス テ ム ク ロ ッ ク は RTC を 使 っ て 現 在 の 壁 時 計 時 刻 に 設 定 さ れ る 場 合 が 多 い 。 RTC を 持 た な い シ ス テ ム で は 、 他 の 時 計 を 使 っ て シ ス テ ム ク ロ ッ ク を 設 定 す る 必 要 が あ り 、 ネ ッ ト ワ ー ク に ア ク セ ス し た り 、 (時 刻 ) デ ー タ を 手 動 で 入 力 し た り す る だ ろ う 。

RTC の 機 能
RTC は hwclock(8) ま た は 下 記 の ioctl リ ク エ ス ト で 読 み 書 き が で き る 。 日 付 と 時 間 を カ ウ ン ト す る の に 加 え て 、 多 く の RTC は 以 下 の よ う に 割 り 込 み を 発 生 で き る 。

* ク ロ ッ ク の 更 新 毎

(つ ま り 1 秒 毎 )。

*

2 Hz か ら 8192 Hz ま で の 2 の 乗 数 の 周 波 数 で 、 定 期 的 な 間 隔 。

* 前 も っ て 指 定 し た ア ラ ー ム 時 刻 に 達 し た 時 。 こ れ ら の 割 り 込 み 元 は 、 個 別 に 有 効 に し た り 無 効 に し た り で き る 。 多 く の シ ス テ ム で は 、 ア ラ ー ム 割 り 込 み を シ ス テ ム の ウ ェ イ ク ア ッ プ イ ベ ン ト と し て 設 定 で き る 。 こ の イ ベ ン ト は 、

RAM へ の サ ス ペ ン ド (STR, ACPI シ ス テ ム で S3 と 呼 ば れ る ) や ハ イ バ ー ネ ー シ ョ ン (ACPI シ ス テ ム で S4 と 呼 ば れ る ) と い っ た 低 電 力 状 態 や 、 「 オ フ 」 (ACPI シ ス テ ム で S5 と 呼 ば れ る ) か ら で も 、 シ ス テ ム を 復 帰 で き る 。 電 池 で バ ッ ク ア ッ プ さ れ た RTC が 割 り 込 み を 発 生 で き る シ ス テ ム と 、 で き な い シ ス テ ム が あ る 。

/dev/rtc (ま た は /dev/rtc0, /dev/rtc1 な ど の ) デ バ イ ス は (ク ロ ー ズ さ れ る ま で ) 1 回 し か オ ー プ ン す る こ と が で き ず 、 読 み 込 み 専 用 で あ る 。 read(2)select(2) を 呼 び 出 し た プ ロ セ ス は 、 RTC か ら の 割 り 込 み を 受 け 取 る ま で 停 止 (block) さ れ る 。 割 り 込 み の 後 、 プ ロ セ ス は long 型 整 数 を 読 み 出 す こ と が で き る 。 こ の 整 数 の 最 下 位 バ イ ト は 発 生 し た 割 り 込 み の 種 別 を コ ー ド 化 し た ビ ッ ト マ ス ク で あ り 、 残 り の 3 バ イ ト は 最 後 の read(2) 以 降 に 発 生 し た 割 り 込 み の 回 数 で あ る 。

ioctl(2) イ ン タ ー フ ェ ー ス 以 下 の ioctl(2) リ ク エ ス ト が RTC デ バ イ ス の 接 続 さ れ た フ ァ イ ル デ ィ ス ク リ プ タ ー に 対 し て 定 義 さ れ て い る :
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) の 第 3 引 き 数 と し て 渡 す 。

RTC_SET_TIME

ioctl(2) の 第 3 引 き 数 が 指 す rtc_time 構 造 体 の 値 を RTC 時 刻 に 設 定 す る 。 RTC 時 刻 の 設 定 す る 場 合 、 プ ロ セ ス は 特 権 (つ ま り CAP_SYS_TIME ケ ー パ ビ リ テ ィ ) を 持 た な け れ ば な ら な い 。

RTC_ALM_READ, RTC_ALM_SET ア ラ ー ム が サ ポ ー ト さ れ て い る RTC に 対 し て 、 ア ラ ー ム 時 刻 の 読 み 込 み と 設 定 を 行 う 。 ア ラ ー ム 割 り 込 み は 、 RTC_AIE_ON, RTC_AIE_OFF を 使 っ て 、 こ れ と は 別 に 有 効 ま た は 無 効 に し な け れ ば な ら な い 。 ioctl(2) の 第 3 引 き 数 は 、 rtc_time 構 造 体 へ の ポ イ ン タ ー で な け れ ば な ら な い 。 こ の 構 造 体 の tm_sec, tm_min, tm_hour フ ィ ー ル ド の み が 使 用 さ れ る 。
RTC_IRQP_READ
, RTC_IRQP_SET 周 期 的 な 割 り 込 み が サ ポ ー ト さ れ て い る RTC に 対 し て 、 周 期 的 な 割 り 込 み の 周 波 数 の 読 み 込 み と 設 定 を 行 う 。 周 期 的 な 割 り 込 み は 、 RTC_PIE_ON, RTC_PIE_OFF を 使 っ て 、 こ れ と は 別 に 有 効 ま た は 無 効 に し な け れ ば な ら な い 。 ioctl(2) の 第 3 引 き 数 は 、 そ れ ぞ れ unsigned long *unsigned long で あ る 。 こ の 値 は 1 秒 当 た り の 割 り 込 み の 回 数 で あ る 。 指 定 可 能 な 周 波 数 は 、 2 の 乗 数 で 2 か ら 8192 の 範 囲 で あ る 。 特 権 プ ロ セ ス (つ ま り CAP_SYS_RESOURCE ケ ー パ ビ リ テ ィ を 持 つ プ ロ セ ス ) の み が 、 /proc/sys/dev/rtc/max−user−freq に 書 か れ た 上 記 の 周 波 数 を 設 定 で き る 。 (こ の フ ァ イ ル に は デ フ ォ ル ト で 64 と い う 値 が 書 か れ て い る )。
RTC_AIE_ON
, RTC_AIE_OFF ア ラ ー ム が サ ポ ー ト さ れ て い る RTC に 対 し て 、 ア ラ ー ム 割 り 込 み を 有 効 ま た は 無 効 に す る 。 ioctl(2) の 第 3 引 き 数 は 無 視 さ れ る 。
RTC_UIE_ON
, RTC_UIE_OFF

1 秒 毎 の 割 り 込 み が サ ポ ー ト さ れ て い る RTC に 対 し て 、 ク ロ ッ ク 更 新 毎 の 割 り 込 み を 有 効 ま た は 無 効 に す る 。 ioctl(2) の 第 3 引 き 数 は 無 視 さ れ る 。

RTC_PIE_ON, RTC_PIE_OFF 周 期 的 な 割 り 込 み が サ ポ ー ト さ れ て い る RTC に 対 し て 、 周 期 的 な 割 り 込 み を 有 効 ま た は 無 効 に す る 。 ioctl(2) の 第 3 引 き 数 は 無 視 さ れ る 。 特 権 プ ロ セ ス (つ ま り CAP_SYS_RESOURCE ケ ー パ ビ リ テ ィ を 持 つ プ ロ セ ス ) の み が 、 そ の 時 点 で /proc/sys/dev/rtc/max−user−freq に 周 期 が 上 記 の 値 に 指 定 さ れ て い る 場 合 に 、 周 期 的 な 割 り 込 み を 有 効 に で き る 。
RTC_EPOCH_READ
, RTC_EPOCH_SET 多 く の RTC は 年 を 8 ビ ッ ト の レ ジ ス タ ー に コ ー ド 化 す る 。 年 は 8 ビ ッ ト の バ イ ナ リ 数 ま た は BCD 数 に 変 換 さ れ る 。 ど ち ら の 場 合 で も 、 そ の 数 値 は RTC の 紀 元 か ら 相 対 値 に 変 換 さ れ る 。 多 く の シ ス テ ム で は RTC の 紀 元 は 1900 に 初 期 化 さ れ る が 、 Alpha と MIPS で は 、 RTC レ ジ ス タ ー の 年 の 値 に 応 じ て 、 1952, 1980, 2000 の 何 れ か に 初 期 化 さ れ る 。 こ れ ら の 操 作 で そ れ ぞ れ RTC の 紀 元 の 読 み 込 み と 設 定 が 可 能 な RTC も あ る 。 ioctl(2) の 第 3 引 き 数 は 、 そ れ ぞ れ 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_ONRTC_AIE_OFF は 使 用 さ れ な い 。 pending フ ラ グ は RTC_WKALM_RD で 使 用 さ れ 、 処 理 待 ち の 割 り 込 み を 表 示 す る (EFI フ ァ ー ム ウ ェ ア で 管 理 さ れ る RTC と 通 信 す る と き 以 外 、 Linux で は ほ と ん ど 役 に 立 た な い )。 time フ ィ ー ル ド は RTC_ALM_READRTC_ALM_SET の 場 合 と 同 じ よ う に 使 用 さ れ る が 、 tm_mday, tm_mon, tm_year フ ィ ー ル ド も 有 効 で あ る と い う 点 が 異 な る 。 こ の 構 造 体 へ の ポ イ ン タ ー を ioctl(2) の 第 3 引 き 数 と し て 渡 さ な け れ ば な ら な い 。

フ ァ イ ル

/dev/rtc, /dev/rtc0, /dev/rtc1 な ど : RTC 特 殊 キ ャ ラ ク タ ー デ バ イ ス フ ァ イ ル

/proc/driver/rtc: (1 つ 目 の ) RTC の 状 態

注 意

カ ー ネ ル の シ ス テ ム ク ロ ッ ク を adjtimex(2) を 使 っ て 外 部 参 照 で 同 期 さ せ る 場 合 、 adjtimex(2) は 指 定 さ れ た RTC を 11 分 毎 に 定 期 的 に 更 新 す る 。 こ れ を 行 う た め カ ー ネ ル は 周 期 的 な 割 り 込 み を 短 期 間 無 効 に す る 必 要 が あ る 。 こ れ は RTC を 使 う プ ロ グ ラ ム に 影 響 を 与 え る 。

RTC の 紀 元 は 、 シ ス テ ム ク ロ ッ ク で の み 使 用 さ れ る POSIX の 紀 元 と は 何 の 関 係 も な い 。

RTC の 紀 元 と 年 の レ ジ ス タ ー に 基 づ く 年 が 1970 未 満 で あ る 場 合 、 100 年 後 、 つ ま り 2000 か ら 2069 で あ る と 仮 定 さ れ る 。

RTC の 中 に は ア ラ ー ム フ ィ ー ル ド に 「 ワ イ ル ド カ ー ド 」 の 値 を サ ポ ー ト す る も の も あ り 、 毎 時 15 分 や 各 月 の 初 日 な ど 、 定 期 的 な ア ラ ー ム を 行 う シ ナ リ オ を サ ポ ー ト す る 。 こ の よ う な 使 い 方 は 移 植 性 が な い 。 移 植 性 の 高 い ユ ー ザ ー 空 間 コ ー ド で は 、 単 独 の ア ラ ー ム 割 り 込 み だ け を 想 定 し 、 割 り 込 み の 受 信 後 に ア ラ ー ム を 無 効 ま た は 再 初 期 化 す べ き で あ る 。 以 下 の 機 能 を サ ポ ー ト す る RTC も あ る 。 1 秒 の 分 数 で は な く 、 1 秒 の 倍 数 を 周 期 と す る 周 期 的 な 割 り 込 み 。 複 数 の ア ラ ー ム 。 プ ロ グ ラ ム 可 能 な 出 力 ク ロ ッ ク シ グ ナ ル 。 不 揮 発 性 (nonvolatile) メ モ リ ー 。 こ の API で 現 在 提 供 し て い な い 、 そ の 他 の ハ ー ド ウ ェ ア 機 能 。

関 連 項 目

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

Linux カ ー ネ ル ソ ー ス 内 の Documentation/rtc.txt

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。