系统时钟和硬件时钟同步

硬件时钟调整与系统时钟一致:

//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");
}

posted on 2015-01-22 16:34  胡永光  阅读(501)  评论(0编辑  收藏  举报

导航