RTC とかシステムクロックについて調べたことをまとめときます。
環境
Ubuntu Ja 14.04 Desktop Amd64
Ubuntu が RTC をどのように扱うか
RTC に設定された時刻を UTC、ローカルタイムのどちらとして扱うかは /etc/default/rcS の UTC の値で決まります。
$ cat /etc/default/rcS
... snip ...
# assume that the BIOS clock is set to UTC time (recommended)
UTC=no
... snip ...
UTC=no なので、RTC に設定された時刻はローカルタイムとして扱われます。今回は Windows とのデュアルブート環境なので RTC にはローカルタイムを設定してます。
UTC=yes だと RTC に設定された時刻は UTC として扱われます。
/proc/driver/rtc で RTC に設定された時刻を確認
RTC に設定されている時刻がそのまま表示されます。
$ cat /proc/driver/rtc
rtc_time : 19:42:29
rtc_date : 2014-05-05
... snip ...
RTC に設定された時刻は 2014/05/05 19:42:29 でした。
hwclock で RTC に設定された時刻を確認
man ページに書かれているとおり、hwclock では時刻は必ずローカルタイムに変換されて表示されます。
$ man hwclock
... snip ...
-r, --show
Read the Hardware Clock and print the time on standard output.
The time shown is always in local time, even if you keep your
Hardware Clock in Coordinated Universal Time. See the --utc
option. Showing the Hardware Clock time is the default when no
function is specified.
... snip ...
-- localtime オプションで RTC に設定された時刻をローカルタイムとして扱い、 --utc オプションで RTC に設定された時刻を UTC として扱います。
つまり、以下に例示したとおり、 RTC に設定された時刻がローカルタイムの場合は -- localtime を付けて hwclock を実行し、UTC の場合は --utc を付けて hwclock を実行しないとうまく時刻を確認できません。
RTC がローカルタイムで設定されている場合は -- localtime を付けると RTC に設定された時刻をそのままローカルタイムとして正しく表示します。
$ cat /proc/driver/rtc | head -n 2 rtc_time : 22:48:32 rtc_date : 2014-05-05 $ grep ^UTC /etc/default/rcS UTC=no $ date 2014年 5月 5日 月曜日 22:48:34 JST $ sudo hwclock --localtime 2014年05月05日 22時48分37秒 -0.234889 秒
RTC がローカルタイムで設定されているのに --utc を付けると UTC として解釈してしまい、それをローカルタイムに変換した時刻が表示されます。
$ cat /proc/driver/rtc | head -n 2 rtc_time : 22:48:39 rtc_date : 2014-05-05 $ grep ^UTC /etc/default/rcS UTC=no $ date 2014年 5月 5日 月曜日 22:48:40 JST $ sudo hwclock --utc 2014年05月06日 07時48分44秒 -0.989131 秒結果として、hwclock では現在時刻より 9時間進んだ時刻がローカルタイムとして表示されます。
RTC が UTC で設定されている場合は --utc を付けると RTC に設定された時刻を UTC として正しく解釈し、ローカルタイムに変換された時刻を正しく表示します。
$ cat /proc/driver/rtc | head -n 2 rtc_time : 13:50:08 rtc_date : 2014-05-05 $ grep ^UTC /etc/default/rcS UTC=yes $ date 2014年 5月 5日 月曜日 22:50:09 JST $ sudo hwclock --utc 2014年05月05日 22時50分13秒 -0.969169 秒
RTC が UTC で設定されているのに -- localtime を付けるとローカルタイムとして解釈してしまい、そのまま表示されます。
$ cat /proc/driver/rtc | head -n 2 rtc_time : 13:50:15 rtc_date : 2014-05-05 $ grep ^UTC /etc/default/rcS UTC=yes $ date 2014年 5月 5日 月曜日 22:50:16 JST $ sudo hwclock --utc 2014年05月05日 13時50分20秒 -0.984840 秒結果として、hwclock では現在時刻より 9時間前の時刻 (つまり UTC) がローカルタイムとして表示されます。
おまけ
hwclock に -- localtime も --utc も付けない場合は、/etc/adjtime の状態により RTC の解釈が異なります。
/etc/adjtime が存在し、このファイルの中身の最後の行が LOCAL になっている場合は RTC はローカルタイムとして解釈されます。( -- localtime を付けた場合と同じ結果になります。)
/etc/adjtime が存在し、このファイルの中身の最後の行が UTC になっている場合は RTC は UTC として解釈されます。( --utc をつけた場合と同じ結果になります。)
/etc/adjtime が存在しない場合も RTC は UTC として解釈されます。
0 件のコメント:
コメントを投稿