Servidor NTP ultrarrápido Raspberry PI Stratum 1

En este artículo, le diré cómo construir un servidor NTP Stratum 1 en un Raspberry PI para sincronizar el tiempo por una cantidad modesta y olvidarse de los problemas asociados con la falta de coincidencia de tiempo en todos sus dispositivos para siempre. Y lo más importante, dará resultados dos órdenes de magnitud más precisos que un servidor normal.



En el artículo anterior dedicado a la sincronización horaria por radio y SRNS (sistemas de comunicación de navegación por radio), no tuve tiempo de hablar sobre la elección de un receptor GPS / GLONASS con salida PPS. Mientras tanto, la precisión de la recepción de la señal depende de esto, el valor puede ser de un milisegundo a varios microsegundos, y esto a menudo es de importancia decisiva.



Para la recepción de señal horaria más precisa, necesita un receptor GPS / GLONASS con salida PPS. Sin embargo, el punto es que en el mercado ruso no es fácil obtener un dispositivo con tales características a un precio asequible. Muchos de estos modelos han dejado de producirse, y en las tiendas en línea abandonadas con diseño en la década de 1990, solo sus descripciones permanecieron con una oferta para suscribirse a una notificación cuando llegaron los productos.





Una lista completa de los equipos GPS probado se puede encontrar en el recurso GitLab NTPSec. No es difícil notar que una pequeña cantidad de dispositivos presentados en la lista están marcados con 3-4 estrellas y la opción PPS. Por lo tanto, los siguientes receptores son preseleccionados.



  • Garmin GPS-18, no USB *** (precio aproximado 10 mil rublos)
  • GlobalSat MR-350P ****
  • Jackson Labs FireFly-II ***
  • Magellan Thales AC12 ***
  • Motorola Oncore GT + ***
  • Navisys GR601-W ****
  • SkyTraq SKG16B ****
  • Trimble Lassen IQ ***
  • u-blox ANTARIS LEA-4T ***
  • u-blox EVK 6H ****
  • u-blox LEA SQ ****


4 * Excelente rendimiento: GPSd reconoce el receptor de forma rápida y confiable, y los informes se generan completa y correctamente.



3 * Buen rendimiento: gpsd con problemas menores o latencia reconoce dispositivos, pero los informes se generan completa y correctamente.



Si el precio de estos modelos le intimida, y tampoco hay un gran deseo de jugar con las glándulas, no puede seguir leyendo. Un receptor conectado a un servidor a través de una interfaz USB o RS232 proporcionará una determinación de tiempo mucho más precisa que un servidor NTP que usa tcp / ip. Pero si el camino del samurai no es ajeno a usted, entonces construyamos su servidor Raspberry PI NTP con sincronización de hora GPS.



Poner juntos Raspberry PI



Entonces: tomamos los siguientes componentes para nuestro micro servidor.



  1. Placa Raspberry Pi 4 Modelo B, 4 GiB RAM (6200 rublos);
  2. Caso, por ejemplo esto (890 rublos);
  3. Tarjeta Micro SD para 32 GiB, 16 GiB es posible; (540 rub.)
  4. Módulo GPS basado en chip u-blox NEO-M8 (1700 rublos con antena);
  5. Antena GPS a 15 dB;
  6. Soldador.


En realidad, u-blox NEO-M8 está equipado con una interfaz UART, pero para la salida PPS, debe soldar el pin-3 en el módulo GPS al conector GPIO correspondiente en la placa Raspberri Pi. El módulo de la compañía suiza ha ganado popularidad entre los especialistas y esto no es casualidad, las características hablan por sí solas.



  • SRNS admitidos: BeiDou, Galileo, GNSS; GPS / QZSS, GLONASS;
  • Tensión de alimentación: 2.7 ... 3.6 V;
  • Interfaces: UART, USB, SPI, DDC, I2C;
  • Protocolos admitidos: NMEA 0.183 versión 4.0, UBX (binario), RTCM 2.3;
  • Sensibilidad de detección: -167 dBm;
  • Sensibilidad de seguimiento: -160 dBm;
  • Tiempo de arranque en frío: 26 s;
  • Tiempo de arranque en caliente: 1.5 s;
  • Consumo de energía: 35 mW;
  • Temperatura de trabajo: -40 ... + 85 ° ;
  • Dimensiones: 16x12.2x2.4 mm


En esta configuración con el último equipo, el precio total aproximado del Raspberry PI ensamblado será de 9330 rublos. Puede ahorrar dinero comprando un Raspberry PI 3 o un cuatro con 2 GiB RAM. Todavía puede ahorrar en un chip GPS, u-blox NEO-6M con una antena cuesta alrededor de 650 rublos. Luego, el precio del servidor NTP se reducirá a 5500 rublos.





Módulo GPS / Glonass UBLOX NEO 8M



Puede surgir la pregunta, para qué son todas estas inversiones y qué precisión proporciona este o aquel método de sincronización de tiempo. Pequeña placa resumen para referencia.

Fuente de señal de tiempo Error
GPS con reloj atómico ± 50 nSeg
KPPS ± 1 μSec
PPS ± 5 μSeg
Interfaz USB 1.1 ± 1 mSeg
Interfaz USB 2.0 ± 100 μSec (100000 nSec)
NTP a través de la red ~ ± 30 mSeg


Kernel PPS (KPPS) difiere de PPS en que utiliza una función de kernel de Linux / Unix para marcar con precisión un cambio de estado en la línea PPS. El PPS habitual se implementa en el espacio de usuario. Si el kernel de Linux admite KPPS a través de API RFC 2783, gpsd lo usará para mejorar la precisión.



Muchas distribuciones de Linux tienen un paquete pps-tools que proporciona soporte KPPS e instala el archivo de encabezado timepps.h. Asegúrese de instalar este paquete.



(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] 


Por lo tanto, al conectar un receptor GPS con salida PPS a través de USB, obtenemos un aumento de 300 veces en la precisión de sincronización de tiempo. La lectura del chip GPS en el tablero en modo KPPS proporciona un aumento en la precisión de otros dos órdenes de magnitud .



Seamos honestos: no todos sabemos cómo usar un soldador, no todos usan esta herramienta regularmente. En este caso, tiene sentido buscar un módulo GPS que no requiera contactos de soldadura.





Placa de expansión Raspberry Pi GPS / RTC



Hay pocas placas de este tipo y son caras. La diferencia de precio se compensará totalmente con la compra de un soldador y los costos de mano de obra.



Instalación del sistema operativo



También hay un Raspberry PI OS. ka Raspbian, puedes seguir el enlace , descargar la última versión e instalarlo. Muchas personas hacen esto, pero recordemos que Raspberry PI 4 es compatible con el sistema operativo de 64 bits, mientras que Raspberry PI OS solo tiene modificaciones Debian Linux de 32 bits para la arquitectura Arm.



Existe un punto de vista tal que no está justificado en un sistema operativo de 64 bits en Raspberry PI 4, ya que no hay forma de proporcionar una ganancia de rendimiento debido a las características de arquitectura y ensamblaje. Este punto de vista me parece dudoso, ya han escrito sobre esto en Habré: el sistema operativo de 64 bits es más rápido .



Hay un puerto de Debian Linux para la arquitectura arm64, sin embargo, la distribuciónUbuntu para Raspberry PI tiene una página clara e instrucciones. En la página encontramos confirmación adicional de que es mejor elegir un sistema operativo de 64 bits.







Inventario de instalación:



  • Raspberry Pi 4;
  • Cable de alimentación USB-C para Pi 4;
  • Tarjeta Micro SD con imagen de instalación de Ubuntu;
  • Monitor con salida HDMI;
  • Cable MicroHDMI;
  • Teclado USB


El siguiente paso es escribir la imagen de instalación en la tarjeta Micro SD. Si no tiene una utilidad y un programa especializados a mano para estos fines, en el caso más simple es suficiente.



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


El nombre exacto del dispositivo se ve en la salida dmesg cuando se detecta un nuevo dispositivo.



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


Inserte una tarjeta Micro SD, conecte un monitor HDMI, un teclado USB y un cable de alimentación para arrancar en Ubuntu Server en la Raspberry Pi. El nombre de usuario y contraseña predeterminados es ubuntu.



Configuración del servidor 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