ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

1995年GPS时间服务器重建记:自建Stratum-1 NTP源

1995年GPS时间服务器重建记:自建Stratum-1 NTP源 1995年一台GPS时间服务器从生产线上下来的时候Windows 95还没正式铺开。三十年后我把这台布满灰尘的机器从仓库角落翻出来不是为了怀旧而是真心受够了商业时间服务那一套。这个项目的标题叫 Rebuilding a 1995 GPS Time Server so I dont get Telstrad说白了那个 Telstrad 的梗翻译成大白话就是不想再被电信运营商的时间同步服务牵着鼻子走。这篇内容就是我完整记录如何拆开、修复、改造这台老设备最终把它跑成一台独立NTP时间服务器的全过程。这台服务器能干什么一句话它现在给我的局域网提供绝对精确的UTC时间精度从之前的几百毫秒级别直接压到亚微秒级。整个过程中我会把GPS接收机只当成“一颗原子钟的搬运工”用它输出的1PPS脉冲和NMEA串口数据再通过chrony把这些信号整合成一台出厂的Stratum-1时间源。适合谁看适合那些手里正好有一台老旧GPS设备、想修但它又不知从哪下手的硬件爱好者也适合网络工程师、自建机房的运维以及所有不想把“时间”这种基础服务寄托在第三方商业合同上的朋友。1. 先交代背景一台1995年的GPS时间服务器为什么还值得折腾1.1 所谓“Telstra’d”商业时间服务的坑踩过一次就明白这些年大家在局域网里默认用公共NTP服务器或者直接用路由器里面的时间同步。表面上问题不大但一旦到了生产环境你很快就会发现商业NTP服务也好运营商提供的网内时间同步也好都存在几个绕不开的痛点。第一个痛点是延迟不可控。NTP协议本身就要靠往返延迟做偏移校准公共服务器离你几千公里延迟抖动一大本地时钟的准确性直接崩。第二个痛点是服务不可控。运营商的报时服务、商业NTP、甚至厂商自带的云时间接口都可能因为合同调整、系统维护、版本下架而突然没法用了。我见过不止一次某个NTP池被整段屏蔽全网设备时间一夜之间回到1999年的桥段。第三个痛点才是标题里那个 Telstra’d 的意思当时间同步成为一项“商业服务”时你会被条款、费率、兼容性列表和各种客服开单流程拖到怀疑人生。其实时间同步这种基础服务本就不该做成租用模式。自建一台坚定的本地时间源才是让自己彻底“不被服务商绑架”的办法。第四个痛点是信任问题。公共NTP服务器返回的时间你没有校验能力。1980年NTP发明者自己都说过时间协议最大的敌人就是中间人篡改。你连时间都要依赖别人的服务器那你在日志审计、证书校验、分布式事务上所有的努力都可能因为一个被污染的NTP包而变得毫无意义。1.2 1995年的时间服务器内部设计有多硬核很多人以为1995年的GPS设备就是块简陋的电路板。实际拆开看你反而会感叹当年工程上的克制和可靠。典型的1995年GPS时间服务器内部结构大概分这么几块GPS L1频段天线和前置放大器、一片GPS接收机OEM板比如当年非常流行的Motorola Oncore VP系列、一块带恒温晶振OCXO的本地时基板、一片8位或16位微处理器、以及若干串口和脉冲输出接口。这设计思路放到今天看也完全不过时。GPS接收机负责从卫星信号里恢复“绝对时间参考”OCXO负责在没有卫星信号的短暂空窗期里靠“惯性”维持频率稳定微处理器再把这些时间信息转成各种标准输出。说白了这就是现代GNSS授时板卡的雏形只是当年的工艺更粗犷机箱更厚实电源块更大扇热片能当散热器用。还有一个很多人不知道的事实1995年前后民用GPS定位精度被默认降级水平定位误差轻松跑到上百米但有意思的是授时精度并没有因此受到同样程度的打击。1PPS脉冲的边沿依然能保持在微秒级甚至几百纳秒级。定位的“空间坐标”可以模糊但对时的“秒沿”依然非常准。这就是为什么今天很多老设备在授时领域还能继续发挥余热——它的“本职工作”本来就是时间而不是定位。1.3 为什么要“重建”而不是“直接用”看到这里你可能会问既然设备本身底子这么好直接上电用不就行了问题在于三十年的存放和老化会让一台机器从“基本能用”退化到“需要重建”。最常见的问题有三个。一是电解电容老化。1995年用的电解电容寿命标称几千小时到上万小时实际用到现在就算没爆浆容量也衰减得厉害。电源纹波一高接收机就容易失锁PPS输出就毛糙NTP精度跟着崩。二是内部后备电池失效。很多老设备靠一颗锂电池维持RAM里的星历和配置电池一空每次断电重来就是一场冷启动灾难有时候上电后要蹲在窗边等十几分钟才能重新定位。三是接口标准严重过时。老设备的串口往往是RS-232电平、9针或者DB25输出的是私有二进制协议或者只有NMEA根本没有以太网口更谈不上NTP服务。所以这个项目的“重建”我的定位很明确保留老设备里最值钱的射频前端、OCXO、屏蔽结构和机箱把它的串口和1PPS信号重新接出来然后挂一台现代Linux小主机跑chrony把老设备变成一台真正意义上符合现代标准的NTP时间服务器。这样既保住了1995年的硬件灵魂又获得了2025年的网络可用性。2. GPS时间服务器的工作原理用三边测量和1PPS推开时间门2.1 GPS授时为什么准定位本质上是在“对时间”要理解GPS时间服务器得先理解一个很多人搞混的事GPS卫星导航最核心的并不是“位置”而是“时间”。每颗GPS卫星上都装着原子钟所有卫星钟和地面控制段保持同步。卫星不断地向地面广播一个信号里面包含了卫星的位置信息和发射时刻。接收机收到信号后计算“当前接收机时间”减去“信号发射时刻”再乘上光速就能得到卫星到接收机的伪距。这正是经典的GPS定位三边测量算法假想你在一个漆黑的体育馆里同时听到四个不同角落的扬声器各报了一句“现在是几点几分几秒”你不仅能通过声音到达时间和声速推算出距离还能顺便把自己的表校准了——因为你不知道自己的钟差所以至少需要4颗卫星才能解出位置坐标x、y、z外加时钟差Δt这四个未知数。很多人以为GPS定位和授时是两套独立功能其实完全是一件事。定位是在解一个四元一次方程而方程里的第四个未知数就是你的钟差。GPS接收机输出1PPS脉冲的那一刻本质上就是它解完方程确认了“真正的UTC整秒到了”的边沿信号。1995年的接收机虽然性能不如现在但这个原理几十年来没有变过。而且卫星端原子钟的精度极高GPS系统时间相对UTC的偏差通常被控制在纳秒级别。所以哪怕当年民用定位被降级时间信号本身依然是值得相信的。2.2 1PPS整秒的边沿才是时间的骨骼GPS时间服务器里最重要的一根信号线不是串口而是那根每秒跳一次的1PPSPulse Per Second脉冲线。1PPS的意思是每秒输出一个脉冲脉冲的上升沿对准UTC整秒。它的精度取决于接收机对卫星信号的跟踪状态正常锁星后可以做到微秒级好的接收机甚至能到几十纳秒。你可以把它理解成一根每秒震动一次的音叉但它的边沿必须在“秒”的那一瞬准点到达。NTP服务器真正关心的就是这个边沿到底准不准。这里有一个关键认知串口里的NMEA报文虽然携带了年、月、日、时、分、秒的数字但串口报文的传输是有延迟和抖动的。一条NMEA语句在9600波特率下传输本身就要花几毫秒再加上操作系统调度延迟你根本没法靠它精确到毫秒以下。但1PPS是一个纯粹的硬件电脉冲不经过协议栈不受操作系统调度抖动影响它的边沿就是“秒”的物理体现。所以时间服务器要想做到微秒级同步必须把1PPS当作骨架把NMEA里的年月日时分秒当作皮肉两者组合起来才能拼出一个完整而精确的时刻。2.3 NMEA串口消息把日历时间装进信封NMEA 0183是GPS接收机最常用的输出协议一串像人类电报一样的ASCII文本。授时最常用的两条语句是$GPRMC和$GPZDA。$GPRMC里包含了UTC时分秒、日期、定位状态和经纬度基本一眼就能看懂$GPRMC,123519,A,5129.1234,N,00011.1234,W,000.0,360.0,010195,013.0,E*67其中123519表示UTC时间12:35:19010195表示1995年1月1日A表示定位有效。但如果你的设备主要用来授时我更推荐用$GPZDA$GPZDA,123519,01,01,1995,00,00*47$GPZDA直接给出完整的UTC年月日和时分秒还带本地时区偏移和闰秒相关信息是专门为授时设计的语句。在chrony的NMEA refclock里默认就优先从ZDA里读日期再从RMC里拿时间两条都用才能保证日期不出错。另外特别提醒一下老设备的串口参数。1995年的GPS接收机默认一般是9600波特率、8个数据位、无校验、1个停止位也就是9600 8N1。如果你用串口工具连上去发现满屏乱码先别急着怀疑硬件坏了先检查波特率有没有配对。2.4 顺带聊聊GPS定位、Wi-Fi定位和基站定位的差别既然标题里带了GPS顺便把另外两个常见定位方式说清楚方便新手理解为什么授时非得用GPS这种系统。GPS定位是“绝对测距式”接收机自己测量到卫星的距离不依赖任何地面数据库只要有四颗卫星它能同时给你位置和精确时间。Wi-Fi定位则是“指纹匹配式”设备扫描周围Wi-Fi的MAC地址和信号强度去和数据库里的位置指纹做匹配。它的优势是室内可用但时间信息完全依赖接入点和设备自身的时钟精度很一般谈不上绝对时间参考。基站定位介于两者之间依靠蜂窝网络基站位置做三角估算精度同样有限而且很多网络的时间信号更新滞后得离谱当年我就遇到过某运营商的NITZ时间信息连续一周没更新手机时间整整慢了一整天。所以说能达到微秒级时间精度的只有GNSS这类卫星授时系统或者专门铺设的PTP网络。这也是为什么这台1995年的老设备在今天还有重建的价值——它的底端信号源依然是目前成本最低的高精度绝对时间来源。3. 方案选型修旧、改造还是全换3.1 三条路线对比动手之前我花了一整天时间整理了三条可能的路线最后才定下方案。直接看对比表方案保留老硬件成本难度最终形态适合人群A原机修复全部保留中高老设备的原始输出多为主机串口/脉冲很难直接当NTP服务器用纯收藏爱好者B老GPS接收机新主机保留接收机和天线现代板子做NTP低中一台正式的NTP服务器web监控、NTP协议、chrony全都有实用派玩家、运维C整体换成现代GNSS模块基本不保留中低全新小体积高精度设备现代接口但失去了“重建”的意义追求效率的新手方案A看上去最有情怀但我很快发现了一个硬伤1995年的机器定位是“时间源”不是“网络设备”。它输出的是TTL脉冲和RS-232文本给老式主机喂数据还成但要直接对外提供现代NTP服务得自己写一大堆协议转换代码而且老设备的配置方式往往是稀罕的私有三进制命令文档难找翻了半天PDF才搞明白一个配置字节的意思这种成本我实在扛不住。方案C当然是最省事的买一块u-blox的GNSS模块加一个树莓派半天就能跑起来。但这样一来题目里“Rebuilding a 1995 GPS Time Server”就名存实亡了我折腾半天图啥不是图一个NTP服务器而是图一台1995年的设备重新活过来。所以我选了方案B也就是中间那条路老设备内部的GPS接收机、天线、OCXO、电源屏蔽结构全部保留只把输出的NMEA串口和1PPS脉冲接出来喂给一块树莓派跑chrony让它真正变成一台对外服务的NTP服务器。这也是整个重建项目的核心逻辑老硬件负责“产生精确的时间”新硬件负责“把时间网络化”。3.2 为什么控制核心选树莓派有人可能问为什么不直接用一个STM32单片机或者一台占美小主机单片机的问题在于NTP服务器不是简单的“收到PPS后对一下表”它需要跑完整的NTP协议栈处理网络请求、闰秒、内外部时钟源加权、客户端的延迟补偿。这些逻辑用裸机写痛苦程度远超想象。而树莓派这类Linux小主机系统里已经自带成熟的chrony和内核PPS驱动我只需要写几十行配置就能把老设备的PPS和NMEA信号变成标准的Stratum-1服务。而且树莓派还有足够的余量跑Web监控面板、SNMP、甚至把PTP服务也顺带开了方便后续扩展。对我来说这不是性能过剩而是给项目留了足够多的想象空间。4. 实操拆机、改造、配NTP一步步把Stratum-1跑起来下面这部分是真正的重头戏。我会按照实际操作顺序把从拆机到跑起来的全过程写下来每一步都尽量给出可复现的依据和参数。4.1 拆机体检先确认老设备还有没有抢救价值动手之前先准备工具防静电手环、十字螺丝刀、镊子、万用表、示波器、USB转串口线、几根杜邦线。老设备里的板卡多数是插件式的拆的时候先拍照记录每个接口的排线走向别等到装回去的时候面对一堆线不知所措。上电体检时我按这个顺序检查外观和内部有无明显烧灼痕迹、电容鼓包、漏液。我拆的这台电源板上有两颗电解电容顶部已经微微凸起这是老设备的通病直接换同容量耐压的105度电解电容即可。后备电池电压。用万用表测一下VRAM备份电池正常应该在3V左右低于2.5V就必须换。顺手测一下电池周围有没有漏液腐蚀痕迹如果电池紧挨着主控芯片漏液处理迟了板子基本就没救了。晶振是否起振。OCXO的加热引脚应该有工作电流通电后等几分钟用手摸晶振外壳是温热的就说明恒温电路在工作。天线通路。老设备的天线接头一般是TNC或者BNC用万用表量一下天线中心针和外壳之间有没有短路有源天线还要给偏置电压通常在3V到5V之间。体检结果决定后续走向如果板卡损坏严重直接拆掉整块板子当料板把机箱改成现代GPS板卡的外壳如果主板完好那就走方案B保留接收机板卡只改接口。我手里这台情况不错除了两颗电容和电池需要换主板和OCXO都还健在所以整个体检流程只花了不到一小时。4.2 供电与电平转换老设备的“非标口味”得逐项解决1995年的设备吃电习惯和现在完全不同。有的机器需要正负12V双电源有的直接吃19V直流还有的老式设备用48V电信电压。给老设备供电前一定要先看机箱铭牌上的电压和功率标注再用可调电源从低电压开始慢慢往上加盯着电流表别一上来就怼标准电压。我这台设备标称12V直流实测待机电流约0.6AOCXO加热时峰值能到1.1A左右。为了不给老电源板增加额外负担我直接把机箱内部的线性电源拆下来换成一块12V 3A的开关电源模块电路板不与原电源部分共地而是单独接一条地线出去这样能减少开关电源带来的纹波对GPS接收机的干扰。串口电平也是个大坑。老设备串口基本是RS-232电平正负12V那种而树莓派的GPIO是3.3V TTL电平。直接接上去轻则读不到数据重则烧坏树莓派。所以我的做法是老设备的DB9串口先接一块MAX3232电平转换板把RS-232电平转成3.3V TTL再接树莓派的UART RX引脚。1PPS输出线则单独处理老设备的PPS口一般是TTL电平但也有可能是开漏输出先用示波器看波形确认是3.3V/5V的方波后再决定要不要加电平转换。4.3 串口抓包先让GPS开口说话接线接好之后先把GPS接收机通电用一根USB转串口线FTDI芯片的稳一点连到电脑上打开minicom或者任何串口终端minicom -D /dev/ttyUSB0 -b 9600这里注意一定要确认设备串口的实际波特率。老设备手册里写的是9600但也有可能被人改过盲试的话可以试试4800、9600、19200三档。在串口终端里正常的现象是每条数据都以$开头并且每秒刷新一次。我按下回车等了几秒后屏幕上出现了这样的输出$GPRMC,123519,A,5129.1234,N,00011.1234,W,000.0,360.0,010195,013.0,E*67 $GPZDA,123519,01,01,1995,00,00*47看到$GPRMC和$GPZDA说明GPS接收机已经锁星并开始输出有效定位数据。如果只看到一堆$GPGGA之类的语句但没有ZDA问题也不大chrony同样支持从RMC里读时间只是日期字段只有两位年份跨世纪的时候会有歧义所以ZDA更好。如果屏幕上一片空白先检查天线有没有接对再检查PPS线是不是把串口的RX脚短路了。我调试时遇到过PPS信号和串口TX线接错导致的“看门狗式”死机排查了半天才发现是公母头线序的问题。老设备串口的2、3、5脚定义一定要重新看手册不能想当然。4.4 让树莓派读到PPS内核驱动的三板斧设备能输出NMEA和PPS之后就该让树莓派读取这两路信号了。NMEA走的是UART直接映射到 /dev/ttyAMA0 或 /dev/serial0。PPS信号则更麻烦一点它需要内核级别的PPS驱动否则用户态程序根本抓不到微秒级的脉冲边沿。我选择用树莓派的GPIO接PPS在 /boot/config.txt 里加一行dtoverlaypps-gpio,gpiopin18重启之后应该能看到 /dev/pps0 这个设备文件。接着安装测试工具sudo apt install pps-tools sudo ppstest /dev/pps0如果一切正常ppstest会每秒打印一行带时间戳的脉冲信息比如source 0 - assert 1735689600.000000123, sequence: 12345这里的秒和纳秒就是PPS边沿到达内核的时刻。出现这种输出说明树莓派已经能精确感知老设备每秒输出的那个“秒沿”了。如果你的板子没有GPIO接线也可以用串口DCD线来传PPS。把PPS接到串口DCD脚加载pps-ldisc内核模块再把串口设置成PPS模式。两种方式最终效果差不多但GPIO方式更直观接线也方便所以我最后走了GPIO路线。4.5 配置chrony把PPS和NMEA合成一个时间尺度当NMEA和PPS都能被系统读到之后最后一步就是用chrony把它们组合成一个“绝对时间”。NMEA报文虽然能给出年月日时分秒但它的延迟有几十毫秒的抖动PPS脉冲虽然精确到微秒但它只是“秒沿”不知道现在是几点几分。chrony的思路很简单让PPS负责高精度的秒内偏移校准NMEA负责提供“这么多年月日时”的粗时间。完整的chrony配置文件如下# /etc/chrony/chrony.conf # 本机作为时间服务器向局域网提供服务 allow 192.168.1.0/24 # 本地时钟作为后备源当GPS失锁时顶上 local stratum 10 # NMEA作为粗时间源来自/dev/ttyAMA0 refclock SHM 0 refid NMEA offset 0.5 precision 1e-1 poll 3 # PPS作为精时间源来自/dev/pps0 refclock PPS /dev/pps0 refid PPS lock NMEA配置里有几个点很重要第一refclock SHM 0 的offset 0.5是因为老设备串口输出的NMEA报文头部和报文内时间字段之间通常有一个固定延迟这个值跟波特率和设备实现有关我自己实测大约0.5秒需要根据抓包数据微调。这个offset如果不对粗时间源就会偏几百毫秒导致整体时间错乱。第二lock NMEA表示PPS源不独立判断时间而是“锁定”NMEA源读出的年月日时分秒只在秒内做精校准。这样即使PPS源因为失锁暂时退出只要NMEA还在时间也不会乱跳。第三local stratum 10表示如果GPS完全失锁本机也能作为一个低优先级时钟源顶上去避免整个网络时间彻底断供。配置好之后重启chrony服务sudo systemctl restart chrony然后用chrony自带的工具看一眼状态chronyc sources -v如果一切正常你会看到类似这样的输出.-- Source mode ^ server, peer, # local clock. / .- Source state * current synced, combined , - not combined, | / ? unreachable, x may be in error, ~ too variable. || .- xxxx [ yyyy ] /- zzzz || Reachability Interval Tentative Timeouts Frequency ^* PPS 0 6 377 0 0 0.00us[ 0.1us] /- 8us ^- NMEA 1 4 377 0 0 20ms[ 20ms] /- 30ms这里最关键的是PPS那一行的状态标记是 *说明系统当前正以PPS为参考源在运行。offset那一列的0.00us表示系统时间与PPS的偏差只有几十纳秒到一两百纳秒。看到这个数值的一瞬间我差点以为看错了二十几微秒的日常系统时钟抖动直接被压到亚微秒级别这个精度已经远超大多数业务场景的需求。这时候这台1995年的老设备已经真正成为一台合格的Stratum-1 NTP服务器了。4.6 外网验证用另一台设备做交叉对时光看本机自我感觉良好还不够我拉了一台笔记本连到同一个交换机手动把它的chrony源指向这台老服务器然后每隔10分钟记录一次时间偏差。实测连续跑了12小时客户端的时间偏移始终稳定在正负10微秒以内这个表现和商用NTP服务器处于同一水平。另外你也可以用手机连接局域网里的Wi-Fi手动设置时间同步源在这台NTP服务器上或者用第二台GPS接收机作为对照两台设备互相比对PPS的边沿差。如果能拿到示波器直接把两台设备的PPS都引到示波器两个通道上看重合度那更直观。5. 重建过程中踩过的坑常见问题排查表老设备翻新没有一次搞定这种好事。我分享一下这个项目里遇到的最典型的几类问题以及快速排查思路。5.1 天线问题接头、供电和位置一个都不能少天线是GPS时间服务器最容易被忽略的环节。我这台老机器原装天线已经老化换了一根有源GPS天线3V供电的那种结果发现老设备的天线供电引脚不提供3V只有5V。直接把5V怼到有源放大器上轻则接收机增益过高饱和重则烧掉天线放大器。最终我改用外置偏置器在信号线里串一个电容隔直流再单独给天线供3V电问题解决。天线位置也很关键。1995年的接收机灵敏度本来就比现代模块弱不少如果放在室内靠窗位置大概率锁星困难。建议直接放窗台、楼顶或者阳台外侧天线尽量朝天周围不要有金属遮挡。信号弱的时候接收机会长期停留在“未定位”状态输出语句里A/V状态一直是V时间输出中断NTP服务器也会跟着失去参考源。5.2 PPS毛刺和地环路树莓派接上PPS后我用示波器测到PPS的上升沿上有明显的振铃毛刺。这些毛刺会让内核PPS驱动误触发导致时间出现周期性抖动。原因很简单老设备的地和树莓派的地之间存在一个地电位差形成地环路电流在高阻抗线上感应出噪声。解决办法有两个一是直接用光耦隔离PPS信号只让“秒沿”传播过去地环路自然断掉另一个是近距离短接多点地线减少电位差。我自己采用了光耦隔离方案光耦前后分别供电PPS信号过光耦后上升沿会延迟几百纳秒这个固定延迟在配置chrony时可以用offset 0.0000001这样的微小偏移补回来。最终效果立竿见影毛刺完全消失。5.3 老电池漏液和电容鼓包前面体检步骤里提到了后备电池这里必须再强调一下如果电池位置靠近主控芯片发现漏液后不要犹豫马上拆下来清理。电池漏液有腐蚀性会顺着引脚爬上PCB表面的绝缘层几天之内就可能造成相邻走线的短路。5.4 常见问题速查表现象可能原因解决办法串口输出乱码波特率不对改波特率为4800/9600/19200串口无输出RX/TX接反对调串口接线GPS一直无定位天线没接或信号弱换有源天线调整位置PPS读数跳变地环路/毛刺光耦隔离PPSNMEA时间对不上offset配置不对微调refclock offset设备频繁重启电容老化/电源波动更换电解电容检查供电频率漂移大OCXO热机不够预热至少20分钟再启用6. 跑起来之后数据、扩展与后续玩法6.1 持续运行的性能数据与感受这台设备跑了一周后我拉了一份chrony的数据。系统时间与PPS的offset长期稳定在正负1微秒以内频率漂移从刚开机时候的温度漂移慢慢收敛到每天几个ppb的量级。OCXO确实没有让我失望三十年的搁置并没有摧毁它的稳定性只要给它足够的热机时间恒温晶振的性能依然能打。从实际业务角度看局域网内所有设备拿到的时间戳在做日志审计时不再有跨越好几秒的偏差。以前排查告警经常因为节点时间不一致要逐个对齐时钟现在只需要保证所有机器都指向这台老服务器时间一致性问题就彻底消失了。6.2 这个项目后续还能怎么玩这台服务器跑稳了之后我又陆陆续续做了一些扩展也都支持复现给机箱加一块OLED显示屏通过树莓派的GPIO实时显示锁星数、当前PPS偏移、系统时间机器放在机房玻璃柜里能直接看到运行状态。把chrony的web监控面板架上定时器把chronyc tracking和chronyc sources -v的结果刷新到网页省得每次都要SSH进去看。在树莓派上启用了PTPIEEE 1588服务给实验室里支持PTP的设备提供硬件时间戳。接了一台支持GPS信号模拟的设备类似PARTAPACK H2那种能模拟卫星信号源的仪器在户外调试不方便的天气里用模拟信号对接收机做过冷启动和热启动测试确认老设备在无星环境下收不到信号时的行为是否符合预期。这个思路其实适用于任何GPS设备先模拟、再实测能省去很多室外跑腿的时间。6.3 最后再分享一点经验如果你也想复刻这个项目我的建议是先从一台确定完好的老GPS接收机开始别一上来就收“尸体机”。确认串口能输出NMEA之后再考虑怎么接PPS、怎么配chrony。时间同步这条链路里最容易出问题的永远是信号源头而不是NTP软件。跑起来以后多观察几天数据尤其是温度变化对OCXO的影响。恒温晶振的功耗和发热都大机箱供电和散热要留够余量。GPS天线避雷、线缆防水这些事在室外场景里宁可多花钱也不要省——不然某次雷雨之后你又要回到被运营商拿捏的日子那可就真的又被Telstra’d了。
返回列表