Когда и как Linux эффективно устанавливает часы HW? - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь выяснить, как Linux (Ubuntu 16.04) синхронизирует часы HW с системными часами.

Для фона у меня есть встроенная система без доступа в Интернет, поэтому мы дисциплинируемсистемные часы, используя ntpd с использованием источника GPS. Однако аппаратные часы, похоже, никогда не записываются, поэтому любое накопленное смещение остается после перезагрузки и до тех пор, пока сигнал GPS не станет снова доступным.

Сначала я проверил файл /etc/init.d/hwclock.sh и он предполагает, что часы HW должныбыть настроен на выключение системы, но это не происходит (нет ссылки на файлы журналов), хотя я не совсем понимаю, почему он не вызывается.

Я вижу сообщение: setting system clock to <UTC DATE> во время загрузки, ноэто происходит из модуля ядра rtc_cmos. Поскольку этот модуль, кажется, используется, для проверки кода я вижу файл htctosys.c (который, кажется, работает), а также файл systohc.c с rtc_set_ntp_time() функция. Эта функция, кажется, вызывается только из sync_rtc_clock() в time / ntp.c , но откуда эта функция вызывается? . Кажется, нам его не вызывают.

На странице руководства для утилиты hwclock несколько раз упоминается 11-минутный режим . Очевидно, что если ядро ​​настроено с включенным CONFIG_RTC_SYSTOHC, оно должно время от времени устанавливать часы HW, но это не работает в моей целевой системе .-

Затем я обнаружил, что часы -util.c файл из systemd содержит функцию clock_set_hwclock() с кодом низкого уровня для установки аппаратных часов (вызывается из timedated.c ). Кажется, это тоже не относится.

Когда и как в этом сценарии обновляются часы HW?

...