2017年11月30日

ラズパイのリアルタイムクロック(解決編←たぶん)

 「ラズパイにリアルタイムクロック (2016/09/12)」「ラズパイのリアルタイムクロック (2017/11/22)」の続き。(もう少し区別しやすいタイトルをつけるべきだったな。)

 どうも納得できなかったのは、「リアルタイムクロックなんて、OS の基本的な機能の一つなのに、なんでこんなめんどくさいんだ?」という点だった。いや、もちろんラズパイのハードウェアが RTC を搭載してないのはわかるんですよ。コストも上がるし、電池ってけっこうかさばるし。でも、RTC を外付けにしたら、OS は「あいよっ」って認識してくれて、あとはよろしくやってくれる、と、普通は期待するじゃないですか。今まで見てきた方法が、ぜんぜんそういう感じじゃなかったので、もやもやしていた。

 で、いろいろ探していて、"Adding a Real Time Clock to Raspberry Pi" (Adafruit) という記事を見つけた。これの "Raspbian Jessie (Systemd)" の項が、自分が探していたものじゃないかと。

1. sudo raspi-config で i2c を有効にする。

2. /boot/config.txt の末尾に次の一行を追記。

dtoverlay=i2c-rtc,ds1307

3. fake-hwclock を無効化。

sudo apt-get -y remove fake-hwclock
sudo update-rc.d -f fake-hwclock remove

4. /lib/udev/hwclock-set を編集して、以下の3行をコメントアウト。

#if [ -e /run/systemd/system ] ; then
# exit 0
#fi

5. もし(以前の実験で)ntpd を切っていたなら、改めて有効にする。

sudo chkconfig ntp on

 再起動する。RTC にアクセスできるかどうかチェック。

pi@raspberrypi:~$ sudo hwclock -r
Thu 30 Nov 2017 21:47:19 JST  -0.409684 seconds

 でたらめな日付を RTC に書き込んで、再起動してみる。

pi@raspberrypi:~$ sudo date -s "2017/11/29 00:00:00"
Wed 29 Nov 00:00:00 JST 2017
pi@raspberrypi:~$ sudo hwclock -w
pi@raspberrypi:~$ sudo hwclock -r
Wed 29 Nov 2017 00:00:42 JST  -0.969959 seconds
pi@raspberrypi:~$ sudo reboot
pi@raspberrypi:~$ date
Thu 30 Nov 21:51:10 JST 2017
pi@raspberrypi:~$ sudo hwclock -r
Wed 29 Nov 2017 00:02:44 JST  -0.104352 seconds

 システムクロックは ntpd の働きで正常になったが、RTC はそのまま。自動的に書き込むことはしないようだ。

 このまま、LAN を OFF にして再起動。

pi@raspberrypi:~$ date
Wed 29 Nov 00:05:29 JST 2017
pi@raspberrypi:~$ sudo hwclock -r
Wed 29 Nov 2017 00:05:37 JST  -0.840893 seconds

 RTC の日付が保持されている。

 もう一度、LAN を ON にして再起動。システムクロックが ntpd で NTP サーバに合うのを待って、RTC に手動で書き込んでみる。

pi@raspberrypi:~$ sudo hwclock -r
Wed 29 Nov 2017 00:08:40 JST  -0.915298 seconds
pi@raspberrypi:~$ date
Thu 30 Nov 21:57:20 JST 2017
pi@raspberrypi:~$ sudo hwclock -w
pi@raspberrypi:~$ sudo hwclock -r
Thu 30 Nov 2017 21:57:38 JST  -0.794143 seconds

 期待した動作はしている。あとは、ntpd で同期している時刻を RTC に記録してくれると万全なのだが、どこかにそういう設定がありそうな気がする。探してみよう。

Posted at 2017年11月30日 22:35:17
email.png