Есть ли способ получить правильное системное время без NTP?

686
GTKoo

Я занимаюсь разработкой промышленного встраиваемого устройства на ядре ARMv7, 3.10.

Прежде всего, прежде чем перейти к основному вопросу, позвольте мне поговорить о аппаратном времени. Amlogic meson8b является основным модулем, поэтому я использовал «aml-rtc» в качестве основного rtc, но это было ненадежно. Итак, мы решили внешний чип RTC, и теперь DS1340 является основным RTC. после нескольких тестов, я думаю, что аппаратное время теперь довольно надежно.

Проблема в системном времени. Системное время работает быстрее, чем ч / б время около 2 ~ 3 сек / день. как вы знаете, существует множество решений, использующих NTP, но из-за особенностей нашего устройства оно отключено от Ethernet, поэтому я не могу использовать NTP.

Дело в том, что я хочу знать, есть ли какой-либо метод для получения правильного системного времени без NTP.

Спасибо, что прочитали эту ветку, и извините за мой плохой английский.


пс. Я подумал также периодически использовать вызов "hwclock --hctosys", но это может быть критической проблемой из-за сохранения файлов и журналов. например, LOG <1> сохранен в 12:05 системного времени, и если hwclock вернет систему в 12:04, LOG <1> может быть утерян из-за того, что новые журналы сохраняются после того, как «новое время» достигло 12:05. это всего лишь пример, и я также могу решить эту проблему, установив период "hwclock --hctosys" очень коротким, но я хотел бы оставить этот путь в качестве последнего средства.

2
Вы можете получить точное время через GPS. Zoredache 7 лет назад 0
Очевидно, у вас есть какой-то способ измерения ошибки (как вы говорите, она составляет около 2 ~ 3 сек / день). Некоторые (большинство? Все?) NTP (клиентские) программы работают за счет ускорения или замедления системных часов, чтобы синхронизировать их с внешним источником времени (а не перемещать часы вперед или назад). Некоторое программное обеспечение NTP позволяет вам настроить частоту появления ошибок, которую следует принимать, если он не может связаться с NTP-сервером; Вы можете установить это непосредственно в конфигурационном файле. … (Продолжение) G-Man 7 лет назад 0
(Продолжение) ... Альтернативой может быть подключение к Интернету на несколько дней, чтобы узнать, как быстро работают системные часы; затем посмотрите, правильно ли он продолжает настраивать часы после отключения. G-Man 7 лет назад 0
Если у вас нет локальных опорных часов с автономным питанием или вы не используете внешнюю ссылку, такую ​​как NTP, любая другая схема, вероятно, будет иметь по крайней мере один сценарий сбоя, из-за которого ваша система не будет иметь точное время. «Альтернативная» схема @ G-Man не сработает, потому что осцилляторы / кристаллы не так стабильны на длительных интервалах. Частота сети переменного тока (60 или 50 Гц) является более точной (т.е. она активно управляется). sawdust 7 лет назад 0

1 ответ на вопрос

1
Kamil Maciorowski

Edit

My original answer involves some programming. Maybe you can make the whole setup simpler with some other programming. On my Kubuntu man ntpdate shows that it uses adjtime() system call to gradually adjust the system clock. Consider a program that reads hardware clock and calls adjtime().


Original answer

From G-Man's comment:

Some (most? all?) NTP (client) software works by speeding up or slowing down the system clock so it synchronizes with the external time source.

If that is the right way to cope with log issues etc., maybe you can implement fake local NTP server. Let your fake NTP server do corrections to itself (e.g.) once an hour using hardware clock read hardware clock; then let NTP client adjust the system clock in a way that doesn't disturb logs and save files.

Похожие вопросы