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

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

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

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

5 ответов

Решение

За подробностями обращайтесь к 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);

После вызова stime() сделайте это:

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

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

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

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

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

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

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

  1. запустить терминал
  2. скопируйте и вставьте эту командуsudo kate /etc/default/rcS нажмите Enter
  3. введите пароль пользователя (ваш логин) нажмите Enter
  4. текстовый редактор откроется на рабочем столе
  5. изменить линию UTC=yes в UTC=no
  6. и нажмите Сохранить (вверху панели вкладок текстового редактора)
  7. перезагружать
Другие вопросы по тегам