首先设置RTC时间的节点名称,此次使用的是海思的RTC时间节点“hi_rtc”。
const char *dev_name = "/dev/hi_rtc";
以下是设置时间的函数,包括RTC时间和系统时间:
int set_hwtime(rtc_time_t *rtc_time)
{
struct timeval val_time;
struct tm tm_time;
int fd = -1, ret = -1;
fd = open(dev_name, O_RDWR);
if (fd < 0) {
printf("open %s failed\n", dev_name);
return -1;
}
printf("set_hwtime: year=%d, month=%d, day=%d, hour=%d, min=%d, sec=%d\n",\
rtc_time->year, rtc_time->month, rtc_time->date, rtc_time->hour, rtc_time->minute, rtc_time->second);
ret = ioctl(fd, HI_RTC_SET_TIME, rtc_time);
if (ret < 0) {
printf("ioctl: HI_RTC_SET_TIME failed\n");
return -1;
}
tm_time.tm_year = rtc_time->year - 1900;
tm_time.tm_mon = rtc_time->month - 1;
tm_time.tm_mday = rtc_time->date;
tm_time.tm_hour = rtc_time->hour;
tm_time.tm_min = rtc_time->minute;
tm_time.tm_sec = rtc_time->second;
tm_time.tm_wday = rtc_time->weekday;
printf("set_systime: year=%d, month=%d, day=%d, hour=%d, min=%d, sec=%d\n",\
rtc_time->year, rtc_time->month, rtc_time->date, rtc_time->hour, rtc_time->minute, rtc_time->second);
val_time.tv_sec = mktime(&tm_time);
val_time.tv_usec = 0;
settimeofday(&val_time,NULL);
close(fd);
return 0;
}
rtc时间通过ioctl的方式,将时间写入。系统时间通过settimeofday函数,将时间写入。最后完成需确认打开的句柄是否关闭close(fd)。