ubuntu 12.04 整合了Linux pps driver。听说和 NTPD 配合能得到很好的系统时间。
于是就在板子上装了个ubuntu server 12.04 试试,参看:
1.安装ubuntu server 12.04
2.Trimble GPS 链接串口/dev/ttyUSB1 9600 8N1 NMEA GGA协议 only
(配置串口:
#stty -F /dev/ttyUSB1 -a (查看)
#stty -F /dev/ttyUSB1 ospeed 4800 ispeed 4800 cs8 -cstopb
-icrnl -icanon -isig -echo -echoe -clocal(设置)
)
(一旦发现设备,串口自动设置:创建文件/etc/udev/rules/10-yourname.rules
# Trimble GPS setting:
# NMEA on ttyUSB1 9600 8n1
SUBSYSTEM=="pps", MODE="0664" GROUP="tty"
KERNEL=="ttyUSB0", RUN+="/bin/stty -F /dev/ttyUSB0 ospeed 9600
ispeed 9600 parenb parodd cs8 -cstopb -icrnl -icanon -isig -echo
-echoe -clocal"
KERNEL=="ttyUSB1", RUN+="/bin/stty -F /dev/ttyUSB1 ospeed 9600
ispeed 9600 -parenb cs8 -cstopb -icrnl -icanon -isig -echo -echoe
-clocal"
KERNEL=="ttyUSB1", SYMLINK+="gps1"
)
3.pps 信号 接 并口ACK。 没串口了,只能用并口。听说并口比串口响应快。
4.载入 Linux pps driver:
# modprobe parport_pc
# modprobe pps_parport clear_wait=0
可使用 modinfo pps_parport 查看模块的参数。 assert
是上升沿,clear是下降沿
#ls /dev 看到设备 /dev/pps0
5. 安装工具ppstool:
解压: #tar -xzvf *.gz
编译安装:#make && make install
(可能你要装Linux头文件包 和编译工具:
#apt-get update
#apt-get upgrade
#apt-get install linux-headers-$(uname
-r)
#apt-get install make gc
)
注意: timepps.h 这个必须有, ntpd需要。不知道Linux kernel怎么搞的,没有此头文件。
检测:#ppstest /dev/pps0
trying PPS source "/dev/pps0"
found PPS source "/dev/pps0"
ok, found 1 source(s), now start fetching data...
source 0 - assert 1333040090.999603804, sequence: 8631 - clear
0.000000000, sequence: 0
source 0 - assert 1333040091.999709923, sequence: 8632 - clear
0.000000000, sequence: 0
source 0 - assert 1333040092.999797692, sequence: 8633 - clear
0.000000000, sequence: 0
source 0 - assert 1333040093.999884565, sequence: 8634 - clear
0.000000000, sequence: 0
6. ntpd编译安装,由于ubuntu的ntpd不带pps,只能自己编译
# ./configure --enable-all-clocks
# make
# make install
注意: config.h 中含有 #define
HAS_PPSAPI 1
7.
conf文件:/etc/ntp.conf
server
127.127.22.0 minpoll 3 maxpoll 3 # PPS ATOM
iburst
fudge
127.127.22.0 flag2 0
server
127.127.20.1 mode 18 prefer minpoll 3 maxpoll 3
fudge
127.127.20.1 time2 0.0000
driftfile
/var/lib/ntp/ntp.drift
8. 产生ntpd 的gps 设备
#ln -s /dev/ttyUSB1
/dev/gps1
9.调整系统时间,使之尽可能准。多运行几次。
#ntpdate
0.ca.pool.ntp.org
9. 运行ntpd
#ntpd -D 2 (debug mode 2) 显示
GGA信息.如果没有,看看串口有没有#cat /dev/ttyUSB1
10. ntptime
显示ok,没有Error
11. ntpq
-p
要有如下结果
# ntpq -pn
remote refid st
t when poll
reach delay offset jitter
==============================================================================
*127.127.20.1 .GPS. 0
l 52 64 377 0.000 0.516 0.011
o127.127.22.0 .PPS. 0
l 3 16 377 0.000 -0.001 0.001
但我就如论如何都没有这么好的结果:
# ntpq -p
remote refid st t when poll reach delay
offset jitter
==============================================================================
xGPS_NMEA(1)
.GPS. 0 l 44
64 377 0.000 -217.78
22.159
xPPS(0)
.PPS. 0 l 11
16 377 0.000 -177.46
4.882
12. degub:
a)有人说ntpd要运行一段时间才能算好时间。我给它3天,结果更糟。
b)修改conf:
server 127.127.22.0 minpoll 3
maxpoll 3 # PPS ATOM iburst
fudge 127.127.22.0 flag2 0
flag3 1
server 127.127.20.1 mode 18
prefer minpoll 3 maxpoll 3
fudge 127.127.20.1 time2
0.0000
driftfile
/var/lib/ntp/ntp.drift
还是那样糟。
c) 不用
driver 22 , 参照网站linux pps NTPD
修改参数,参照 type20, type22
试过各种参数,不好使。
d)不用ATOM PPS (22), 只用NMEA 内置的pps
修改conf:
server 127.127.20.1 mode 18
prefer minpoll 3 maxpoll 3
fudge 127.127.20.1 time2
0.0000flag1
1flag2
0flag3 1
driftfile
/var/lib/ntp/ntp.drift
结果等明天
还是不好用!
n 天后,不知道哪里出了问题,ntpd
就是不好用。改用chronyd:
详见下一篇