Есть ли способ получить правильное системное время без NTP?
Я занимаюсь разработкой промышленного встраиваемого устройства на ядре 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" очень коротким, но я бы хотел оставить этот путь в качестве последнего средства.
1 ответ
редактировать
Мой оригинальный ответ связан с программированием. Может быть, вы можете сделать всю настройку проще с другим программированием. На моем Кубунту man ntpdate
показывает, что он использует adjtime()
Системный вызов, чтобы постепенно настроить системные часы. Рассмотрим программу, которая читает аппаратные часы и звонки adjtime()
,
Оригинальный ответ
Из комментария G-Man:
Некоторые (большинство? Все?) NTP (клиентские) программы работают, ускоряя или замедляя системные часы, чтобы синхронизировать их с внешним источником времени.
Если это правильный способ справиться с проблемами журнала и т. Д., Может быть, вы можете реализовать поддельный локальный NTP-сервер. Позвольте вашему поддельному NTP-серверу делать исправления для себя (например) один раз в час, используя аппаратные часы, считывающие аппаратные часы; затем пусть NTP клиент настроит системные часы так, чтобы не мешать журналам и сохранять файлы.