RTC驱动文件位于linux-3.4\drivers\rtc
以rtc-sunxi.c为例,下面来分析RTC驱动文件中都有哪些东东
首先,当然是module_init:
-
static int __init sunxi_rtc_init(void)
-
{
-
platform_device_register(&sunxi_device_rtc);
-
return platform_driver_register(&sunxi_rtc_driver);
-
}
__init函数中只做了2件事情:注册platform_device 和
platform_driver。那么RTC就是通过platform总线来传输信息的。
接下来,顺势看看被注册的sunxi_device_rtc以及sunxi_rtc_driver分别是什么:
-
struct platform_device sunxi_device_rtc = {
-
.name = "sunxi-rtc",
-
.id = -1,
-
.num_resources = ARRAY_SIZE(sunxi_rtc_res),
-
.resource = sunxi_rtc_res,
-
};
-
-
static struct platform_driver sunxi_rtc_driver = {
-
.probe = sunxi_rtc_probe,
-
.remove = __exit_p(sunxi_rtc_remove),
-
.driver = {
-
.name = "sunxi-rtc",
-
.owner = THIS_MODULE,
-
},
-
};
实现了最基本的device和driver的编写,非常简单。
本驱动文件总共有4个比较关键的结构,除了上面的device和driver,还有,
Resource:resource我还没有理解,不太清楚上面时候会调用到RTC resource
-
/*share the irq no. with timer2*/
-
static struct resource sunxi_rtc_res[] = {
-
[0] = {
-
.start = SUNXI_IRQ_RALARM0,
-
.end = SUNXI_IRQ_RALARM0,
-
.flags = IORESOURCE_IRQ,
-
},
-
};
Class_ops: 其中的.read_alarm等函数实现了操作RTC函数的接口
-
static const struct rtc_class_ops sunxi_rtcops = {
-
.read_time = sunxi_rtc_gettime,
-
.set_time = sunxi_rtc_settime,
-
#ifdef SUNXI_ALARM
-
.read_alarm = sunxi_rtc_getalarm,
-
.set_alarm = sunxi_rtc_setalarm,
-
.alarm_irq_enable = sunxi_rtc_alarm_irq_enable,
-
#endif
-
};
这4个数据结构中的成员函数都是在该 RTC驱动文件中实现的。那么这个驱动文件的内容大致就是这些。
【基础知识】
1.date,Linux中用于显示/修改系统时间的一个命令。
2.Linux的RTC驱动实现完了后,一般是默认的是一个普通的字符型设备,或者一个misc设备,也可以是一个平台设备。
对应地,如果insomod驱动后,或者build-in到kernel后,对应的设备一般是
/dev/rtc 或 /dev/rtc0 或者 /dev/misc/rtc
3.hwclock,见名知意,hw clock, hardware clock,硬件(RTC)时钟。
对于hwclock,看看具体什么用途和用法(此处是嵌入式开发中用到的用busybox中的hwclock):
阅读(2217) | 评论(0) | 转发(0) |