Servidor NTP Raspberry PI estratum 1 ultra-preciso

Neste artigo, mostrarei como criar um servidor NTP Stratum 1 em um PI Raspberry para sincronizar o tempo por um valor modesto e esquecer os problemas associados à incompatibilidade de tempo em todos os seus dispositivos para sempre. E o mais importante, ele dará aos resultados duas ordens de magnitude mais precisas do que um servidor comum.



No artigo anterior, dedicado à sincronização de tempo por rádio e SRNS (sistemas de comunicação por radionavegação), não tive tempo de falar sobre a escolha de um receptor GPS / GLONASS com uma saída PPS. Enquanto isso, a precisão da recepção do sinal depende disso, o valor pode variar de um milissegundo a vários microssegundos, e isso geralmente é de importância decisiva.



Para obter uma recepção de sinal de hora mais precisa, você precisa de um receptor GPS / GLONASS com uma saída PPS. A questão é, no entanto, que no mercado russo não é fácil obter um dispositivo com essas características a um preço acessível. Muitos desses modelos deixaram de ser produzidos e, em lojas online abandonadas com o layout da década de 1990, apenas suas descrições permaneciam com a oferta de assinar uma notificação quando as mercadorias chegavam.





Uma lista completa dos equipamentos GPS testados pode ser encontrada no recurso GitLab NTPSec. Não é difícil notar que um pequeno número de dispositivos apresentados na lista está marcado com 3-4 estrelas e a opção PPS. Assim, os seguintes receptores são selecionados.



  • Garmin GPS-18, não USB *** (preço aproximado de 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 desempenho: o GPSd reconhece o receptor de forma rápida e confiável, e os relatórios são gerados total e corretamente.



3 * Bom desempenho: o gpsd com pequenos problemas ou latência reconhece dispositivos, mas os relatórios são gerados completa e corretamente.



Se você se sente intimidado pelo preço desses modelos e também não há grande desejo de mexer nas glândulas, não pode ler mais. Um receptor conectado a um servidor via interface USB ou RS232 fornecerá uma determinação de tempo muito mais precisa do que um servidor NTP usando tcp / ip. Mas se o caminho do samurai não é estranho para você, vamos construir seu servidor Raspberry PI NTP com sincronização de horário GPS.



Juntando Raspberry PI



Então: levamos os seguintes componentes para o nosso micro servidor.



  1. Placa Raspberry Pi 4 Modelo B, 4 GiB RAM (6200 rublos);
  2. Caso, por exemplo, isso (890 rublos);
  3. Cartão Micro SD para 32 GiB, 16 GiB é possível; (540 esfregar.)
  4. Módulo GPS baseado no chip u-blox NEO-M8 (1700 rublos com antena);
  5. Antena GPS a 15 dB;
  6. Ferro de solda.


Na verdade, o u-blox NEO-M8 está equipado com uma interface UART, mas para a saída PPS, você precisa soldar o pino 3 no módulo GPS ao conector GPIO correspondente na placa Raspberri Pi. O módulo da empresa suíça ganhou popularidade entre especialistas e isso não é coincidência, as características falam por si.



  • SRNS com suporte: BeiDou, Galileo, GNSS; GPS / QZSS, GLONASS;
  • Tensão de alimentação: 2,7 ... 3,6 V;
  • Interfaces: UART, USB, SPI, DDC, I2C;
  • Protocolos suportados: NMEA 0.183 versão 4.0, UBX (binário), RTCM 2.3;
  • Sensibilidade de detecção: -167 dBm;
  • Sensibilidade de rastreamento: -160 dBm;
  • Hora de partida a frio: 26 s;
  • Hora de início quente: 1,5 s;
  • Consumo de energia: 35 mW;
  • Temperatura de trabalho: -40 ... + 85 ° ;
  • Dimensões: 16x12.2x2.4 mm


Nesta configuração, com o equipamento mais recente, o preço total aproximado do Raspberry PI montado será de 9330 rublos. Você pode economizar dinheiro comprando um Raspberry PI 3 ou um quatro com 2 GiB de RAM. Você ainda pode economizar em um chip GPS, u-blox NEO-6M, com uma antena que custa cerca de 650 rublos. Em seguida, o preço do servidor NTP cairá para 5500 rublos.





Módulo GPS / Glonass UBLOX NEO 8M A



questão pode surgir, para que servem todos esses investimentos e qual a precisão fornecida por este ou aquele método de sincronização de tempo. Pequena placa de resumo para referência.

Fonte do sinal de hora Erro
GPS com relógio atômico ± 50 nSeg
KPPS ± 1 μSeg
PPS ± 5 μSeg
Interface USB 1.1 ± 1 mSeg
Interface USB 2.0 ± 100 μSeg (100000 nSec)
NTP pela rede ~ ± 30 mSeg


O KPS PPS (KPPS) difere do PPS, pois utiliza uma função do kernel Linux / Unix para registrar com precisão de data e hora uma alteração de estado na linha PPS. O PPS usual é implementado no espaço do usuário. Se o kernel do Linux suportar KPPS por meio da API RFC 2783, o gpsd o usará para melhorar a precisão.



Muitas distribuições Linux têm um pacote pps-tools que fornece suporte ao KPPS e instala o arquivo de cabeçalho timepps.h. Certifique-se de instalar este pacote.



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


Assim, ao conectar um receptor GPS com saída PPS via USB, obtemos um aumento de 300 vezes na precisão da sincronização de tempo. A leitura do chip GPS na placa no modo KPPS aumenta a precisão em mais duas ordens de magnitude .



Sejamos honestos - nem todos sabemos como usar um ferro de soldar, nem todos usam essa ferramenta regularmente. Nesse caso, faz sentido procurar um módulo GPS que não exija contatos de solda.





Placa de expansão para Raspberry Pi GPS / RTC



Existem poucas placas e são caras. A diferença de preço será totalmente compensada pela compra de um ferro de solda e pelos custos de mão-de-obra.



Instalação do SO



Também existe um PI OS de framboesa. ka Raspbian, você pode simplesmente seguir o link , baixar a versão mais recente e instalá-la. Muitas pessoas fazem isso, mas lembre-se de que o Raspberry PI 4 suporta sistema operacional de 64 bits, enquanto o Raspberry PI OS possui apenas modificações Debian Linux de 32 bits para a arquitetura Arm.



Existe um ponto de vista que é injustificado em um sistema operacional de 64 bits no Raspberry PI 4, pois não há como fornecer um ganho de desempenho devido às peculiaridades da arquitetura e montagem. Este ponto de vista me parece duvidoso, eles já escreveram sobre isso no Habré - o sistema operacional de 64 bits é mais rápido .



Existe uma porta do Debian Linux para a arquitetura arm64, no entanto, a distribuiçãoO Ubuntu para Raspberry PI tem uma página e instruções claras. Na página, encontramos confirmação adicional de que é melhor escolher um sistema operacional de 64 bits.







Inventário de instalação:



  • Raspberry Pi 4;
  • Cabo de alimentação USB-C para Pi 4;
  • Cartão Micro SD com imagem de instalação do Ubuntu;
  • Monitor com saída HDMI;
  • Cabo MicroHDMI;
  • Teclado USB.


O próximo passo é gravar a imagem de instalação no cartão Micro SD. Se você não possui um utilitário e programa especializado em mãos para esses fins, no caso mais simples, basta.



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


O nome exato do dispositivo é visto na saída dmesg quando um novo dispositivo é detectado.



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


Insira um cartão Micro SD, conecte um monitor HDMI, teclado USB e cabo de alimentação para inicializar no Ubuntu Server no Raspberry Pi. O nome de usuário e a senha padrão são ubuntu.



Configuração do 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