Как вы программно устанавливаете аппаратные часы в Linux?

Linux предоставляет вызов stime (2) для установки системного времени. Однако, хотя это позволит обновить системное время, он не устанавливает аппаратные часы BIOS в соответствие с новым системным временем.

Системы Linux обычно синхронизируют аппаратные часы с системным временем при выключении и с периодическими интервалами. Однако, если машина получает питание до одной из этих автоматических синхронизаций, время будет неправильным при перезапуске машины.

Как вы обеспечиваете обновление аппаратных часов при установке системного времени?

Ответ 1

Ознакомьтесь с man-страницей rtc для получения подробной информации, но если вы вошли в систему как пользователь root, примерно так:

    struct       rtc_time {
        int         tm_sec;      
        int         tm_min;      
        int         tm_hour;     
        int         tm_mday;     
        int         tm_mon;      
        int         tm_year;     
        int         tm_wday; /* unused */
        int         tm_yday; /* unused */
        int         tm_isdst;/* unused */
    };

struct rtc_time rt;
/* set your values here */
fd = open("/dev/rtc", O_RDONLY);
ioctl(fd, RTC_SET_TIME, &rt);
close(fd);

Ответ 2

После вызова stime() выполните следующее:

system("/sbin/hwclock --systohc");

Для получения дополнительной информации см. справочную страницу hwclock (8).

Ответ 3

Я также хотел бы указать, что аппаратные часы только точны до точки (я видел системы, которые потеряют/получат пару секунд в день).

Рассматривали ли вы настройку сетевого времени для синхронизации ваших часов с сервером времени?

Понятно, что эта синхронизация происходит не раньше, чем после запуска демона, поэтому синхронизация аппаратных часов также помогает между включением питания и точкой, которую синхронизирует время с сервером времени.

Ответ 4

Я бы начал с чтения исходного кода hwclock.

Ответ 5

Если текстовый редактор отличается от kubuntu (kate по умолчанию используется в редакторе), используйте свой собственный с помощью команды sudo в терминале.

  • запустить терминал
  • скопируйте и вставьте эту команду sudo kate /etc/default/rcS нажмите Enter
  • введите пароль пользователя (ваш пароль для входа) нажмите Enter
  • текстовый редактор откроется на рабочем столе
  • измените строку UTC=yes на UTC=no
  • и нажмите "Сохранить" (наверху панели вкладок текстового редактора).
  • перезагрузка