12

Linux 提供 stime(2) 调用来设置系统时间。然而,虽然这会更新系统时间,但它不会将 BIOS 硬件时钟设置为与新系统时间相匹配。

Linux 系统通常在关机时和定期间隔将硬件时钟与系统时间同步。但是,如果机器在这些自动同步之一之前重新启动,则机器重新启动时的时间将不正确。

设置系统时间时如何确保硬件时钟得到更新?

4

5 回答 5

16

查看 rtc 手册页以获取详细信息,但如果您以 root 身份登录,则如下所示:

#include <linux/rtc.h>
#include <sys/ioctl.h>


    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 */
    };

int fd;
struct rtc_time rt;
/* set your values here */
fd = open("/dev/rtc", O_RDONLY);
ioctl(fd, RTC_SET_TIME, &rt);
close(fd);
于 2008-10-14T17:59:43.810 回答
8

调用 stime() 后,执行以下操作:

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

有关更多信息,请参见 hwclock(8) 手册页。

于 2008-10-14T17:43:14.170 回答
2

我还想指出,硬件时钟只能精确到一个点(我见过的系统每天会丢失/增加几秒钟)。

您是否考虑过设置网络时间守护程序以将您的时钟与时间服务器同步?

诚然,这种同步直到守护程序启动后才会发生,因此保持硬件时钟同步也有助于在开机和时间守护程序与时间服务器同步的点之间。

于 2008-10-14T17:48:49.447 回答
2

我将从阅读 hwclock 的源代码开始。

于 2008-10-14T17:52:19.190 回答
-2

如果文本编辑器与 kubuntu 不同(kate 是编辑器中的默认值),请sudo在终端中使用您自己的命令。

  1. 运行终端
  2. 复制并粘贴此命令 sudo kate /etc/default/rcSEnter
  3. 输入用户密码(您的登录密码)按Enter
  4. 文本编辑器将在桌面上打开
  5. 将行更改UTC=yesUTC=no
  6. 并单击保存(在文本编辑器选项卡栏的顶部)
  7. 重启
于 2010-10-30T08:03:42.570 回答