努力成为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源码移植
面向开发者的libagora-rtc-sdk-jni.so资源文件,方便各位下载使用libagora-rtc-sdk-jni.so
2. **RTC API**:Linux内核提供了一套RTC相关的系统调用和用户空间API,如`rtc-time-to-seconds()`和`rtc(seconds_to_tm)`,用于将时间转换为用户友好的格式。测试需确保这些API在各种场景下都能正确工作。 3. **...
《Sinch Android RTC 3.12.3 源码深度解析》 Sinch Android RTC 3.12.3 是一个强大的实时通信库,专为Android平台设计,提供了丰富的功能,包括语音通话、视频通话以及即时消息传递。这款开源源码对于Android开发者...
1. rtc-class:Linux内核中的rtc-core子系统提供了RTC设备的基本框架,包括驱动注册、设备初始化、时间读写等通用函数。 2. 设备驱动层:每个特定硬件的RTC驱动实现,如i2c、spi或其他总线上的RTC芯片,需要在rtc-...
修改linux内核3.2.0 的 rtc 驱动 rtc-pcf8563.c (源码位置: drivers/rtc), 实现 i2c 驱动层平台设备的动态生成, 而无需在板级初始化中注册 i2c 设备 资源包含两个文件: rtc-pcf8563.c 和 rtc-pcf8563内核源码.c, ...
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] ...
RTC(Real-Time Clock)是计算机系统...通过分析和理解"rtc-rx8025t.c"源代码,开发者可以深入学习Linux驱动开发,尤其是RTC驱动的实现细节,这对于在Linux系统中开发或移植其他RTC芯片的驱动程序具有重要的参考价值。
260-RTC实时时钟DS1302液晶显示(51单片机C语言实例Proteus仿真和代码)260-RTC实时时钟DS1302液晶显示(51单片机C语言实例Proteus仿真和代码)260-RTC实时时钟DS1302液晶显示(51单片机C语言实例Proteus仿真和代码)260-...
七牛云---> 实时音视频云 html 的pili-rtc-web.js的下载
在Linux系统中,RTC(Real-Time Clock)驱动是操作系统与硬件时钟进行交互的重要组成部分,它负责维护系统的时间。在本话题中,我们将深入探讨如何在Linux环境下针对DS1338芯片实现RTC驱动,以及它所涉及的核心功能...
RTC1339驱动需要实现Linux内核的RTC子系统的接口,包括`rtc-class`框架提供的函数,如`rtc_read_time`、`rtc_set_time`等。通过`insmod`或`modprobe`命令可以加载RTC1339驱动模块,使系统能够识别并控制RTC1339芯片...
用户空间API允许应用程序通过标准的系统调用(如`rtc-time`和`rtc-read`)访问RTC,而内核空间驱动则负责与硬件进行低级别的交互。 三、RTC驱动接口 Linux内核为RTC驱动定义了一套标准的接口,包括初始化、读取时间...
在描述中提到的“自写Rx8025驱动For Linux”,可能是指开发者根据RX8025的数据手册和Linux内核的RTC子系统规范,编写了一版定制的驱动程序。这通常涉及理解RTC设备模型,定义设备节点,注册和注销设备,以及实现读写...
在IT行业中,尤其是在嵌入式系统或物联网(IoT)领域,"test-闪灯,串口收发,按键,中断 - RS485-RTC_监控类_源码"这个标题涵盖了多个关键知识点,这些都是构建智能设备或监控系统的基础模块。让我们逐一深入探讨这些...
서버 : 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子系统负责管理和驱动各种RTC设备。在Linux 2.4.20版本中,RTC驱动程序通常包括初始化、读写时间、设置中断等功能。描述中提到的源码应该包含了DS1302的驱动实现,使系统能够与该RTC芯片交互,获取...
在allwinner平台下调通的 linux下hym8563、bm8563 RTC驱动、8563 datesheet资料 ,。
通过分析和学习这个驱动,开发者可以了解如何在Linux系统下自定义RTC驱动,这对于那些需要在嵌入式设备上使用特定RTC芯片的项目非常有用。 "rtc"可能是编译生成的驱动程序模块,或者是一个包含示例代码的目录。而...