系统时钟和硬件时钟同步
硬件时钟调整与系统时钟一致:
//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"); }