Chinaunix首页 | 论坛 | 博客
  • 博客访问: 110658
  • 博文数量: 18
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 260
  • 用 户 组: 普通用户
  • 注册时间: 2015-03-19 17:27
个人简介

linux Driver工程师

文章分类

全部博文(18)

文章存档

2016年(1)

2015年(17)

我的朋友

分类: LINUX

2015-07-10 18:38:13

RTC驱动文件位于linux-3.4\drivers\rtc
以rtc-sunxi.c为例,下面来分析RTC驱动文件中都有哪些东东
首先,当然是module_init:

点击(此处)折叠或打开

  1. static int __init sunxi_rtc_init(void)
  2. {
  3.     platform_device_register(&sunxi_device_rtc);
  4.     return platform_driver_register(&sunxi_rtc_driver);
  5. }
__init函数中只做了2件事情:注册platform_device 和 platform_driver。那么RTC就是通过platform总线来传输信息的。
接下来,顺势看看被注册的sunxi_device_rtc以及sunxi_rtc_driver分别是什么

点击(此处)折叠或打开

  1. struct platform_device sunxi_device_rtc = {
  2.     .name        = "sunxi-rtc",
  3.     .id        = -1,
  4.     .num_resources    = ARRAY_SIZE(sunxi_rtc_res),
  5.     .resource    = sunxi_rtc_res,
  6. };

  7. static struct platform_driver sunxi_rtc_driver = {
  8.     .probe        = sunxi_rtc_probe,
  9.     .remove        = __exit_p(sunxi_rtc_remove),
  10.     .driver        = {
  11.         .name    = "sunxi-rtc",
  12.         .owner    = THIS_MODULE,
  13.     },
  14. };
实现了最基本的device和driver的编写,非常简单。

本驱动文件总共有4个比较关键的结构,除了上面的device和driver,还有,
Resource:resource我还没有理解,不太清楚上面时候会调用到RTC resource

点击(此处)折叠或打开

  1. /*share the irq no. with timer2*/
  2. static struct resource sunxi_rtc_res[] = {
  3.     [0] = {
  4.         .start    = SUNXI_IRQ_RALARM0,
  5.         .end    = SUNXI_IRQ_RALARM0,
  6.         .flags    = IORESOURCE_IRQ,
  7.     },
  8. };

Class_ops: 其中的.read_alarm等函数实现了操作RTC函数的接口

点击(此处)折叠或打开

  1. static const struct rtc_class_ops sunxi_rtcops = {
  2.     .read_time    = sunxi_rtc_gettime,
  3.     .set_time    = sunxi_rtc_settime,
  4. #ifdef SUNXI_ALARM
  5.     .read_alarm    = sunxi_rtc_getalarm,
  6.     .set_alarm    = sunxi_rtc_setalarm,
  7.     .alarm_irq_enable = sunxi_rtc_alarm_irq_enable,
  8. #endif
  9. };
这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) |
给主人留下些什么吧!~~