最近弄來一枚Garmin GPS 18x LVC,可以使得電腦上的NTPd達到微秒等級的精確度.
相關操作設定以下分享.
首先當然要先購買GPS;以下是美國Garmin的產品頁面,台灣Garmin也是導到此處.
https://buy.garmin.com/en-US/US/oem/sensors-and-boards/gps-18x-oem/prod27594.html
這東西在台灣不好買,需要客定還不一定比Amazon便宜;我是直接從Amazon購入.
請記得一定要買對款式(18x LVC),PC或USB都欠奉PPS訊號,不適合拿來校時.
18x LVC入手後,可以發現它的線頭是裸線,需要使用者自行製作序列埠接頭.
(一般來說不建議使用USB轉出來的序列埠,會影響PPS訊號的可用性和精確度)
驅動GPS需要的5v電源可以多焊個USB公頭,從主機背板USB埠取電.
(從不要的USB線上剪一段含公頭的線,剝皮取芯即可)
不計烙鐵焊錫這些東西的話,30元以內一定可以搞定.
18x LVC端 USB公頭 9針序列埠母頭(焊線頭)
細黃 PPS ---------------------------------------- 1 DCD
細白 TXD ---------------------------------------- 2 RXD
細綠 RCV ---------------------------------------- 3 TXD
細黑 GND ---------------------------------------- 5 GND
粗黑 GND ------------ 4 黑 GND
粗紅 +5V ------------ 1 紅 VCC
線頭製作完成後,插上序列埠和USB埠,然後cat /dev/ttyS0. ←新主機板大概都只有COM1
如果會出現GPRMC/GPGGA開頭的NMEA字串,那就是GPS有定位成功,正在發送訊息了.
倘若沒有字串出現,除了檢查焊線是否牢固外,當然也要確定GPS能否收到衛星訊號.
以我測試的情況,五樓公寓從三樓靠窗處不用拿出窗外就能定位,可以做個參考.
GPS可以正常動作後,就要讓電腦可以應用GPS發送的PPS訊號.
首先要先確定kernel>=2.6.34以支援PPSAPI(RFC2783),沒有的話一定要升級!
升級後檢查kernel config,看看CONFIG_PPS和CONFIG_PPS_CLIENT_LDISC是否為y或m.
若有y或m,便是kernel有開啟相關功能,可以繼續進行.
(若這兩個選項是not set,那就還得編譯module)
接著下載pps-tools.
http://www.linuxpps.org/gitweb/?p=pps-tools;a=summary
把timepps.h丟到/usr/include/sys去,然後嘗試編譯ppstest.c.
編譯成功後,先執行ldattach 18 /dev/ttyS0,這樣就會長出/dev/pps0.
然後執行ppstest /dev/pps0,如果會出現每秒一行的訊息,這樣就確認PPSAPI是可用的.
那麼如何讓NTPd使用PPS訊號呢?可以讓NTPd自取,或是透過GPSd轉接到shm的方式.
以下介紹的是GPSd的方式;因為我懶得裝scons,所以拿舊版2.96來用.
gpsd-2.96下載→
https://sourceforge.net/projects/gpsd.berlios/files/
下載後解壓縮,然後便是老梗的./configure && make && make install.
一定要注意的是configure當中要確認有找到sys/timepps.h,不然不會編入PPSAPI支援!
編好且安裝好後,先砍掉ldattach(無法和gpsd共存),然後可以執行gpsd -n /dev/ttyS0.
接著執行ipcs -m,看有否開出0x4e545030~3的四個shm區塊,有的話便可繼續進行.
最後是調整設定NTPd.修改ntp.conf加入以下設定:
# GPS Serial data reference
server 127.127.28.0
fudge 127.127.28.0 time1 0.600 refid GPS
# GPS PPS reference
server 127.127.28.1 prefer
fudge 127.127.28.1 refid PPS
其他的server可以通通刪掉,或者至少記得要取消prefer指定.
接著重啟NTPd,一段時間後可以ntpq -p看看是否有類似如下的輸出↓
remote refid st t when poll reach delay offset jitter
==============================================================================
-SHM(0) .GPS. 0 l 36 64 377 0.000 -505.65 19.344
*SHM(1) .PPS. 0 l 36 64 377 0.000 0.002 0.010
有這兩行(而且第二行SHM(1)前面要有*字)就是NTPd透過gpsd接收PPS訊號校時成功了.
delay/offset/jitter的單位都是毫秒,如上顯示就是offset控制在微秒等級的差異.
最後可以修改udev的rules,加入09-pps.rules如下設定以增進序列埠效能↓
# Provide a symlink to /dev/ttyS0 and set low_latency for latency improvement
KERNEL=="ttyS0", SYMLINK+="gps0", MODE="0666"
KERNEL=="ttyS0", RUN+="/bin/setserial /dev/%k low_latency"
開機時可如此啟動GPSd↓
/usr/local/sbin/gpsd -n -P /var/run/gpsd.pid /dev/ttyS0
--
這篇文章最主要的目的是留IP以資紀念...(被打
--
[32m※ Origin: 交大次世代(
bs2.to) [m
◆ From:
atelieralica.idv.tw