10. 時刻が消えて不便
小さくでもLinuxですから、システムは時刻を管理しています。 ところが、 3069ボードではバッテリバックアップされたRTC(リアルタイムクロック)が無いので、 電源を切るたびに日付/時刻を忘れてしまいます。 起動後に手で設定はできますが、それを忘れてHDDにデータを書き込んだりすると、 とんでもなく古い日付のファイルができてしまいます。 実用上それほど害は無いのですがなんだか気に入りません。 そこで、RTC (DS1307) とバッテリをつけてみました。

/dev/rtc をサポートするデバイスドライバを作ると、 Linuxで普通に使われている時刻設定コマンド (hwclock) がそのまま動くので、 これまたLinuxであることの恩恵を受けられて幸せです。 kernelの初期化時にもRTCから時刻を読み出して設定するようにして、 これでいつ電源を切っても正しい日付/時刻で動作再開するようになりました。 将来、 MP3 Playerに時計機能やタイマー機能を付けようと思った時にも役にたちそうです。

《 ← 前へ 》 《 次へ → 》

秋月3069ネットボードにRTC(Real Time Clock)を接続
1. 回路図
使用した RTC は DS1307 (PDF) です。 ピン数が少ないので配線が楽なのが理由です。 本当はI2C data (SDA)は双方向なので正しくは open drain + pull-up にすべきですが、 outとinで2ピン消費してしまうのをけちって、 ソフトでI/Oピンの in/out の向きをがちゃがちゃ切替えることで 1ピンで済ませてしまいました。 厳密には向きを切替えるタイミングでfightしてしまう期間があるかもしれませんが、 実用上はまず問題ないでしょう。
2. デバイスドライバ
linux-2.4.x/drivers/char/rtc.c を参考に ds1307.cds1307rtc.h (linux-2.4.x/include/asm-h8300に置く)を作成しました。 基本的にはCMOS_READ、CMOS_WRITEのところを DS1307 の I2C レジスタアクセスに置き換えただけです。

kernel起動時にRTCから時刻を読み込んで初期化するために、 linux-2.4.x/arch/h8300/platform/h8300h/aki3068net/timer.c の platform_gettod() でRTCにアクセスするコードを追加しました (パッチ)。 H8 のインターバルタイマの設定値が、 システムの time tick 時間の定義(HZ の値)を正しく反映するようにする修正も含まれています。 menuconfig で変数 CONFIG_H8300_DS1307 を持たせて有効になるようにしています。 ファイルシステム上に /dev/rtc を作成するのを忘れずに。

    % mknod rtc c 10 135
    
《 ← 前へ 》 《 次へ → 》