硬件时钟调整与系统时钟一致:
//system("hwclock -w")
int SyncSystemClockToHw(void)
{
struct timeval tv;
struct tm tm_time;
int fd;
int ret = 0;
ret = access("/dev/rtc1",F_OK);
if(0 == ret)
{
fd = open("/dev/rtc1", O_WRONLY);//只写
if (fd < 0)
{
TIMER_INFO("open /dev/rtc0 failed!");
return -1;
}
}
else
{
fd = open("/dev/rtc0", O_WRONLY);
if (fd < 0)
{
TIMER_INFO("open /dev/rtc0 failed!");
return -1;
}
}
gettimeofday(&tv, NULL);
/* Prepare tm_time */
localtime_r((time_t*)&tv.tv_sec, &tm_time);
tm_time.tm_isdst = 0;
ioctl(fd, RTC_SET_TIME, &tm_time);
close(fd);
return 0;
//system("hwclock -w");
}
系统时钟调整与硬件时钟一致:
//system("hwclock -s")
int SyncHwClockToSystem(void)
{
struct timeval tv;
struct timezone tz;
struct tm tm_time;
int fd;
int ret = 0;
gettimeofday(&tv, &tz);
ret = access("/dev/rtc1",F_OK);
if(0 == ret)
{
fd = open("/dev/rtc1", O_WRONLY);//只写
if (fd < 0)
{
TIMER_INFO("open /dev/rtc0 failed!");
return -1;
}
}
else
{
fd = open("/dev/rtc0", O_WRONLY);
if (fd < 0)
{
TIMER_INFO("open /dev/rtc0 failed!");
return -1;
}
}
memset(&tm_time, 0, sizeof(tm_time));
ioctl(fd, RTC_RD_TIME, &tm_time);
tm_time.tm_isdst = -1; /* "not known" */
close(fd);
tv.tv_sec = mktime(&tm_time);
tv.tv_usec = 0;
if (settimeofday(&tv, &tz))
{
TIMER_INFO("settimeofday failed!");
return -1;
}
return 0;
//system("hwclock -s");
}