Я пытаюсь выяснить, как 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?