超高精度Raspberry PI Stratum 1 NTP服务器

在本文中,我将告诉您如何在Raspberry PI上构建Stratum 1 NTP服务器,以适度的时间同步时间,并且永远忘记与所有设备上的时间不匹配相关的问题。最重要的是,它将使结果比常规服务器准确两个数量级。



上一篇专门讨论无线电和SRNS(无线电导航通信系统)的时间同步的文章中,我没有时间讨论如何选择具有PPS输出的GPS / GLONASS接收器。同时,信号接收的精度取决于此,该值可以从一毫秒到几微秒,这通常具有决定性的重要性。



为了获得最准确的时间信号接收,您需要具有PPS输出的GPS / GLONASS接收器。但是,要点是,在俄罗斯市场上,以可承受的价格获得具有这种特性的设备并不容易。许多这样的模型早已停止生产,并且在1990年代布局的废弃网上商店中,只有它们的描述保留了当货物到达时的订阅通知的要约。





可以在GitLab NTPSec资源上找到经过测试的GPS设备的完整列表不难看出,列表中显示的少数设备已标有3-4星和PPS选项。因此,以下接收者入围。



  • Garmin GPS-18,而不是USB ***(价格约1万卢布)
  • GlobalSat MR-350P ****
  • 杰克逊实验室FireFly-II ***
  • 麦哲伦泰勒斯AC12 ***
  • 摩托罗拉Oncore GT + ***
  • Navisys GR601-W ****
  • SkyTraq SKG16B ****
  • Trimble Lassen IQ ***
  • u-blox ANTARIS LEA-4T ***
  • u-blox EVK 6H ****
  • u-blox LEA SQ ****


4 *出色的性能:GPSd可以快速,可靠地识别接收器,并且可以完全正确地生成报告。



3 *良好的性能:存在小问题或延迟的gpsd可以识别设备,但可以完全正确地生成报告。



如果您对这些型号的价格感到恐惧,并且也没有很大的愿望去修补腺体,那么您将无法进一步阅读。通过USB或RS232接口连接到服务器的接收器比使用tcp / ip的NTP服务器提供更准确的时间确定。但是,如果武士的方法对您而言并不陌生,那么让我们使用GPS时间同步来构建Raspberry PI NTP服务器。



将树莓派放在一起



因此:我们为微型服务器采用以下组件。



  1. Raspberry Pi 4 Model B板,4 GiB RAM(6200卢布);
  2. 案例,例如这个(890卢布);
  3. Micro SD卡可用于32 GiB,16 GiB;(540擦)
  4. 基于u-blox NEO-M8芯片的GPS模块(带天线的1700卢布);
  5. GPS天线为15 dB;
  6. 烙铁。


实际上,u-blox NEO-M8配备了UART接口,但是对于PPS输出,您需要将GPS模块上的Pin-3焊接到Raspberri Pi板上相应的GPIO连接器上。这家瑞士公司的模块在专家中越来越受欢迎,这绝非偶然,其特征不言而喻。



  • 支持的SRNS:北斗,伽利略,GNSS;GPS / QZSS,GLONASS;
  • 电源电压:2.7 ... 3.6 V;
  • 接口:UART,USB,SPI,DDC,I2C;
  • 支持的协议:NMEA 0.183版本4.0,UBX(二进制),RTCM 2.3;
  • 检测灵敏度:-167 dBm;
  • 跟踪灵敏度:-160 dBm;
  • 冷启动时间:26 s;
  • 热启动时间:1.5 s;
  • 功耗:35 mW;
  • 工作温度:-40 ... + 85°;
  • 尺寸:16x12.2x2.4毫米


在使用最新设备的这种配置中,组装好的Raspberry PI的总价约为9330卢布。您可以通过购买Raspberry PI 3或带有2 GiB RAM的4来节省金钱。您仍然可以保存在GPS芯片上,带有天线的u-blox NEO-6M成本约为650卢布。然后,NTP服务器的价格将降至5500卢布。





GPS / Glonass模块UBLOX NEO 8M



可能会出现问题,为什么需要所有这些投资以及这种或那种时间同步方法提供了什么精度。小汇总板供参考。

时间信号源 错误
带原子钟的GPS ±50纳秒
KPPS ±1微秒
PPS ±5微秒
USB 1.1接口 ±1毫秒
USB 2.0接口 ±100微秒(100000纳秒)
网络上的NTP 〜±30毫秒


内核PPS(KPPS)与PPS的不同之处在于,它使用Linux / Unix内核功能来准确地标记PPS行中状态变化的时间戳。通常的PPS在用户空间中实现。如果Linux内核通过API RFC 2783支持KPPS,则gpsd将使用它来提高准确性。



许多Linux发行版都有pps-tools软件包,该软件包提供KPPS支持并安装timepps.h头文件。确保安装此软件包。



(1:1146)$ sudo emerge -av pps-tools

Local copy of remote index is up-to-date and will be used.
These are the packages that would be merged, in order:

Calculating dependencies... done!
[binary   R    ] net-misc/pps-tools-0.0.20120407::gentoo  0 KiB

Total: 1 package (1 reinstall, 1 binary), Size of downloads: 0 KiB
Would you like to merge these packages? [Yes/No] 


因此,通过将GPS接收器通过USB连接到PPS输出,我们可以将时间同步精度提高300倍在KPPS模式下从板上的GPS芯片读取数据可使精度提高两个数量级



老实说-并非我们所有人都知道如何使用电烙铁,不是每个人都定期使用此工具。在这种情况下,寻找不需要焊接触点的GPS模块是有意义的。





Raspberry Pi GPS / RTC扩展板



这种板很少而且价格昂贵。价格差异将通过购买烙铁和人工成本得到充分补偿。



操作系统安装



也有一个Raspberry PI OS。 ka Raspbian,您只需点击链接,下载最新版本并安装它。有很多人这样做,但请记住,Raspberry PI 4支持64位操作系统,而Raspberry PI OS仅对Arm体系结构进行了32位Debian Linux修改。



有一种观点认为,在Raspberry PI 4的64位OS上,它是不合理的,因为由于体系结构和汇编功能的原因,无法提供性能提升。这种观点在我看来值得怀疑,他们已经这个的哈布雷- 64位操作系统更快对于arm64体系结构,



有一个Debian Linux端口,但是该版本Ubuntu for Raspberry PI的页面和说明清晰。在该页面上,我们发现另外的确认,那就是选择64位OS更好。







安装清单:



  • Raspberry Pi 4;
  • Pi 4的USB-C电源线;
  • 带有Ubuntu安装映像的Micro SD卡;
  • 带HDMI输出的显示器;
  • MicroHDMI电缆;
  • USB键盘。


下一步是将安装映像写入Micro SD卡。如果您没有用于这些目的的专用实用程序和程序,则在最简单的情况下就足够了。



sudo dd if=/path/to/ubuntu-core-arm64.iso of=/dev/mmcblk0 status=progress


当检测到新设备时,将在dmesg输出中看到该设备的确切名称。



PM: Adding info for No Bus:179:0
device: 'mmcblk0': device_add
PM: Adding info for No Bus:mmcblk0


插入Micro SD卡,连接HDMI监视器,USB键盘和电源线,以启动Raspberry Pi上的Ubuntu Server。默认的用户名和密码是ubuntu。



NTP服务器设置



  1. Raspberry PI (headless), IP . .



    (1:1151)$ arp -na | grep -i "dc:a6:32"


    Pi HDMI USB , 1-2 .
  2. ssh



    (1:1152)$ ssh ubuntu@<Raspberry Pi’s IP address>
  3. .



    user@server ~$ sudo apt-get install aptitude
    user@server ~$ sudo aptitude install wpasupplicant gpsd chrony
  4. Wi-Fi wpasupplicant.
  5. Linux UART0 Pi /dev/ttyAMA0. UART0 GPS Linux. console=ttyAMA0,115200, console=tty1. /etc/default/grub GRUB_CMDLINE_LINUX_DEFAULT. , /boot/config.txt, .



    Raspberry Pi 4 6 UART-

    UART0 PLO11 /dev/ttyAMA0 (Bluetooth)
    UART1 mini UART /dev/ttyS0
    UART2 PLO11
    UART3 PLO11
    UART4 PLO11
    UART4 PLO11
    UART2-5 .



    , UART0 — , UART1, mini UART. Bluetooth UART1 , UART0. /etc/default/grub, /boot/config.txt enable_uart=1.
  6. /etc/defaults/gpsd .



    DEVICES="/dev/ttyAMA0 /dev/pps0"
    GPSD_OPTIONS="-n"
    USBAUTO="false"
  7. , gpsd.



    user@server ~$ sudo /etc/init.d/gpsd start
    user@server ~$ sudo /etc/init.d/gpsd restart
  8. GPS.



    user@server ~$ cat /dev/ttyAMA0
    user@server ~$ cgps -s
    user@server ~$ ppstest /dev/pps0
  9. /etc/ntp.conf.



    , Stratum 1, 2 NTP (, pool [0-9].subdomain.pool.ntp.org) , GPS/PPS .



    # GPS Serial data reference (NTP0)
    server 127.127.28.0 minpoll 4
    fudge 127.127.28.0 flag1 1 time1 0.9999 refid GPS #flag1 - PPS on


    # GPS PPS reference (NTP1)
    server 127.127.22.0 minpoll 4
    fudge 127.127.22.0 flag3 1 refid PPS #flag3 - enable KPPS API


    NTP0 , GPS. NTP1 PPS .
  10. ntpd



    user@server ~$ sudo /etc/init.d/ntpd restart









All Articles