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サーバ の出力
改善前 改善後 |