FreeBSD 6.0-RELEASE の /usr/sbin/ntpd の refclock に
NMEA を食わせようとしているのですが、うまくいきません。

/dev/cuad0 には NMEA 出力の GPS (GARMIN 15L)をつないであり、
ports/comm/jerm のようなシリアル通信ソフトでは
ちゃんと NMEA センテンスが見えます。
↓こんなん
$GPRMC,071735,A,3636.8033,N,13959.4282,E,000.0,030.7,090306,007.4,W*6B

そこで、

# cat ntp.conf
pidfile /var/run/ntpd.pid
driftfile /var/db/ntpd.drift
server 127.127.20.0
fudge 127.127.20.0 time1 -1

# ls -l /dev/gps0
lrwxr-xr-x  1 root  wheel  5 Mar  9 15:50 /dev/gps0 -> cuad0

こんな状況で

# /usr/sbin/ntpd -c ntpd.conf

とかやると ntpd が CPU を 100% 使い出します。

ktrace(1) してみると、

(1) /dev/gps0 を open(2) する。
(2) そのファイルデスクリプタを readfds にセットして select(2) すると、
    1 が返る。
(3) そこで read(2) すると 0 bytes 読める。
(4) goto (2)

と、(2)〜(4) を全力でループしているようです。

(ちなみにループしてる隣で、一度 jerm で /dev/cuad0 を読み出して上げると、
read(2) は 0 でない値を返し始めます)

何かアドバイス頂ければ幸いです。


神田敏広

メールによる返信