RaspberryPiはRTCおよびバックアップバッテリを搭載していないため、起動直後はシステムクロックが初期値になっています。バッテリバックアップ付きのRTCモジュールを使用することで、オフライン状態で起動してもシステムクロックを維持することが出来ます。
前提条件
- Arch Linux ARM
- DS3231使用RTCモジュール
RTCモジュールを搭載する
RTCモジュール
RaspberryPi, RTCなどのキーワードで検索するといくつかの製品が販売されていますが、Amazon.co.jpで販売されていたRaspberryPi用のI2Cモジュールを使いました。
- I2C接続DS3231使用のRaspberryPi用RTCモジュール (Amazon.co.jpで入手, Raspberry Pi white Case (白ケース)に入ります)
ビジュアル的にこんなかんじで、RaspberryPiに亀の子にして搭載します。写真には写っていませんがモジュールの裏側に小型バッテリがハンダ付けされています。
モジュールの初期化
ArchLinux 3.12.20-4-ARCHでは、次のコマンドでRTCモジュールを呼び出すことが出来ました(手元のハードウェアではrc.local
的なファイルを使用して起動時にRTCモジュールが有効になるようにしています。
)。
/usr/bin/echo ds1307 0x68 | /usr/bin/tee /sys/class/i2c-adapter/i2c-1/new_device
※昔はmodprobeコマンドなどを利用して認識させていたと思いますが、イマイチこの辺りの仕組みを理解できていません。modprobe.conf的なファイルに何かを書いてあげればシステムファイルに書き込みしなくても認識するのでしょうか?
dmesgの出力。
[root@alarmpi ~]# dmesg | grep -i ds1307
[ 8.205884] i2c i2c-1: new_device: Instantiated device ds1307 at 0x68
[ 8.277696] rtc-ds1307 1-0068: rtc core: registered ds1307 as rtc0
[ 8.277758] rtc-ds1307 1-0068: 56 bytes nvram
起動後の状態で確認
起動直後の状態で、
[root@alarmpi ~]# uptime
15:21:28 up 0 min, 1 user, load average: 0.81, 0.22, 0.07
システムクロックがハードウェアクロックと同期しています。
[root@alarmpi ~]# timedatectl status
Local time: Sat 2014-06-07 15:21:29 JST
Universal time: Sat 2014-06-07 06:21:29 UTC
RTC time: Sat 2014-06-07 06:21:30
Time zone: Asia/Tokyo (JST, +0900)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no
DST active: n/a
いえい!
参考。