系统时钟和硬件时钟同步

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值