名 前
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_ON と RTC_AIE_OFF は 使 用 さ れ な い 。 pending フ ラ グ は RTC_WKALM_RD で 使 用 さ れ 、 処 理 待 ち の 割 り 込 み を 表 示 す る (EFI フ ァ ー ム ウ ェ ア で 管 理 さ れ る RTC と 通 信 す る と き 以 外 、 Linux で は ほ と ん ど 役 に 立 た な い )。 time フ ィ ー ル ド は RTC_ALM_READ や RTC_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/ に 書 か れ て い る 。