开发者生态
morning
重建 1995 年的 GPS 时间服务器,这样我就不会被 Telstra 拒绝
2026-09-06
1 阅读
约8分钟阅读
Brajeshwar
字号:
六月,我购买了这款 TrueTime XL-AK 时间服务器,这样我就可以了解更多基于 GPS 的时间的历史。我是在 6 月 22 日收到的,仅仅 16 天后,类似的 GPS 时间服务器就使澳大利亚的手机服务中断了 12 个小时!我制作了一个关于它的短视频,但推迟了对 TrueTime 的深入研究......直到现在。在过去的几周里,我用 Raspberry Pi“改造”了该设备,以构建第 1 层 NTP 时间服务器,我希望最终将其添加到 NTP 池中。我找到了一种方法,可以放入 Pi 5 和 GNSS HAT,在内置 16x2 LCD 上显示时间和 GPS 状态,在双色 LED 上显示状态,使这个盒子再次有用。我在今天的 YouTube 视频中列出了更多硬件详细信息:但在这篇文章中,我将展示如何将 Raspberry Pi 配置为第 1 层 NTP 时间服务器:我使用了具有 4GB RAM 的 Raspberry Pi 5,但是您没有理由不能在该项目中使用具有 1GB RAM 的 44 美元 Pi 5(如果您在其上运行的只是小型网络的计时服务)。我对这台服务器的迫切需求是为下周末的 VCF Midwest 提供时间服务。与我的所有项目一样,我花了几个月的时间收集零件,组装通常要等到截止日期前一两周:) Jimmy Paputto L1 GNSS HAT 我使用随附的 GPIO 立管和安装螺钉将 GNSS HAT 安装在 Pi 顶部。我在底部使用螺丝将 Raspberry Pi 保险杠固定在下面。将 Pi OS 'Lite'(无 GUI)刷新到 microSD 卡后,我从源代码构建了 Jimmy Paputto GNSS HAT 软件: sudo apt -y install build-essential cmake libgpiod-dev python3-dev git clone https://github.com/jimmypaputto/gnsshat.git cd gnsshat mkdir -p build && cd build cmake .. -DBUILD_PYTHON=ON -DBUILD_EXAMPLES=ON make -j$(nproc) sudo make install 该软件包括一个 GNSS 数据桥,用于将 NMEA 语句(时间和日期信息)传输到 gpsd 和 chrony ;您还可以将 GNSS HAT 的 USB-C 端口插入 Pi 上的 USB-A 端口并直接访问 u-blox NEO-M9N。安装完成后,我按照指南使用 PPS 设置了 Raspberry Pi 时间服务器。 Chrony 当需要配置 Chrony 时,我在 /etc/chrony/chrony.conf 中使用了以下设置: # GNSS + PPS time server # GPS time via Shared Memory from gpsd refclock SHM 0 offset 0.0 Delay 0.05 refid NMEA noselect # PPS — 精确边缘计时 refclock PPS /dev/pps0 refid PPS lock NMEA Preferred trust poll 3 filter 16 # The Pi's XO 相当稳定,但不完全达到 TCXO 级别。 maxclockerror 0.5 # 在 Pi 5 上实现更精确的硬件时间戳 hwtimestamp * # 后备互联网池 pool 0.pool.ntp.org iburst pool 1.pool.ntp.org iburst # 允许所有 LAN 客户端允许 10.0.0.0/16 # 允许通过 Twingate 容器路由请求。 allow 172.17.0.0/16 maxupdateskew 100.0 makestep 1000 3 rtcsync # 忽略时钟更新 >100ms (修复 gpsd 报告时间每约 31 分钟关闭 1 秒) maxchange 0.1 1 -1 我正在通过 Twingate 远程访问我的 NTP 演示设置,因为我在测试时处理多个 WAN,并且更容易穿透诸如 double 之类的东西带有代理服务的 NAT。更新配置后重新启动 chrony: sudo systemctl restart chrony 验证一切正常: chronycsources -v chronyctracking 在测量了 chrony 指标几天后,我调整了部分配置以匹配我的设置 - 对于 maxclockerror ,我将其从默认值减少,因为我能够通过对 Pi 的设置进行一些调整来稳定振荡器频率。 Pi 计时调整 我发现这些更改特别有用: 以恒定的占空比运行风扇 强制 Pi 的 SoC 使用force_turbo 全速运行 将内核 PPS 中断固定到 CPU 核心 4(隔离该核心之后) 隔离 Pi 的底部,使振荡器处于更稳定的热环境中 通过将 Pi 的其余部分封装在 TrueTime 外壳中来隔离 Pi 的其余部分 我尝试过的其他一些事情似乎没有产生可测量的影响,至少在6-12 小时的测试时间。如果您对这些东西感兴趣,我强烈建议您阅读奥斯汀的 Nerdy Things 博客文章。稳定的 Pi 时钟 要强制 Pi 保持在 2.4 GHz,以获得更稳定的热环境(因为振荡器靠近 SoC,并且它会受到突发 CPU 活动的显着影响),您可以设置 force_turbo 选项。这可能会持续多消耗 1W 功率,但如果您想要稳定的振荡器频率(对于计时很重要),那么这是值得的。在 /boot/firmware/config.txt 中添加以下内容并重新启动 Pi: # 强制性能调节器,以便 CPU 保持更稳定的温度。 force_turbo=1 一致的风扇速度 我花了一段时间测试 NTPheat 之类的东西来稳定 Pi 的 SoC 温度。类似的工具很有效,特别是当你对 Pi 进行隔离时。气流,尤其是来自 HVAC 系统的气流,使 Pi 的振荡器变得疯狂——稳定的时钟就像一致的漂移,因为它是可测量的。但经过大量测试,我发现 Pi 的底部
这篇文章对您有帮助吗?
订阅66必读
每日精选科技资讯,直达你的邮箱