2014年1月7日

Raspberry Piにリアルタイムクロックをインストールする

Raspberry Pi(以下RPi)は、コストを抑えるためか、電池でバックアップされたリアルタイムクロックを実装していない。このため、インターネットに接続されていない、正確にはNTPサーバにアクセスできない環境では、時計が例の1970年の元旦にリセットしてしまい、具合が悪い。前回のドライブレコーダの記事に使おうとしているRPiは「時々」インターネットに繋がる可能性があるだけなので、何とかしなければならない。
 
 
Amazonで検索すると、うってつけの製品が見つかった。SunFounder DS3231という小さなPCボードで、I2CでRPi(やArduino)のI/Oポートに直接装着できる。単価$6という価格も嬉しい。さっそく買ってみた。
 
RPiでの使用方法はこちらのサイトに解説されており(右の製品写真もこのサイトから拝借した)、それに従えばちゃんと動くが、少々読みにくいので以下に読み下し解説を再掲載してみる。

ハードウェアの実装はとても簡単。写真のようにI/Oポートに向きを正しく差し込んでお終い。

ソフトウェアは、以下の二つのファイルを変更し、
  • /etc/init.d/hwclock.sh
  • /etc/modprobe.d/raspi-blacklist.con
以下のファイルを追加する。
  • /etc/cron.hourly/sync-hwclock
いちいちエディタで修正するのは面倒なので、パッチファイルを作ったので使ってください。
 
/tmp/ds3231にパッチファイルをダウンロードして、patchを実行。





root@pi:~# cd /
root@pi:/# patch --dry-run -p0 < /tmp/ds3231.patch
 問題のないことを確認してね
root@pi:/# patch -p0 < /tmp/ds3231.patch 
実は、最後の追加ファイル(/etc/cron.hourly/sync-hwclock)は原典には含まれていない。定期的にntptraceを実行して、NTPが生きているならリアルタイムクロックをNTPに同期させるごく簡単なスクリプト。
 

で、OSの設定を変更

ファイルにパッチを当てただけではまだ動かない。以下の手順を実行してOSの設定を変更しなければならない。 

まず、パッチを当てたhwclock.shをイネーブルしてリブート。
root@pi:~# update-rc.d hwclock.sh enable
root@pi:~# reboot

この段階で、/dev/rtc0という新しいデバイスファイルが出来上がっていることを確認。
確認できたら、今一度タイムゾーンの設定を確認。
root@pi:~# dpkg-reconfigure tzdata
 
もうリアルタイムクロックが使えるので、NTPで同期してある現在の時刻をリアルタイムクロックに書き込んで、もともとのダミーのリアルタイムクロックをディセーブルすると出来上がり。
root@pi:~# heclock -w
root@pi:~# update-rc.d fake-hwclock disable
root@pi:~# reboot

原典では以下も実行してNTPを完全に殺しているが、時々でもインターネットに繋がる可能性があるのなら、NTPで時刻を常に同期させる方がよいのでここでは実行しない。もしNTPを完全に殺すなら、上記で作成したcronファイルは削除してください。
root@pi:~# update-rc.d ntp disable
  
リアルタイムクロックの動作確認は、本当はネットワークを外してリブートしてOSの時計がちゃんと設定されていることを確認すべきだが、ハードウェアクロックの動作確認だけなら以下で十分。
root@pi:~# hwclock --show


簡単でしたね。








0 件のコメント:

コメントを投稿