FreeBSD機でGPSのPPS信号に同期したNTPサーバを設定しました。
以下、設定方法を記します。
環境:
OS: FreeBSD 7.0
GPS受信機: GPSレシーバセット EasyTime
http://www.rakuten.co.jp/gps/387357/614348/614350/
Garmin製 時刻同期用GPSコア マース15tm 内蔵
http://www.rakuten.co.jp/gps/387357/465139/470224/
接続: シリアル(RS-232C) ストレートケーブル
方法:
1. カーネル構築
※ /usr/src 以下に、X以外の全ソースがあることが前提です。
/usr/src/sys/i386/conf 以下に、GENERICカーネルのconfigファイルがありますので、
# cd /usr/src/sys/i386/conf
# cp GENERIC GPS
# vi GPS
として、以下の行を書き換え、または追加してください。
ident GENERIC <この行を
ident GPS <に書き換え
options PPS_SYNC <この行を適当なところに追加
次に、カーネルを再構築します。
# config GPS
# cd ../../compile/GPS
# make depend; make
-- 環境にもよりますが、数十分~数時間かかります --
# make install
これで、カーネルがPPSを取得できるようになります。
再起動して、無事起動したら、
# sysctl kern.version
と入力して例えば下記のように表示されれば、「ident GPS」で作成したカーネルで起動していることを確認できます。
(表示例)
kern.version: FreeBSD 7.0-RELEASE #0: Mon Oct 13 15:36:54 JST 2008
sample@test.example.jp:/usr/src/sys/i386/compile/GPS
2. GPSの接続と確認
シリアルケーブルをGPS受信機とPC本体のシリアルポートに接続してください。
次に、
# vi /etc/devfs.conf
として、適当なところに
link cuad0 gps0
link cuad1 gps1 (おまけ)
を追加して、
# /etc/rc.d/devfs restart
としてください。
/dev/gps0 ができていることと思います。
# jerm /dev/gps0
としてみてください。
jermでシリアル接続の確認(必須ではありません)
packages またはports
(/usr/ports/comms/jerm/)
を使って、jermをインストールしてください。
インストール後、
# jerm /dev/gps0
とすると、ずらずらっと文字列が出てくると思います。
(出てこなければgps0に信号が来ていません。)
# cat /dev/gps0
でも表示されます。
GarminのGPSはNMEAフォーマットで信号を送ってきますので
+IGNBRK -BRKINT -IGNPAR -PARMRK -INPCK -ISTRIP -INLCR -IGNCR -ICRNL
-IXON -IXOF -OPOST -ONLCR -OXTABS -ONOEOT....
と出た後に、
$GPRMC,004205,V,3534.5642,N,14008.6974,E,000.0,199.8,071008,007.0,W*75
と、時刻、緯度、経度が出てきます。
NMEAフォーマットの詳細は以下のページに詳しいです。
http://bg66.soc.i.kyoto-u.ac.jp/forestgps/nmea.html
3: NTPサービスの準備
GPS受信機は、そのままではFreeBSDのntpdが信号を受け取ることができませんので、受信機ユニット内部のショートチップをはずす必要があります。
基板上のシルク印刷を正立視して右上のショートチップの右側、「UNIX」の文字の下のショートチップを取り外してください。
これによりのRS-232Cの4p-6pの短絡を開放できます。
4: NTPサービスの起動
#vi /etc/rc.conf
として、以下の2行を適当なところに記入してください。
ntpd_enable="YES"
ntpd_config="/etc/ntp/ntp.conf"
次に、ntpサービスの設定ファイルを作成します。
# vi /etc/ntp/ntp.conf
として、以下の4行を記入してください。
pidfile /var/run/ntpd.pid
driftfile /var/db/ntpd.drift
server 127.127.20.0
fudge 127.127.20.0 time1 -1
127.127.20.0 は、ローカルホストの20(NMEA)の0番を指します。
NTPサービスのrefclock番号の仕様は以下で見つけました。
http://obswww.unige.ch/~bartho/xntp_faq/faq3Carb.htm
次に、ntpdを起動します。
# /etc/rc.d/ntpd start
5: 確認
# ntpq -p
# ntpq -p -c rv
# ntpdc -c kern
あたりを実行してみてください。
以下のように出力されれば、GPSからの電波を取れています。
左から3個目の数字「0」が、親(GPS)のStratum数を表します。
(ここが0ということはこのサーバはStratum1ということになります。)
remote refid st t when poll reach delay offset jitter
==============================================================================
GPS_NMEA(0) .GPS. 0 l 99 64 2 0.000 -5.897 0.002
以下、設定方法を記します。
環境:
OS: FreeBSD 7.0
GPS受信機: GPSレシーバセット EasyTime
http://www.rakuten.co.jp/gps/387357/614348/614350/
Garmin製 時刻同期用GPSコア マース15tm 内蔵
http://www.rakuten.co.jp/gps/387357/465139/470224/
接続: シリアル(RS-232C) ストレートケーブル
方法:
1. カーネル構築
※ /usr/src 以下に、X以外の全ソースがあることが前提です。
/usr/src/sys/i386/conf 以下に、GENERICカーネルのconfigファイルがありますので、
# cd /usr/src/sys/i386/conf
# cp GENERIC GPS
# vi GPS
として、以下の行を書き換え、または追加してください。
ident GENERIC <この行を
ident GPS <に書き換え
options PPS_SYNC <この行を適当なところに追加
次に、カーネルを再構築します。
# config GPS
# cd ../../compile/GPS
# make depend; make
-- 環境にもよりますが、数十分~数時間かかります --
# make install
これで、カーネルがPPSを取得できるようになります。
再起動して、無事起動したら、
# sysctl kern.version
と入力して例えば下記のように表示されれば、「ident GPS」で作成したカーネルで起動していることを確認できます。
(表示例)
kern.version: FreeBSD 7.0-RELEASE #0: Mon Oct 13 15:36:54 JST 2008
sample@test.example.jp:/usr/src/sys/i386/compile/GPS
2. GPSの接続と確認
シリアルケーブルをGPS受信機とPC本体のシリアルポートに接続してください。
次に、
# vi /etc/devfs.conf
として、適当なところに
link cuad0 gps0
link cuad1 gps1 (おまけ)
を追加して、
# /etc/rc.d/devfs restart
としてください。
/dev/gps0 ができていることと思います。
# jerm /dev/gps0
としてみてください。
jermでシリアル接続の確認(必須ではありません)
packages またはports
(/usr/ports/comms/jerm/)
を使って、jermをインストールしてください。
インストール後、
# jerm /dev/gps0
とすると、ずらずらっと文字列が出てくると思います。
(出てこなければgps0に信号が来ていません。)
# cat /dev/gps0
でも表示されます。
GarminのGPSはNMEAフォーマットで信号を送ってきますので
+IGNBRK -BRKINT -IGNPAR -PARMRK -INPCK -ISTRIP -INLCR -IGNCR -ICRNL
-IXON -IXOF -OPOST -ONLCR -OXTABS -ONOEOT....
と出た後に、
$GPRMC,004205,V,3534.5642,N,14008.6974,E,000.0,199.8,071008,007.0,W*75
と、時刻、緯度、経度が出てきます。
NMEAフォーマットの詳細は以下のページに詳しいです。
http://bg66.soc.i.kyoto-u.ac.jp/forestgps/nmea.html
3: NTPサービスの準備
GPS受信機は、そのままではFreeBSDのntpdが信号を受け取ることができませんので、受信機ユニット内部のショートチップをはずす必要があります。
基板上のシルク印刷を正立視して右上のショートチップの右側、「UNIX」の文字の下のショートチップを取り外してください。
これによりのRS-232Cの4p-6pの短絡を開放できます。
4: NTPサービスの起動
#vi /etc/rc.conf
として、以下の2行を適当なところに記入してください。
ntpd_enable="YES"
ntpd_config="/etc/ntp/ntp.conf"
次に、ntpサービスの設定ファイルを作成します。
# vi /etc/ntp/ntp.conf
として、以下の4行を記入してください。
pidfile /var/run/ntpd.pid
driftfile /var/db/ntpd.drift
server 127.127.20.0
fudge 127.127.20.0 time1 -1
127.127.20.0 は、ローカルホストの20(NMEA)の0番を指します。
NTPサービスのrefclock番号の仕様は以下で見つけました。
http://obswww.unige.ch/~bartho/xntp_faq/faq3Carb.htm
次に、ntpdを起動します。
# /etc/rc.d/ntpd start
5: 確認
# ntpq -p
# ntpq -p -c rv
# ntpdc -c kern
あたりを実行してみてください。
以下のように出力されれば、GPSからの電波を取れています。
左から3個目の数字「0」が、親(GPS)のStratum数を表します。
(ここが0ということはこのサーバはStratum1ということになります。)
remote refid st t when poll reach delay offset jitter
==============================================================================
GPS_NMEA(0) .GPS. 0 l 99 64 2 0.000 -5.897 0.002