努力成为linux kernel hacker的人李万鹏原创作品,为梦而战。转载请标明出处
http://blog.csdn.net/woshixingaaa/archive/2011/05/21/6436215.aspx
RTC(实时时钟)是一种典型的字符设备,作为一种字符设备驱动,RTC需要有file_operations中接口函数的实现,如open(),release(),read(),poll(),ioctl()等,而典型的ioctl包括RTC_SET_TIME,RTC_ALM_READ,RTC_ALM_SET,RTC_IRQP_SET,RTC_IRQP_READ等,这些对于所有的RTC是通用的,只有底层的具体实现是设备相关的。如下图可以清楚看出RTC子系统的框架。
下面介绍几个重要的数据结构:
rtc_device用来描述rtc设备:
rtc_time用于get time/set time:
描述报警状态的结构:
现在来看看rtc子系统是怎么注册上的:
在class.c文件函数rtc_init中生成rtc类,然后调用rtc-dev.c文件中的rtc_dev_init分配设备号。
在rtc-dev.c中声明了file_operations,因为rtc也是一个字符设备:
下面来分析rtc-s3c.c源码:
首先看模块的注册和撤销:
从上边的代码可以看出rtc driver作为platform_driver注册进内核,挂在platform_bus上。
在arch/arm/plat-s3c24xx/devs.c中定义了rtc的platform_device:
平台驱动中定义了probe函数,下面来看他的实现:
函数rtc_device_register在文件class.c中实现:
下边是s3c_rtc_enable函数的实现:
这里是电源管理部分,在挂起时保存TICNT的值,并禁止RTCCON,TICNT;在休眠的时候开启RTCCON,并恢复TICNT的值。
s3c_rtcops是RTC设备在RTC核心部分注册的对RTC设备进行操作的结构体,类似字符设备在驱动中的file_operations对字符设备进行操作的意思。
这两个是下边会用到的中断处理函数,产生一个时钟中断的时候就更新一下rtc_irq_data的值,也就是说只有当产生一个时钟中断(也就是一个滴答tick)才返回给用户一个时间。
首先来看打开和关闭函数:
RTC设备类关闭接口函数:
更新RTCALM寄存器的状态,是否使能:
更新TICNT寄存器的状态,是否使能:
更新TICNT节拍时间计数的值:
获取报警时间的值:
设置报警时间的值:
下面来分析一下是怎样获取和设置时间的:
通过用户空间的ioctl,在rtc-dev.c中实现了rtc_dev_ioctl,其中获取和设置时间如下:
通过copy_to_user和copy_from_user实现时间在内核空间与用户空间的传递。这里调用到的rtc_read_time和rtc_set_time在interface.c中实现:
可以看出他们调用了具体RTC设备驱动中的read_time和set_time函数,对应了s3c2410中的s3c_rtc_gettime和s3c_rtc_settime,这里使用的rtc_tm_to_time函数实现在rtclib.c中,/drivers/rtc/interface.c定义了可供其它模块访问的接口。
分享到:
相关推荐
Linux驱动修炼之道-RTC子系统框架与源码分析.pdf Linux驱动修炼之道-platform.pdf Linux驱动修炼之道-LCD背光与gpio控制.pdf Linux驱动修炼之道-INPUT子系统(下).pdf Linux驱动修炼之道-INPUT子系统(上...
linux系统驱动-RTC驱动-rv-8263-c7,自己写的rtc驱动源码,参考内核rtc-pcf85063源码移植
sinch-android-rtc-3.12.3源码,是一个很不错的Android源码,有兴趣的伙伴们抽时间可以看一下把。
面向开发者的libagora-rtc-sdk-jni.so资源文件,方便各位下载使用libagora-rtc-sdk-jni.so
修改linux内核3.2.0 的 rtc 驱动 rtc-pcf8563.c (源码位置: drivers/rtc), 实现 i2c 驱动层平台设备的动态生成, 而无需在板级初始化中注册 i2c 设备 资源包含两个文件: rtc-pcf8563.c 和 rtc-pcf8563内核源码.c, ...
260-RTC实时时钟DS1302液晶显示(51单片机C语言实例Proteus仿真和代码)260-RTC实时时钟DS1302液晶显示(51单片机C语言实例Proteus仿真和代码)260-RTC实时时钟DS1302液晶显示(51单片机C语言实例Proteus仿真和代码)260-...
linux下测试测试rtc功能完整性,确保rtc模块功能完好
STM32F10x-RTC 万年历
util-linux-ng-2.17源码(含fdisk) Here is a list of all documented files with brief descriptions: util-linux-ng-2.17.2/disk-utils/blockdev.c [code] util-linux-ng-2.17.2/disk-utils/cramfs.h [code] ...
七牛云---> 实时音视频云 html 的pili-rtc-web.js的下载
서버 : simple-rtc-signaling-server setting 서버 주소를 G.kt파일에서 수정. val SIGNAL_SERVER_ADDR = "ws://192.168.35.192:12345" MVVM Notify 방법은 RxJava를 이용 Dependency Injection Kodein 이용
linux RTC驱动资料整理,学习linuxRTC驱动就下载吧
Anroid实时时钟和闹钟系统--RTC-ALARM.pdf Anroid实时时钟和闹钟系统--RTC-ALARM.pdf
电子-RTC.rar,单片机/嵌入式STM32-F0/F1/F2
电子-RTC定时唤醒.rar,单片机/嵌入式STM8
rx8025t linux驱动一测试通过
C语言45-内部RTC时钟程序(STC32G-DEMO-CODE-220311kw)C语言45-内部RTC时钟程序(STC32G-DEMO-CODE-220311kw)C语言45-内部RTC时钟程序(STC32G-DEMO-CODE-220311kw)C语言45-内部RTC时钟程序(STC32G-DEMO-CODE-...
RTC linux驱动,很好用的RTC程序哦,
LINUX RTC 驱动相关资料 LINUX RTC 驱动相关资料