|
|
- Welcome to
Hiroshi's Home Page - |
|
|
|
||
|
||
|
▼ ▼ ▼ |
||
|
||
|
▼ ▼ ▼ |
||
|
||
電波時計用NTP4.1.0サーバ…
はじめに
NTP4.1.0に、有限会社トライステートさんの電波時計キット(TS-JJY01)用ドライバを作成し、組み込みました
CRON等で定期的に電波時計キットから時刻を取得し、パソコンの時刻を校正するソフトは多数あるのですが、ntpdにドライバを組み込むことにより、ntpd自身が電波時計キットから時刻を取得し、パソコンの校正と、時刻サーバとしての機能を果たすようになります。
※このパッチによる障害等に対して、一切責任を負いません。
インストール
RedHat 7.2用のバイナリパッケージを用意しました。
# rpm -U ntp-4.1.0-4tsjjy.i386.rpm
これ以外に、libcapがインストールされていなければいけません。
設定
電波時計キットは、Type 40としてコーディングしてあります。
アドレスの4番目には、デバイス(/dev/jjy?)のポート番号を指定します。
例えば、電波時計キットが /dev/ttyS0 に接続してある場合、一旦、/dev/jjy0にシンボリックリンクを張り、アドレスの4番目に0を入れる形になります。
# ln -sf /dev/ttyS0 /dev/jjy0
# ln -sf /dev/ttyS1 /dev/jjy1
なお、/dev/ttyS1を/dev/jjy0に割り当てても構いません。その場合、0を指定すると/dev/ttyS1を使用するようになります。つまり、ドライバから見たときに、/dev/jjy?を使用するだけです。
ntp.conf の記述例(先頭の方に、以下の2行を追加します)
server 127.127.40.0 # TS-JJY01
fudge 127.127.40.0 time1 0.0710
time1には、実際の時刻とのずれを秒単位で入力します。
公開されているntpサーバとのoffsetを計測した結果、私の環境では0.07前後にすることで、大体±30m秒位まで近い値が、コンスタントに出るようになりました。( >>時差グラフ )
ntp.confの設定が終了したら、ntpdを起動します。
# /etc/rc.d/init.d/ntpd start
ntpqを実行したときに、以下のように表示されます。
# /usr/sbin/ntpq -p
remote refid st t when poll reach delay offset jitter ============================================================================== *TSJJY01(0) .JJY. 0 l 26 64 377 0.000 1.838 7.488電波時計キットのプロトコル
本ドライバでは、以下の3コマンドを使用しています。
STUS: 取得できる時刻情報が正しいか否かの判断のため
STIM: 時刻情報の取得と、秒合わせのため
DATE: 日付情報取得のため
ドライバの内部処理
1. ntpd内のポーリング処理(tsjjy_poll())で、STUSコマンドを送信します。
2. データ受信処理(tsjjy_receive())で、STUSコマンドのリターン値を取得し、続けてSTIMコマンドを送信します。
3. データ受信処理(tsjjy_receive())で、STIMコマンドのリターン値を取得し、続けてDATEコマンドを送信します。
4. データ受信処理(tsjjy_receive())で、DATEコマンドのリターン値を取得します。
5. 日付情報を受け取った時点で、1月1日から何日目か計算し、2〜4にかかった時間を足した値を設定します。
詳しくはrefclock_tsjjy.cを参照してください。
ソース及びパッケージ
ntp-4.1.0.tar.gz に対するパッチのみ: ntp-4.1.0-tsjjy.patch.gz (4,450bytes) [2002/01/12]
バイナリパッケージ: ntp-4.1.0-4tsjjy.i386.rpm (1,101,667bytes) [2002/01/12]
ソースパッケージ: ntp-4.1.0-4tsjjy.src.rpm (2,014,049bytes) [2002/01/12]
Reference Clock Driver - Type 40: TriState TS-JJY01 receiver
Synopsis
Address: 127.127.40.u
Reference ID: JJY
Driver ID: TSJJY01
Serial Port: /dev/jjyu; 9600 baud, 8-bits, no parityDescription
Format STIM (8 ASCII printing characters):
hh:mm:ss<cr><lf>
hh:mm:ss = hours, minutes, secondsFormat DATE (14 ASCII printing characters):
yyyy/mm/dd www<cr><lf>
yyyy/mm/dd = year, month, dayFormat STUS (8 or 10 ASCII printing characters):
<adjusted|unadjusted><cr><lf>
Fudge Factors
time1 time
Specifies the time offset calibration factor, in seconds and fraction, with default 0.0.
(2001/12/07)
|
||
|
▲ ▲ ▲ |
||
|
||
|
▲ ▲ ▲ |
||
|
||
|
|
||
|
(c) Copyright 1998-2002 Hiroshi OHNO All
right reserved. |
||