以下に、GPSモジュールの利用に有効なGPSDサービスプログラムおよびGPS関連のユーティリティプログラムのパッケージインストール手順を示す。
0.準備作業として、前提となるGPSモジュールを接続してシリアルポートの信号受信を確認
1)シリアルポートのデバイスファイルの確認
pi@raspberrypi:/boot $ ls -l /dev/* |grep serial
lrwxrwxrwx 1 root root 5 Jan 3 00:52 /dev/serial0 -> ttyS0
lrwxrwxrwx 1 root root 7 Jan 3 00:52 /dev/serial1 -> ttyAMA0
pi@raspberrypi:/boot $
2)シリアルポートの設定確認
# vi /boot/cmdline.txt
dwc_otg.lpm_enable=0 console=tty1 console=ttyAMA0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait fbcon=map:10 fbcon=font:ProFont6x11 logo.nologo
# vi /boot/config.txt
enable_uart=1
3)以上から、下記コマンドを実行して、シリアルポートの信号受信を確認。
$ sudo cat /dev/serial0
<出力内容は省略するが、NMEAフォーマットのデータが表示されることを確認>
※NMEAフォーマットデータについては、こちらを参照のこと。
以上、GPSモジュールが接続され正しく動作し、その出力がラズパイに届いていることを確認できたら、ここから本題のGPSDの導入作業に移る。
1.GPSモジュールを接続したラズパイにて下記コマンドを実行して、gpsd及びそのクライアントパッケージをインストールする。
pi@raspberrypi:/boot $ sudo apt-get install gpsd gpsd-clients
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
libgps21 python-gps
The following NEW packages will be installed:
gpsd gpsd-clients libgps21 python-gps
0 upgraded, 4 newly installed, 0 to remove and 11 not upgraded.
Need to get 524 kB of archives.
After this operation, 1,079 kB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Get:1 http://mirrordirector.raspbian.org/raspbian/ jessie/main libgps21 armhf 3.11-3 [208 kB]
Get:2 http://mirrordirector.raspbian.org/raspbian/ jessie/main gpsd armhf 3.11-3 [93.4 kB]
・・・・・・・
<一部省略>
・・・・・・・
Setting up gpsd-clients (3.11-3) ...
Processing triggers for libc-bin (2.19-18+deb8u10) ...
Processing triggers for systemd (215-17+deb8u7) ...
pi@raspberrypi:/boot $
2.インストール直後にプロセスが上がるとのことなので、確認する。
pi@raspberrypi:/boot $ ps aux|grep gps
gpsd 2572 0.0 0.7 13924 7204 ? S<s 22:09 0:00 /usr/sbin/gpsd -N
3.これを以下の手順で停止させる。
1)サービス名の確認と停止
# systemctl --all | grep gps
gpsd.service loaded active running GPS (Global Positioning System) Daemon
gpsd.socket loaded active running GPS (Global Positioning System) Daemon Sockets
# service gpsd stop
2)Defaultサービスのスタートアップ無効化
root@raspberrypi:~# systemctl disable gpsd.socket
Removed symlink /etc/systemd/system/sockets.target.wants/gpsd.socket.
root@raspberrypi:~#
4.スタートアップスクリプト/etc/default/gpsdにて、下記の通り追加修正する。
USBAUTO=”true” =>"false"に変更
DEVICES="" =>”/dev/serial0”に変更
GPSD_OPTIONS="" =>"-n"に変更
下記の一文を追加
GPSD_SOCKET=/var/run/gpsd.sock"
5.GPSDデーモンを起動させる。(上記設定の確認も含めて)
# service gpsd start
# ps -ef|grep gps
gpsd 2671 1 3 19:54 ? 00:00:00 /usr/sbin/gpsd -N -n /dev/serial0
参考)GPSD起動中にpsコマンドでプロセスを確認すると、上記ファイル内のGPSD_OPTIONSの値に記述されていないくても、デフォルトでgpsdのオプションとして”-N”が指定されているが、これは /lib/systemd/system/gpsd.service内にて、記述されているためである。
6.gpsmonを実行して動作確認を図る。
$> sudo gpsmon
[q]<RET>で、CUI画面を終了させることができる。
7.GPSDデーモンのスタートアップ起動の有効化
$ sudo insserv -d gpsd
または
$ sudo systemctl enable gpsd
Synchronizing state for gpsd.service with sysvinit using update-rc.d...
Executing /usr/sbin/update-rc.d gpsd defaults
Executing /usr/sbin/update-rc.d gpsd enable
Created symlink from /etc/systemd/system/sockets.target.wants/gpsd.socket to /lib/systemd/system/gpsd.socket.
$
本来なら、上記のいずれかでスタートアップが有効になるはずだが、
下記のコマンドを実施しないと、OS起動時に自動起動してくれない。
$ sudo ln -s /lib/systemd/system/gpsd.service /etc/systemd/system/multi-user.target.wants/
以上により、端末起動後、GPSDからGPSモジュールの測位データをいつでも取得できる状態となった。
以上