Serveur NTP Raspberry PI Stratum 1 ultra précis

Dans cet article, je vais vous dire comment construire un serveur NTP Stratum 1 sur un Raspberry PI pour synchroniser l'heure pour une quantité modeste et oublier pour toujours les problèmes associés à l'inadéquation horaire sur tous vos appareils. Et surtout, il donnera des résultats de deux ordres de grandeur plus précis qu'un serveur ordinaire.



Dans l' article précédent consacré à la synchronisation de l'heure par radio et SRNS (systèmes de communication radio navigation), je n'ai pas eu le temps de parler du choix d'un récepteur GPS / GLONASS avec une sortie PPS. Pendant ce temps, la précision de la réception du signal en dépend, la valeur peut aller d'une milliseconde à plusieurs microsecondes, ce qui est souvent d'une importance décisive.



Pour une réception du signal horaire la plus précise possible, vous avez besoin d'un récepteur GPS / GLONASS avec une sortie PPS. Le fait est, cependant, que sur le marché russe, il n'est pas facile d'obtenir un appareil avec de telles caractéristiques à un prix abordable. Beaucoup de ces modèles ont depuis longtemps cessé d'être produits, et dans les magasins en ligne abandonnés avec une mise en page des années 1990, seules leurs descriptions restaient avec une offre de souscrire à une notification lorsque les marchandises sont arrivées.





Une liste complète des équipements GPS testés est disponible sur la ressource GitLab NTPSec. Il n'est pas difficile de remarquer qu'un petit nombre d'appareils présentés dans la liste sont marqués de 3 à 4 étoiles et de l'option PPS. Ainsi, les destinataires suivants sont présélectionnés.



  • Garmin GPS-18, pas USB *** (prix approximatif 10 mille roubles)
  • 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 * Excellentes performances: GPSd reconnaît le récepteur rapidement et de manière fiable, et les rapports sont générés entièrement et correctement.



3 * Bonnes performances: gpsd avec des problèmes mineurs ou une latence reconnaît les périphériques, mais les rapports sont générés complètement et correctement.



Si vous êtes intimidé par le prix de ces modèles, et qu'il n'y a pas non plus de grande envie de bricoler des glandes, vous ne pouvez pas lire plus loin. Un récepteur connecté à un serveur via une interface USB ou RS232 fournira une détermination de l'heure beaucoup plus précise qu'un serveur NTP utilisant tcp / ip. Mais si le chemin du samouraï ne vous est pas étranger, construisons votre serveur Raspberry PI NTP avec synchronisation de l'heure GPS.



Assembler Raspberry PI



Donc: nous prenons les composants suivants pour notre micro serveur.



  1. Carte Raspberry Pi 4 modèle B, 4 Gio de RAM (6200 roubles);
  2. Cas, par exemple ceci (890 roubles);
  3. Une carte Micro SD pour 32 Gio, 16 Gio est possible; (540 frotter.)
  4. Module GPS basé sur la puce u-blox NEO-M8 (1700 roubles avec antenne);
  5. Antenne GPS à 15 dB;
  6. Fer à souder.


En fait, u-blox NEO-M8 est équipé d'une interface UART, mais pour la sortie PPS, vous devez souder la broche 3 du module GPS au connecteur GPIO correspondant sur la carte Raspberri Pi. Le module de la société suisse a gagné en popularité auprès des spécialistes et ce n'est pas un hasard, les caractéristiques parlent d'elles-mêmes.



  • SRNS pris en charge: BeiDou, Galileo, GNSS; GPS / QZSS, GLONASS;
  • Tension d'alimentation: 2,7 ... 3,6 V;
  • Interfaces: UART, USB, SPI, DDC, I2C;
  • Protocoles pris en charge: NMEA 0.183 version 4.0, UBX (binaire), RTCM 2.3;
  • Sensibilité de détection: -167 dBm;
  • Sensibilité de suivi: -160 dBm;
  • Temps de démarrage à froid: 26 s;
  • Temps de démarrage à chaud: 1,5 s;
  • Consommation électrique: 35 mW;
  • Température de fonctionnement: -40 ... + 85 ° ;
  • Dimensions: 16x12,2x2,4 mm


Dans cette configuration avec le dernier équipement, le prix total approximatif du Raspberry PI assemblé sera de 9330 roubles. Vous pouvez économiser de l'argent en achetant un Raspberry PI 3 ou un quatre avec 2 Gio de RAM. Vous pouvez toujours économiser sur une puce GPS, u-blox NEO-6M avec une antenne coûte environ 650 roubles. Ensuite, le prix du serveur NTP tombera à 5500 roubles.





Module GPS / Glonass UBLOX NEO 8M La



question peut se poser, à quoi servent tous ces investissements et quelle précision est apportée par telle ou telle méthode de synchronisation horaire. Petite plaque récapitulative pour référence.

Source du signal horaire Erreur
GPS avec horloge atomique ± 50 nSec
KPPS ± 1 μSec
PPS ± 5 μSec
Interface USB 1.1 ± 1 ms
Interface USB 2.0 ± 100 μSec (100000 nSec)
NTP sur le réseau ~ ± 30 ms


Kernel PPS (KPPS) diffère de PPS en ce qu'il utilise une fonction de noyau Linux / Unix pour horodater avec précision un changement d'état dans la ligne PPS. Le PPS habituel est implémenté dans l'espace utilisateur. Si le noyau Linux prend en charge KPPS via l'API RFC 2783, gpsd l'utilisera pour améliorer la précision.



De nombreuses distributions Linux ont un package pps-tools qui fournit la prise en charge de KPPS et installe le fichier d'en-tête timepps.h. Assurez-vous d'installer ce package.



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


Ainsi, en connectant un récepteur GPS avec sortie PPS via USB, nous obtenons une précision de synchronisation temporelle 300 fois supérieure. La lecture de la puce GPS sur la carte en mode KPPS donne une augmentation de précision de deux autres ordres de grandeur .



Soyons honnêtes - nous ne savons pas tous comment utiliser un fer à souder, tout le monde n'utilise pas cet outil régulièrement. Dans ce cas, il est judicieux de rechercher un module GPS qui ne nécessite pas de contacts à souder.





Carte d'extension Raspberry Pi GPS / RTC



Il existe peu de cartes de ce type et elles sont chères. La différence de prix sera entièrement compensée par l'achat d'un fer à souder et les frais de main-d'œuvre.



Installation du système d'exploitation



Il existe également un système d'exploitation Raspberry PI. ka Raspbian, vous pouvez simplement suivre le lien , télécharger la dernière version et l'installer. Beaucoup de gens le font, mais rappelons-nous que Raspberry PI 4 prend en charge le système d'exploitation 64 bits, tandis que Raspberry PI OS n'a que des modifications Debian Linux 32 bits pour l'architecture Arm.



Il y a un tel point de vue qu'il n'est pas justifié sur un OS 64 bits sur Raspberry PI 4, puisqu'il n'y a aucun moyen de fournir un gain de performances en raison des particularités de l'architecture et de l'assemblage. Ce point de vue me semble douteux, ils ont déjà écrit à ce sujet sur Habré - l' OS 64 bits est plus rapide .



Il existe un portage de Debian Linux pour l'architecture arm64, mais la distributionUbuntu pour Raspberry PI a une page et des instructions claires. Sur la page, nous trouvons une confirmation supplémentaire qu'il est préférable de choisir un système d'exploitation 64 bits.







Inventaire des installations:



  • Raspberry Pi 4;
  • Câble d'alimentation USB-C pour Pi 4;
  • Carte Micro SD avec image d'installation Ubuntu;
  • Moniteur avec sortie HDMI;
  • Câble MicroHDMI;
  • Clavier USB.


L'étape suivante consiste à écrire l'image d'installation sur la carte Micro SD. Si vous ne disposez pas d'un utilitaire et d'un programme spécialisés à ces fins, dans le cas le plus simple, cela suffit.



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


Le nom exact du périphérique est affiché dans la sortie dmesg lorsqu'un nouveau périphérique est détecté.



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


Insérez une carte Micro SD, connectez un moniteur HDMI, un clavier USB et un câble d'alimentation pour démarrer dans Ubuntu Server sur le Raspberry Pi. Le nom d'utilisateur et le mot de passe par défaut sont ubuntu.



Configuration du serveur 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