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

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了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值