Linux Install Memo

サーバー管理者によるLinux関連ソフトのインストールメモ

Home » □Raspberry PiにUSB-GPSモジュールを繋いでgpsdとchronydでGPSでの自動時刻補正(簡易版)

□Raspberry PiにUSB-GPSモジュールを繋いでgpsdとchronydでGPSでの自動時刻補正(簡易版)

□Raspberry PiにUSB-GPSモジュールを繋いでgpsdとchronydでGPSでの自動時刻補正(簡易版)

Linuxにはgpsdというのがあって、簡単にGPSデータを扱えることははるか昔に書いたけど、Raspberry PiがバックアップされたRTCを持っていないので起動するたびに時刻がリセットされてヽ(`Д´#)ノ ムキー!!となっていて、ふとそのことを思い出した。

で、最近はGPSって安いのかなーと思ってアリババでぐぐって見ると

http://www.aliexpress.com/item/G-mouse-U-blox-Microchip-USB-GPS-Receiver-H-8123-U2000-for-PC-and-Laptops-USB/1902950288.html

おー、安い安い、というわけでさっそくポチってみた。

Windows7ではドライバを入れないとダメみたいだったけど、受信できた。

> $GPGLL,,,,,,V,N*64
> $GPTXT,01,01,02,u-blox ag – www.u-blox.com*50
> $GPTXT,01,01,02,HW UBX-G60xx 00040007 FFF9FFFFp*5D
> $GPTXT,01,01,02,ROM CORE 7.03 (45969) Mar 17 2011 16:18:34*59
> $GPTXT,01,01,02,ANTSUPERV=AC SD PDoS SR*20
> $GPTXT,01,01,02,ANTSTATUS=OK*3B
> $GPRMC,,V,,,,,,,,,,N*53
> $GPVTG,,,,,,,,,N*30
> $GPGGA,,,,,,0,00,99.99,,,,,,*48
> $GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30
> $GPGSV,1,1,00*79
> $GPGLL,,,,,,V,N*64
> $GPRMC,,V,,,,,,,,,,N*53
> $GPVTG,,,,,,,,,N*30
> $GPGGA,,,,,,0,00,99.99,,,,,,*48
> $GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30

ので、Linuxの場合にはとりあえずUSBにさすと…

> Sep 8 13:33:44 mydns-adapter kernel: [ 8944.566880] usb 1-1.4: new full-speed USB device number 5 using dwc_otg
> Sep 8 13:33:44 mydns-adapter kernel: [ 8944.669691] usb 1-1.4: New USB device found, idVendor=1546, idProduct=01a6
> Sep 8 13:33:44 mydns-adapter kernel: [ 8944.669731] usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=0
> Sep 8 13:33:44 mydns-adapter kernel: [ 8944.669750] usb 1-1.4: Product: u-blox 6 – GPS Receiver
> Sep 8 13:33:44 mydns-adapter kernel: [ 8944.669768] usb 1-1.4: Manufacturer: u-blox AG – www.u-blox.com
> Sep 8 13:33:44 mydns-adapter kernel: [ 8944.739771] cdc_acm 1-1.4:1.0: ttyACM0: USB ACM device
> Sep 8 13:33:44 mydns-adapter kernel: [ 8944.743849] usbcore: registered new interface driver cdc_acm
> Sep 8 13:33:44 mydns-adapter kernel: [ 8944.743878] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters

いけてるっぽいね。

では早速必要なソフトをインストール

yum -y install gpsd gpsd-clients

でもって挿し直すと…

> Sep 8 13:55:05 mydns-adapter systemd: Starting system-gpsdctl.slice.
> Sep 8 13:55:05 mydns-adapter systemd: Created slice system-gpsdctl.slice.
> Sep 8 13:55:05 mydns-adapter systemd: Starting GPS (Global Positioning System) Daemon Sockets.
> Sep 8 13:55:05 mydns-adapter systemd: Listening on GPS (Global Positioning System) Daemon Sockets.
> Sep 8 13:55:05 mydns-adapter systemd: Starting Manage ttyACM0 for GPS daemon…
> Sep 8 13:55:05 mydns-adapter gpsdctl: gpsd_control(action=add, arg=/dev/ttyACM0)
> Sep 8 13:55:05 mydns-adapter gpsdctl: reached a running gpsd
> Sep 8 13:55:05 mydns-adapter systemd: Starting GPS (Global Positioning System) Daemon…
> Sep 8 13:55:06 mydns-adapter systemd: Started GPS (Global Positioning System) Daemon.
> Sep 8 13:55:06 mydns-adapter systemd: Started Manage ttyACM0 for GPS daemon.

あれ?もう動くの?

cgps -s

とか

gpsmon

で動作確認が出来る…よ、というかできたら、あとは時刻合わせをしましょう。

Raspberry Pi用にちゃちゃっと作って配布している汎用IPアドレス通知装置用のブートイメージ(Pidora2014)では、それまでのntpdではなくてchronydという、新しいNTPソフトが入っているので、これで設定してみる…とはまった。

・chronyd

http://nyanchew.com/jp/gps%E3%81%AEpps%E4%BF%A1%E5%8F%B7%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F-stratum-1-ntp%E3%82%B5%E3%83%BC%E3%83%90%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9
http://www.catb.org/gpsd/gpsd-time-service-howto.html#_feeding_chrony_from_gpsd

emacs /etc/chrony.conf

----------
refclock SHM 0
###refclock SHM 0 offset 0.9999 delay 0.2 refid GPS
----------

emacs /etc/sysconfig/gpsd

----------
OPTIONS=”-N -n”
----------

※↑これがポイント、もともとgpsdはUSB接続デバイスについては-N(フォアグラウンド)モードで
動いてしまうため、最初からUSB-GPSを接続しておくなら、さらにオプションとして-Nをつけて
フォアグラウンドをOFF(本来のデーモンモード)として動作させ、さらに-nでデバイス確認を
無視するようにして動かすようにしておくといい。

を追記して、

systemctl enable chronyd.service
systemctl start chronyd.service
systemctl status chronyd.service

> chronyd.service – NTP client/server
> Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled)
> Active: active (running) since Thu 1970-01-01 09:00:11 JST; 44 years 8 months ago
> Process: 222 ExecStartPost=/usr/libexec/chrony-helper add-dhclient-servers (code=exited, status=0/SUCCESS)
> Process: 193 ExecStart=/usr/sbin/chronyd $OPTIONS (code=exited, status=0/SUCCESS)
> Main PID: 205 (chronyd)
> CGroup: /system.slice/chronyd.service
> mq205 /usr/sbin/chronyd
>
> Jan 01 09:00:10 mydns-adapter.local chronyd[205]: chronyd version 1.30 starting
> Jan 01 09:00:10 mydns-adapter.local chronyd[205]: Frequency 7.555 +/- 111.073 ppm read from /var/lib/chrony/drift
> Jan 01 09:00:57 mydns-adapter.local chronyd[205]: Selected source GPS
> Jan 01 09:00:57 mydns-adapter.local chronyd[205]: System clock wrong by 1410164146.402824 seconds, adjustment started
> Sep 08 17:16:43 mydns-adapter.local chronyd[205]: System clock was stepped by 1410164146.402824 seconds

となって、だいたい起動一分くらいで時刻補正してくれているのがわかる。

で、念のため確認すると

chronyc sources

> 210 Number of sources = 1
> MS Name/IP address Stratum Poll Reach LastRx Last sample
> ===============================================================================
> #* GPS 0 4 34 42 +73us[-16321d] +/- 100ms

となって、date で時間があってればOK。

> Mon Sep 8 17:34:17 JST 2014

DSC_0003

これで富士山にスタンドアロンで持っていっても、時刻はちゃんと合わせられるはず(モバイルバッテリがもつかな?)

 

 

Name of author

Name: admin

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です