type
status
date
slug
summary
tags
category
icon
password
某天,查看路由器后台日志时,看到日志信息中总有几条特别,仔细一看,原来是DOH的连接报错信息,时间间隔四五个小时。看着这红色的报错信息,于是就开始排查问题,后来就有了这个idea的诞生。
报错信息千篇一律,都是timeout。设置日志过滤,只查看dns的相关错误,导出日志一堆也没发现什么端倪。换个思路,从路由器的配置来寻找问题。点开NTP Client按钮,看到System Offset有10ms的差距,看着有点大,于是搜索提供NTP的服务器,填了阿里和腾讯的地址后的几小时后,发现dns报错频次降低不少,于是想着如何提高获取时间的精度,发现不少安装教程,于是按耐不住折腾的心,决定自己也弄一个。
选购
首先需要准备好相关硬件设备,大致包括一个Linux开发板、一个带PPS信号的GPS模块、一根无源天线、一根IPEX转SMA线,还有杜邦线若干。一开始选择开发板,想着直接抄作业,一看树莓派的价格,默默得退出商品界面。转而去看国产开发板,大概也需要一两百,还是觉得有点贵,毕竟只是作为NTP服务器,不做其它任务。搜寻中发现一款256M内存的幸狐RV1106,可惜暂时生态不行,还需自己去编译系统,最终闲鱼六十拿下Nanopi Neo2。GPS模块选择国产中科微双模芯,天线选车载导航天线,IPEX转接线要选一代,SMA头根据实际选公头或母头,杜邦线多种类型都买些准备。
硬件准备完毕,开始进行软件安装。软件大致需要gpsd-clients gpsd(接收并处理NMEA-0183格式信息)、chrony(网络时间协议(NTP)的通用实现)、ppstest(测试输出PPS结果)和开发板的引脚图。浏览后发现一位悉尼小伙分享教程,推荐使用armbian来搭建,得亏Nanopi的生态好,官方论坛有固件包,下载完烧录至SD卡中,插电开机,轻松秒杀。接下来就安装软件

- 1、使用armbian-config开启uart和pps-gpio的硬件配置,reboot

- 2、apt install gpsd gpsd-clients 修改/etc/default/gpsd
- 3、连接串口获取GPS模块的数据(结合实际选择启动位置)
- 4、systemctl restart gpsd 使用gpsmon或cgps查看返回数据情况,无数据检查线束连接
- 5、配置pps 修改 /boot/armbianEnv.txt 添加
测试pps信号 ppstest /dev/pps0查看输出情况
- 6、修改/etc/chrony/chrony.conf的配置信息
- 7、systemctl restart chrony//重启服务 使用chronyc sources -v查看时间源的使用情况

此刻拥有了时间精度以ns为时间单位的NTP服务器(可以更快一步抢茅台了)。
看多篇教程后,觉得自己也行,拿到后还是踩了许多坑,不同内核版本的系统的配置文件格式不一致,最终导致开启PPS信号花费了最长的时间。GPIO针脚的开启可以使用加载设备树dts文件来实现,或者在/boot/armbianEnv.txt中配置开启,每款设备的命名情况不一致,所以只能单独尝试去获得答案。
参考: