Alvaros
.
- Регистрация
- 14.05.16
- Сообщения
- 21.452
- Реакции
- 101
- Репутация
- 204
В этой статье я расскажу, как собрать Stratum 1 NTP сервер на Raspberry PI для синхронизации времени за скромную сумму и навсегда забыть о проблемах, связанных с не совпадающим временем на всех ваших устройствах. А самое главное, он будет давать результат на два порядка точнее, чем обычный сервер.
В
Для самого точного приема сигнала времени нужен приёмник GPS / ГЛОНАСС с выходом PPS. Дело однако в том, что на российском рынке не просто раздобыть устройство с такими характеристиками по доступной цене. Много таких
Полный список протестированного GPS оборудования можно
4* Отличная производительность: gpsd распознает приёмник быстро и надежно, а отчеты сформировано полностью и правильно.
3* Хорошая производительность: gpsd с незначительными проблемами или задержкой распознаёт устройства, но отчеты сформировано полностью и правильно.
Если вас не пугает цена этих моделей, а также нет большого желания возиться с железками, можете не читать дальше. Приемник, подключенный к серверу по USB, или RS232 интерфейсу обеспечит гораздо большую точность определения времени, чем NTP сервер, работающий по tcp/ip. Но если путь самурая вам не чужд, тогда давайте собирать свой Raspberry PI NTP сервер с GPS синхронизацией времени.
Собираем Raspberry PI
Итак: берем следующие компоненты для нашего микро сервера.
Вообще-то, u-blox NEO-M8 оснащен UART интерфейсом, но для PPS выхода необходимо припаять pin-3 на GPS модуле к соответствующему GPIO коннектору на плате Raspberri Pi. Модуль швейцарской компании завоевал популярность у специалистов и это не случайно, характеристики говорят сами за себя.
В такой конфигурации с новейшим оборудованием примерная общая цена Raspberry PI в собранном виде составит 9330 руб. Можно сэкономить, купив Raspberry PI 3, или четверку с 2 GiB ОЗУ. Можно еще сэкономить на GPS чипе, u-blox NEO-6M с антенной стоит около 650 руб. Тогда цена NTP сервера упадет до 5500 руб.
GPS/Глонасс модуль UBLOX NEO 8M
Может возникнуть вопрос, для чего нужны все эти капиталовложения и какую точность обеспечивает тот, или иной способ синхронизации времени. Небольшая сводная табличка для справки.
Во многих дистрибутивах 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 приёмник с PPS выходом по USB мы получаем 300-кратное повышение точности синхронизации времени. Чтение с чипа GPS на плате в режиме KPPS даёт прирост точности еще на два порядка.
Будем откровенны — не все из нас умеют пользоваться паяльником, далеко не каждый пользуется этим инструментом регулярно. В таком случае имеет смысл поискать модуль GPS, не требующий пайки контактов.
Raspberry Pi GPS/RTC Expansion Board
Таких плат
Установка ОС
Существует Raspberry PI OS, а. k. a. Raspbian, можно просто пойти
Существует такая точка зрения, что на 64-битная ОС неоправдана на Raspberry PI 4, так как нет возможности обеспечить прирост производительности из-за особенностей архитектуры и сборки. Мне эта точка зрения представляется сомнительной, об этом уже
Существует
Инвентарь для установки:
Следующий этап — запись установочного образа на 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-клавиатуру, и кабель питания загружаетесь в Ubuntu Server на Raspberry Pi. Имя пользователя и пароль по умолчанию ubuntu.
Настройка NTP сервера
В
You must be registered for see links
, посвященной синхронизации времени по радио и СРНС (системы радионавигационной связи), я не успел рассказать про выбор приёмника GPS / ГЛОНАСС с выходом PPS. Между тем от этого зависит точность приёма сигнала, величина может составить от одной миллисекунды до нескольких микросекунд и зачастую это имеет решающее значение.Для самого точного приема сигнала времени нужен приёмник GPS / ГЛОНАСС с выходом PPS. Дело однако в том, что на российском рынке не просто раздобыть устройство с такими характеристиками по доступной цене. Много таких
You must be registered for see links
давно уже перестали выпускать, а в заброшенных интернет магазинах с версткой 1990-х остались лишь их описания с предложением подписаться на уведомление при поступлении товара.
Полный список протестированного GPS оборудования можно
You must be registered for see links
на GitLab ресурсе NTPSec. Не трудно заметить, что незначительное число представленных в списке устройств имеют отметку 3-4 звезды и опцию PPS. Таким образом, в шорт-лист попадают следующие приёмники.- Garmin GPS-18, не USB *** (приблизительная цена 10 тыс. р.)
- 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* Отличная производительность: gpsd распознает приёмник быстро и надежно, а отчеты сформировано полностью и правильно.
3* Хорошая производительность: gpsd с незначительными проблемами или задержкой распознаёт устройства, но отчеты сформировано полностью и правильно.
Если вас не пугает цена этих моделей, а также нет большого желания возиться с железками, можете не читать дальше. Приемник, подключенный к серверу по USB, или RS232 интерфейсу обеспечит гораздо большую точность определения времени, чем NTP сервер, работающий по tcp/ip. Но если путь самурая вам не чужд, тогда давайте собирать свой Raspberry PI NTP сервер с GPS синхронизацией времени.
Собираем Raspberry PI
Итак: берем следующие компоненты для нашего микро сервера.
- Плата Raspberry Pi 4 Model B, 4 GiB ОЗУ (6200 руб.);
- Корпус, например
You must be registered for see links(890 руб.);
- Micro SD карта на 32 GiB, можно и 16 GiB; (540 руб.)
- GPS модуль на чипе u-blox NEO-M8 (1700 руб. с антенной);
- GPS антенна на 15 dB;
- Паяльник.
Вообще-то, u-blox NEO-M8 оснащен UART интерфейсом, но для PPS выхода необходимо припаять pin-3 на GPS модуле к соответствующему GPIO коннектору на плате Raspberri Pi. Модуль швейцарской компании завоевал популярность у специалистов и это не случайно, характеристики говорят сами за себя.
- Поддерживаемые СРНС: BeiDou, Galileo, GNSS; GPS/QZSS, GLONASS;
- Напряжение питания: 2.7...3.6 В;
- Интерфейсы: UART, USB, SPI, DDC, I2C;
- Поддерживаемые протоколы: NMEA 0.183 version 4.0, UBX (binary), RTCM 2.3;
- Чувствительность при обнаружении: -167 дБм;
- Чувствительность при слежении: -160 дБм;
- Время холодного старта: 26 с;
- Время горячего старта: 1.5 с;
- Потребляемая мощность: 35 мВт;
- Рабочая температура: -40...+85 °С;
- Размеры: 16х12.2х2.4 мм
В такой конфигурации с новейшим оборудованием примерная общая цена Raspberry PI в собранном виде составит 9330 руб. Можно сэкономить, купив Raspberry PI 3, или четверку с 2 GiB ОЗУ. Можно еще сэкономить на GPS чипе, u-blox NEO-6M с антенной стоит около 650 руб. Тогда цена NTP сервера упадет до 5500 руб.
GPS/Глонасс модуль UBLOX NEO 8M
Может возникнуть вопрос, для чего нужны все эти капиталовложения и какую точность обеспечивает тот, или иной способ синхронизации времени. Небольшая сводная табличка для справки.
Источник сигнала времени | Погрешность |
GPS с атомными часами | ±50 nSec |
KPPS | ±1 μSec |
PPS | ±5 μSec |
Интерфейс USB 1.1 | ±1 mSec |
Интерфейс USB 2.0 | ±100 μSec (100000 nSec) |
NTP по сети | ~±30 mSec |
You must be registered for see links
(KPPS) отличается от PPS тем, что использует функцию ядра Linux / Unix для точной временной отметки изменения состояния в строке PPS. Обычный же PPS реализован в user-space. Если ядро Linux поддерживает KPPS через API RFC 2783, 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 приёмник с PPS выходом по USB мы получаем 300-кратное повышение точности синхронизации времени. Чтение с чипа GPS на плате в режиме KPPS даёт прирост точности еще на два порядка.
Будем откровенны — не все из нас умеют пользоваться паяльником, далеко не каждый пользуется этим инструментом регулярно. В таком случае имеет смысл поискать модуль GPS, не требующий пайки контактов.
Raspberry Pi GPS/RTC Expansion Board
Таких плат
You must be registered for see links
, и стоят они дорого. Разницу в цене вполне окупит приобретение паяльника и трудозатраты.Установка ОС
Существует Raspberry PI OS, а. k. a. Raspbian, можно просто пойти
You must be registered for see links
, скачать свежую версию и установить её. Многие так и делают, но давайте вспомним, что Raspberry PI 4 поддерживает 64-битную операционную систему, в то время как Raspberry PI OS пока имеет лишь 32-битные модификации Debian Linux для архитектуры Arm.Существует такая точка зрения, что на 64-битная ОС неоправдана на Raspberry PI 4, так как нет возможности обеспечить прирост производительности из-за особенностей архитектуры и сборки. Мне эта точка зрения представляется сомнительной, об этом уже
You must be registered for see links
на Хабре — 64-битная ОС быстрее.Существует
You must be registered for see links
для архитектуры arm64, однако
You must be registered for see links
Убунту для Raspberry PI имеет внятную страницу и инструкцию. На странице находим дополнительное подтверждение тому, что лучше выбрать 64-битную ОС.
Инвентарь для установки:
- Raspberry Pi 4;
- USB-C кабель питания для Pi 4;
- 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-клавиатуру, и кабель питания загружаетесь в Ubuntu Server на Raspberry Pi. Имя пользователя и пароль по умолчанию ubuntu.
Настройка NTP сервера
- Если Raspberry PI включен в консольном режиме (headless), то для начала необходимо определить IP адрес устройства. С рабочей станции наберите следующую команду.
(1:1151)$ arp -na | grep -i "dc:a6:32"
Ели же Pi подключен к HDMI монитору и USB клавиатуре, пропустите шаги 1-2 и переходите сразу к установке пакетов. - Подключитесь по ssh
(1:1152)$ ssh ubuntu@
- Установите необходимые пакеты.
user@server ~$ sudo apt-get install aptitude
user@server ~$ sudo aptitude install wpasupplicant gpsd chrony
-
You must be registered for see linksWi-Fi соединение с помощью wpasupplicant.
- В 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
- Установите необходимые пакеты.



