打印

关于嵌入式linux RTC的一些整理

[复制链接]
130|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
RTC的驱动,一般是放于drivers/char目录下

对应的设备为/dev/rtc,浏览了下busybox的hwclock源码发现其就是open /dev/rtc,然后ioctl来读写RTC

一个相当简单的例子,或者说是结构更妥些

static void rtc_read_time(struct rtc_time *tm)

{

// 这里实现从RTC读出放到tm

}

static int rtc_set_time(struct rtc_time *tm)

{

// 这里实现把tm写入RTC

}



// RTC的操作结构

static struct rtc_ops rtc_ops = {

.owner = THIS_MODULE,

.read_time = rtc_read_time,

.set_time = rtc_set_time,

};



// RTC初始化

static int __init rtc_init(void)

{

struct timespec tv;

struct rtc_time tm;

register_rtc (&rtc_ops); // 注册RTC操作

// 读出RTC时间到系统,相当于系统时间与RTC同步

rtc_read_time(&tm);

tv.tv_nsec = 0;

tv.tv_sec = mktime(tm.tm_year + 1900,

tm.tm_mon + 1,

tm.tm_mday,

tm.tm_hour,

tm.tm_min,

tm.tm_sec);

do_settimeofday(&tv);

return 0;

}

// 模块放入系统

module_init(rtc_init);





修改系统时间

date -s '2010/11/25 15:30:00'



date 112515302010.00



把系统时间写入RTC

hwclock -w



读RTC时间到系统时间

hwclock -s



显示RTC时间

hwclock -r



如果发现系统时间比RTC的时间多或少刚才是时区的数量,那就是时间的问题

可以通过tzselect进行重新设置

也可以通过命令来更改:

ln -s /etc/localtime /usr/share/zoneinfo/Asia/Shanghai

由此也可以看到,关键点在/etc/localtime文件

如果想去掉时区,也就是去掉系统时间与RTC的时差,可以从文件系统里删除/etc

/localtime就OK了

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

437

主题

437

帖子

0

粉丝