ホーム‎ > ‎KURO-BOX/T4‎ > ‎

システムクロックの改善

KURO-BOX/T4 には、システムクロックが1時間で約27秒も狂うという致命的な欠点があるが、これは カーネルソースの arch/powerpc/boot/dts/kuro_nas_t4.dts で指定されている timebase-frequency の値がクロックが不安定な LinkStation HG-LAN と同じ値に補正されているのが原因。KURO-BOX/T4 では、クロックが設計値とほぼ同じになるよう回路が修正されているので、かえってこの補正が悪さをしてしまう。

対策は、arch/powerpc/boot/dts/kuro_nas_t4.dts 中の timebase-frequency の値を正しい値に書き直し、dtb ファイルを生成し、FIT対応の uImage ファイルを作成すればよい。つまり、カーネルを再構築する必要はなく、この辺に Device Tree の仕組みの利点を感じる。

$ diff -Nur arch/powerpc/boot/dts/kuro_nas_t4.dts.orig arch/powerpc/boot/dts/kuro_nas_t4.dts
--- arch/powerpc/boot/dts/kuro_nas_t4.dts.orig  2009-07-09 23:30:46.000000000 +0900
+++ arch/powerpc/boot/dts/kuro_nas_t4.dts       2009-09-24 22:18:47.000000000 +0900
@@ -39,7 +39,7 @@
                        device_type = "cpu";
                        reg = <0x0>;
                        clock-frequency = <266000000>;  /* Fixed by bootloader */
-                       timebase-frequency = <32522240>; /* Fixed by bootloader */
+                       timebase-frequency = <32768000>; /* Fixed by bootloader */
                        bus-frequency = <0>;            /* Fixed by bootloader */
                        /* Following required by dtc but not used */
                        i-cache-size = <0x4000>;

修正した kuro_nas_t4.dts ファイルから dtc コマンドを使って .dtb ファイルを作成する。

$ scripts/dtc/dtc -I dts -O dtb -p 1024 -o kuro_nas_t4.dtb arch/powerpc/boot/dts/kuro_nas_t4.dts

修正した kuro_nas_t4.dtb ファイルを添付しておく。これを使って、修正版 uImage を作成するには、vmlinuz (HDDから取り出したのでも、自前でビルドしたのでもよい), initrd.img (HDDのイメージファイルから取り出したもの), kuro_nas_t4.dtb, kuro_nas_t4.its (DDDさん作成のものを一部ファイル名を変更したもの) を同一ディレクトリにおいて、以下のコマンドにより作成する。

$ mkimage -f kuro_nas_t4.its kuro_nas_t4-mod.itb

kuro_nas_t4-mod.itb を KURO-BOX/T4 の /boot ディレクトリにコピーし、uImage.buffalo.mod にシンボリックリンクを貼る。

# cd /boot
# ln -s kuro_nas_t4-mod.itb uImage.buffalo.mod

リブートして U-Boot に入り、環境変数 kernel を一時的に uImage.buffalo.mod に変更して、修正した uImage で起動する。

BUFFALO>> setenv kernel uImage.buffalo.mod
BUFFALO>> run hdboot

無事起動して、システムクロックのずれが直っているのを確認したら、kuro_nas_t4-mod.itb を uImage.buffalo にシンボリックリンクして再起動する。

# ln -s kuro_nas_t4-mod.itb uImage.buffalo

# ntpdate -b NTPサーバ; sleep 3600; ntpdate -b NTPサーバ の出力
改善前
24 Sep 19:04:31 ntpdate[5024]: step time server aa.bb.cc.dd offset -26.997763 sec
24 Sep 21:04:08 ntpdate[5374]: step time server aa.bb.cc.dd offset -26.996706 sec
24 Sep 23:04:07 ntpdate[5674]: step time server aa.bb.cc.dd offset -26.996540 sec
25 Sep 01:04:07 ntpdate[5963]: step time server aa.bb.cc.dd offset -26.996738 sec
25 Sep 03:04:07 ntpdate[6252]: step time server aa.bb.cc.dd offset -26.996919 sec
25 Sep 05:04:07 ntpdate[6542]: step time server aa.bb.cc.dd offset -26.996817 sec
25 Sep 07:04:07 ntpdate[7062]: step time server aa.bb.cc.dd offset -26.996558 sec
25 Sep 09:04:07 ntpdate[7363]: step time server aa.bb.cc.dd offset -26.995795 sec
25 Sep 11:04:07 ntpdate[7652]: step time server aa.bb.cc.dd offset -26.998734 sec
改善後
29 Sep 21:00:01 ntpdate[2967]: step time server aa.bb.cc.dd offset 0.002165 sec
29 Sep 23:00:02 ntpdate[3257]: step time server aa.bb.cc.dd offset 0.002510 sec
30 Sep 01:00:01 ntpdate[3543]: step time server aa.bb.cc.dd offset 0.002847 sec
30 Sep 03:00:02 ntpdate[3842]: step time server aa.bb.cc.dd offset 0.002827 sec
30 Sep 05:00:01 ntpdate[4140]: step time server aa.bb.cc.dd offset 0.002847 sec
30 Sep 07:00:02 ntpdate[4505]: step time server aa.bb.cc.dd offset 0.002746 sec
30 Sep 09:00:01 ntpdate[4793]: step time server aa.bb.cc.dd offset 0.003438 sec


Č
ċ
ď
kuro_nas_t4-mod.itb
(4991k)
Riohey E,
2009/09/29 2:12
ċ
ď
kuro_nas_t4.dtb
(4k)
Riohey E,
2009/09/29 1:48
ċ
ď
kuro_nas_t4.its
(1k)
Riohey E,
2009/09/29 2:00