[Armadillo:07255] busybox のhwclockのバグ

Yasuhisa Nakamura email@hidden
2011年 5月 23日 (月) 22:17:04 JST


中村です。

[Armadillo:07250]で始まるスレッドで、settimeofday()、tzset()、
timezone 変数の話が出てましたので、関連する話題を提供させて
いただきます。

以前、A-220での開発案件のとき、USBメモリなどのVFATでの
ファイルのタイムスタンプが9時間ずれる問題に対処するため、
[Armadillo:01366]の記事
http://lists.atmark-techno.com/pipermail/armadillo/2006-November/001365.html
で紹介されているページに書かれている方法で、settimeofday()する
小さなプログラムを作りました。

その後、Armadillo-9の開発案件があり、A-9にはRTCがあるので、
hwclockコマンドで
  hwclock --hctosys --utc
とやって対処しようとしたところ、うまく動きませんでした。

このhwclockはbusyboxでして、busyboxのhwclockに次のパッチを
あてたところ、意図した動作をするようになりました。

[Armadillo:07253]でAMAGAI様が書かれているように、timezone を
参照する前にtzset()を実行しなければならない、という問題です。

最近440+LCDもいじっていますが、440+LCDでも同じです。
(atmark-distが同じですので当然といえば当然なのですが)

--- hwclock.c-orig
+++ hwclock.c
@@ -133,6 +133,8 @@
 static int to_sys_clock(int utc)
 {
        struct timeval tv = { 0, 0 };
+
+       tzset(); // need before referring timezone variable
        const struct timezone tz = { timezone/60 - 60*daylight, 0 };

        tv. tv_sec = read_rtc ( utc );

#hwclockコマンド関係で、あと2つ話題があります。
#これは後程、別メールで。

-- 
なかむら
(登録メールアドレスを変更しました。以前はdip.jpでした)






armadillo メーリングリストの案内