- 1、本文档共14页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
rtc驱动
linux RTC 驱动模型分析
RTC(real time clock)实时时钟,主要作用是给Linux系统提供时间。RTC因为是电池供电的,
所以掉电后时间不丢失。Linux内核把RTC用作“离线”的时间 与日期维护器。当Linux内核启动时,它
从RTC中读取时间与日期,作为基准值。在运行期间内核完全抛开RTC,以软件的形式维护系统的当前时
间与日 期,并在需要时将时间回写RTC芯片。另外如果RTC提供了IRQ中断并且可以定时,那么RTC还可
以作为内核睡眠时唤醒内核的闹钟。应用程序可以用 RTC提供的周期中断做一些周期的任务。linux有两
种rtc驱动的接口,一个是老的接口,专门用在PC机上的。另外一钟新接口是基于linux设备 驱动程序
的。这个新的接口创建了一个RTC驱动模型,实现了RTC的大部分基本功能。而底层驱动无须考虑一些功
能的实现,只需将自己注册的RTC核心中,其他工作由RTC核心来完成。下面分析RTC新接口的驱动模型。
一. 驱动模型结构
与RTC核心有关的文件有:
/drivers/rtc/class.c 这个文件向linux设备模型核心注册了一个类RTC,然后向驱
动程序提供了注册/注销接口
/drivers/rtc/rtc-dev.c 这个文件定义了基本的设备文件操作函数,如:open,read等
/drivers/rtc/interface.c 顾名思义,这个文件主要提供了用户程序与 RTC驱动的接口函
数,用户程序一般通过ioctl与RTC驱动交互,这里定义了每个ioctl命令需要调用的函数
/drivers/rtc/rtc-sysfs.c 与sysfs有关
/drivers/rtc/rtc-proc.c 与proc文件系统有关
/include/linux/rtc.h 定义了与RTC有关的数据结构
RTC驱动模型结构如下图:
二. 基本数据结构
1. struct rtc_device 结构
[cpp] view plaincopy
1 struct rtc_device
2 {
3 struct device dev;
4 struct module *owner;
5
6 int id;
7 char name[RTC_DEVICE_NAME_SIZE];
8
9 const struct rtc_class_ops *ops;
10 struct mutex ops_lock;
11
12 struct cdev char_dev;
13 unsigned long flags;
14
15 unsigned long irq_data;
16 spinlock_t irq_lock;
17 wait_queue_head_t irq_queue;
18 struct fasync_struct *async_queue;
19
20 struct rtc_task *irq_task;
21 spinlock_t irq_task_lock;
22 int irq_freq;
23 int max_user_freq;
24 #ifdef CONFIG_RTC_INTF_DEV_UIE_EMUL
25 struct work_struct uie_task;
26 struct timer_list uie_timer;
27 /* Those fields are protected by rtc-irq_lock */
28 unsigned int oldsecs;
29 unsigned int uie_irq_active:1;
30 unsigned int stop_uie_polling:1;
31 unsigned int uie_task_active:1;
32
文档评论(0)