HCL:树莓派3 GPS
这是一个将树莓派3配置为本地时间服务器的指南,使用具有pps输出的GPS模块,并配置gpsd和chrony服务。它还会禁用板载蓝牙以使用/dev/ttyAMA0作为gps数据源。
注意:您完全可以使用USB GPS,只需要设备具有指向所选gpio引脚的pps输出,并修改dt overlay即可。
GPS模块
只要GPS模块具有pps输出,就应该可以正常工作。例如,NEO-6M(Arduino GPS,无人机微控制器GPS接收器)兼容51微控制器STM32 Arduino UNO R3,带有IPEX天线,高灵敏度,用于导航卫星定位,用于创建此HCL条目。
设备树 (DT) overlay
需要使用设备树 (DT) overlay激活GPS模块的PPS输出。此配置位于/boot/efi/extraconfig.txt。GPIO引脚18是由于其位于gps的tx和rx引脚旁边而选择的。
dtparam=spi=on dtoverlay=disable-bt dtoverlay=pps-gpio,gpiopin=18 core_freq=250 force_turbo=1
YaST引导加载程序更改
启动YaST引导加载程序,并将默认值修改为;
GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 splash=silent plymouth.enable=0 console=ttyS0,115200n8"
修改为;
GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 splash=silent plymouth.enable=0 console=tty1"
现在重新启动系统,并检查pps和AMA0设备是否存在,例如;
dmesg |egrep "ttyAMA0|pps0" [ 4.939465] 3f201000.serial: ttyAMA0 at MMIO 0x3f201000 (irq = 66, base_baud = 0) is a PL011 rev2 [ 20.034296] pps pps0: new PPS source pps@12.-1 [ 20.034388] pps pps0: Registered IRQ 79 as PPS source
如果设备存在,您可以继续安装额外的gpsd和pps-tools软件包,检查pps输出并配置gpsd和chrony。如果您需要,可以安装gpsd-clients软件包,但它会引入大量的X客户端软件包。
zypper in gpsd pps-tools
测试pps输出是否正常工作;
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 1616795192.000002666, sequence: 19800 - clear 0.000000000, sequence: 0 source 0 - assert 1616795193.000001291, sequence: 19801 - clear 0.000000000, sequence: 0 source 0 - assert 1616795194.000000385, sequence: 19802 - clear 0.000000000, sequence: 0 source 0 - assert 1616795195.000001398, sequence: 19803 - clear 0.000000000, sequence: 0
如果看到数据,则一切正常,可以继续进行进一步的配置。
GPSD配置
如果仅使用ipv4,则需要将gpsd.service和gpsd.socket复制到/etc/systemd/system,并编辑掉ipv6 ListenStream行;
[Unit] Description=GPS (Global Positioning System) Daemon Sockets [Socket] ListenStream=/var/run/gpsd.sock #ListenStream=[::1]:2947 ListenStream=127.0.0.1:2947 SocketMode=0600 [Install] WantedBy=sockets.target
不要忘记在编辑后运行systemctl daemon-reload!
编辑/etc/sysconfig/gpsd并添加以下选项;
GPSD_OPTIONS="-G -n -b /dev/ttyAMA0 /dev/pps0"
现在测试gpsd服务是否启动,并且没有错误;
systemctl start gpsd
systemctl status gpsd
● gpsd.service - GPS (Global Positioning System) Daemon
Loaded: loaded (/etc/systemd/system/gpsd.service; disabled; vendor preset: disabled)
Active: active (running) since ...
TriggeredBy: ● gpsd.socket
Main PID: 697 (gpsd)
Tasks: 3
CGroup: /system.slice/gpsd.service
└─697 /usr/sbin/gpsd -G -n -b /dev/ttyAMA0 /dev/pps0
Feb 08 06:00:19 host systemd[1]: Starting GPS (Global Positioning System) Daemon...
Feb 08 06:00:19 host systemd[1]: Started GPS (Global Positioning System) Daemon.
如果没有报告错误,请启用该服务以在启动时启动。
systemctl enable gpsd
Chronyd配置
在/etc/chrony.d/中创建一个名为例如gps_time.conf的新文件,至少您需要两个gps refclock源,允许本地访问并允许本地同步。
# Add gps and pps as reference clock refclock SHM 0 delay 0.5 refid NMEA refclock PPS /dev/pps0 refid PPS # Allow NTP client access from local network. allow xxx.xxx.xxx.xxx/xx # Serve time even if not synchronized to a time source. local stratum 10
测试
现在重新启动chronyd,只要没有错误,就可以继续进行测试。
检查NMEA (a -) 和 PPS (a *) 源是否已同步,方法是使用以下命令;
chronyc sources -v 210 Number of sources = 6 .-- Source mode '^' = server, '=' = peer, '#' = local clock. / .- Source state '*' = current synced, '+' = combined , '-' = not combined, | / '?' = unreachable, 'x' = time may be in error, '~' = time too variable. || .- xxxx [ yyyy ] +/- zzzz || Reachability register (octal) -. | xxxx = adjusted offset, || Log2(Polling interval) --. | | yyyy = measured offset, || \ | | zzzz = estimated error. || | | \ MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== #- NMEA 0 4 3 13 +142ms[ +149ms] +/- 250ms #* PPS 0 4 203 12 +502ns[+7004us] +/- 155us ^- 097-091-222-080.res.spec> 1 6 37 60 -4234us[+2769us] +/- 34ms ^- autoforward.com 3 6 37 60 -10ms[-3351us] +/- 91ms ^- ntp3.junkemailfilter.com 2 6 37 60 -11ms[-4557us] +/- 85ms ^- clock.trit.net 2 6 37 60 -3607us[+3321us] +/- 64ms
现在作为最后的检查,使用tracking和serverstats选项;
chronyc tracking Reference ID : NNNNNNNN (PPS) Stratum : 1 Ref time (UTC) : Tue Mar 30 22:16:28 2021 System time : 0.000000199 seconds slow of NTP time Last offset : -0.000000152 seconds RMS offset : 0.000510382 seconds Frequency : 4.773 ppm fast Residual freq : -0.000 ppm Skew : 0.012 ppm Root delay : 0.000000001 seconds Root dispersion : 0.000011117 seconds Update interval : 16.0 seconds Leap status : Normal chronyc serverstats NTP packets received : 37 NTP packets dropped : 0 Command packets received : 38 Command packets dropped : 0 Client log records dropped : 0
现在再次重新启动并检查服务启动和chronyc输出是否正确。根据使用的模块,可能需要几分钟。
客户端配置
要将新的时间服务器添加到本地机器,可以在openSUSE系统中使用YaST ntp-client或添加到/etc/chrony.d/pool.conf;
pool <server fqdn or ip address> iburst
可以在客户端执行相同的chronyc测试,以验证它是否与树莓派3时间服务器同步;
chronyc tracking Reference ID : NNNNNNNN (<hostname>) .... chronyc sources 210 Number of sources = 3 MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^* hostname 1 9 377 377 +31us[ +24us] +/- 198us ^- time-a-g.nist.gov 1 9 377 53 -5135us[-5135us] +/- 34ms ^- time-b-g.nist.gov 1 9 377 241 -4242us[-4242us] +/- 33ms

