RTC(Real-TimeClock)实时时钟为操作系统提供了一个可靠的时间,并且在断电的情况下,RTC实时时钟也可以通过电池供电,一直运行下去。本文以飞凌嵌入式的OK4418-C为例,介绍在Android实时时钟框架。

整体流程介绍
由于实时时钟子系统,硬件抽象层、框架层、应用层、谷歌的android开发包都已经做好,因此此接口的主要设计工作在于rx8010芯片的驱动的实现,包括芯片的初始化及配置时间,读取时间及接入实时时钟子系统等功能。

板子上电以后,内核驱动会初始化rtc芯片rx8010,并生成/dev/rtc0设备文件,注册其设置时间等操作函数。

进入android系统后,点击设置界面的设置时间,应用程序会调用框架层闹钟管理服务的设置时间的接口,框架层会调用硬件抽象层的设置时间接口,硬件抽象层会打开/dev/rtc0设备文件并调用其ioctl函数,内核层实时时钟子系统将调用实时时钟芯片驱动的设置时间函数,内核驱动层实时时钟芯片驱动调用设置时间的函数,设置实时时钟芯片的对应寄存器。

流程图说明

成/dev/rtc0设备文件,注册其设置时间等操作函数。进入android系统后,点击设置界面的设置时间,应用程序会调用框架层闹钟管理服务的设置时间的接口,框架层会调用硬件抽象层的设置时间接口,硬件抽象层会打开/dev/rtc0设备文件并调用其ioctl函数,内核层实时时钟子系统将调用实时时钟芯片驱动的设置时间函数,内核驱动层实时时钟芯片驱动调用设置时间的函数,设置实时时钟芯片的对应寄存器。

基本逻辑图如下:

板子上电以后,内核驱动会初始化rtc芯片rx8010,并生成/dev/rtc0设备文件,注册其设置时间等操作函数。

进入android系统后,点击设置界面的设置时间,应用程序会调用框架层闹钟管理服务的设置时间的接口,框架层会调用硬件抽象层的设置时间接口,硬件抽象层会打开/dev/rtc0设备文件并调用其ioctl函数,内核层实时时钟子系统将调用实时时钟芯片驱动的设置时间函数,内核驱动层实时时钟芯片驱动调用设置时间的函数,设置实时时钟芯片的对应寄存器。

流程图中各个部分涉及到的函数名称及功能

■ 应用层函数:

packages/apps/Settings/src/com/android/settings/DateTimeSettings.java文件

static void setTime(Context context, int hourOfDay, int minute)

功能:设置Calendar的时分秒毫秒信息,并调用系统的闹钟服务的设置时间setTime的接口。

■ 系统框架层函数:

./frameworks/base/services/core/java/com/android/server/AlarmManagerService.java文件

public boolean setTime(long millis)

功能:检查权限及是否存在alarm驱动,并调用setKernelTime(mNativeData,millis)接口。

■ 硬件抽象层函数:

frameworks/base/services/core/jni/com_android_server_AlarmManagerService.cpp文件

static jint android_server_AlarmManagerService_setKernelTime(JNIEnv*,jobject, jlong nativeData, jlong millis)

功能:将毫秒转换成秒及微秒并调用setTime接口。

frameworks/base/services/core/jni/com_android_server_AlarmManagerService.cpp文件

int AlarmImplTimerFd::setTime(struct timeval *tv)

功能:打开的内核生成的/dev/rtc0设备文件,并调用其ioctl接口。

■ 内核驱动层函数:

linux/kernel/kernel-3.4.39/drivers/rtc/rtc-dev.c文件

static long rtc_dev_ioctl(struct file *file,

unsigned int cmd, unsigned long arg)

功能:根据ioctl的相关条件做出对应的rtc函数的调用。

linux/kernel/kernel-3.4.39/drivers/rtc/interface.c文件

int rtc_set_time(struct rtc_device *rtc, struct rtc_time *tm)

功能:调用rtc设备操作函数的set_time函数。

linux/kernel/kernel-3.4.39/drivers/rtc/rtc-rx8010.c文件

static int rx8010_probe(struct i2c_client *client, const structi2c_device_id *id)

功能:初始化rx8010芯片,并注册生成/dev/rtc0设备。

linux/kernel/kernel-3.4.39/drivers/rtc/rtc-rx8010.c文件

static int rx8010_set_time(struct device *dev, struct rtc_time *dt)

功能:此为rtc操作函数set_time对应的函数,作用是将时间值写入rx8010寄存器。

实际运行效果

板子上电,系统起来以后,选择“->“Settings”->“Date&time”,在这里可以更改日期和时间,并且在您断电之后时间仍可同步更新(确保板子上已经安装了纽扣电池)。

注意:此步测试一定要先去掉“Automaticdate & time”以及“Automatictime zone”两部分的勾选,否则无法准确测试RTC功能,如下:

点击“set date”和“set time”设置好之后,就可以给板子断电再上电,再次进入时间设置界面,就会看到时间已经同步更新了。

S5P4418 Android实时时钟框架介绍相关推荐

  1. Spark Streaming实时计算框架介绍

    随着大数据的发展,人们对大数据的处理要求也越来越高,原有的批处理框架MapReduce适合离线计算,却无法满足实时性要求较高的业务,如实时推荐.用户行为分析等. Spark Streaming是建立在 ...

  2. 2018年android常用的框架介绍

    转载地址:http://blog.csdn.net/RuingMan/article/details/73546718 http://www.cnblogs.com/jincheng-yangchao ...

  3. Android主流HOOK框架介绍与应用--游戏破解游戏外挂的必杀技

    概述 使用HOOK方案主要是在分析的时候会经常用到,虽然二次打包重新修改代码也可以做到,但是一方面效率低,另一方面如果APP有校验的逻辑就需要进一步绕过,总体还是比较费时费力.所以,通过动态HOOK的 ...

  4. Android GUI系统框架介绍

    这个又是内部技术分享时准备的PPT,Android GUI框架是一个非常庞大的系统,也是Android最重要的系统之一,其决定了一个Android界面究竟如何显示出来,显示效果/效率怎样,也一直是An ...

  5. Android系统Audio框架介绍(一)

    原址 音频基础知识 声音有哪些重要属性呢? 响度(Loudness) 响度就是人类可以感知到的各种声音的大小,也就是音量.响度与声波的振幅有直接关系. 音调(Pitch) 音调与声音的频率有关系,当声 ...

  6. Android系统Audio框架介绍

    音频基础知识 声音有哪些重要属性呢? 响度(Loudness) 响度就是人类可以感知到的各种声音的大小,也就是音量.响度与声波的振幅有直接关系. 音调(Pitch) 音调与声音的频率有关系,当声音的频 ...

  7. Android显示系统设计框架介绍

    1. Linux内核提供了统一的framebuffer显示驱动,设备节点/dev/graphics/fb*或者/dev/fb*,以fb0表示第一个显示屏,当前实现中只用到了一个显示屏. 2. Andr ...

  8. RTC实时时钟(STM32)

    Cortex-M4-实时时钟 实时时钟概述 实时时钟介绍 英文缩写:RTC.显示年.月.日.时.分.秒.星期,自动计算闰年,能够区分每个月的天数. RTC特点:能从RTC获取到具体的日期时间,断掉后再 ...

  9. Arduino实时时钟设计(TM1637数码管显示)

    设计者:STCode(公众号同名) 1.实时时钟功能介绍 该设计利用DS1302获取时间数据,用4位led数码管显示模块显示当前的年月日信息,并且设计有一个按键,可以切换时间数据. 2. 使用主要器件 ...

  10. Android优秀开源框架集

    Android优秀开源框架介绍 开篇 网络请求框架 1. okhttp 2. retrofit 3. android-async-http android图表框架 4. MPAndroidChart ...

最新文章

  1. 交换机应用寻找10个完美的因素
  2. 元素多层嵌套,JS获取问题
  3. Angular 富文本编辑之路的探索
  4. 一个关于思科路由器ping的有趣现象
  5. A typical memory leak
  6. dubbo分布式事务解决方案_spring boot 分布式事务解决方案
  7. Java Optional 的 orElse() 和 orElseGet() 的区别
  8. (12)VHDL组合逻辑
  9. 【教育】斯坦福开学演讲:为什么很多人顶级学校毕业,却终身平庸?
  10. 老王讲设计模式(三)——单例模式
  11. 管理感悟:怎样给程序找好的思路
  12. FreeTextBox设置编辑页面
  13. microsoft edge怎么截长图_苹果12怎么截图截长屏 iphone 12截长图快捷键方法介绍
  14. 小爱同学app安卓版_小爱同学app-小爱同学安卓版下载v3.0
  15. JavaWeb——JSP开发模型
  16. 如何把TS视频文件转换为MP4格式?
  17. windows上必备的提升效率的软件
  18. IT时代,不懂编程,到底能不能学前端 ,自己做网站
  19. 2022年「医疗行业」市场研报合集(共228份)
  20. 爱因斯坦广义相对论:引力是时空的曲率

热门文章

  1. dnf连接服务器黑屏xp系统,windows xp进入桌面后黑屏的解决技巧
  2. centos 6.9部署svn服务器和客户端(客户端含windows、linux版本)
  3. Compose系列 五 副作用 side-effect
  4. 1111111111
  5. P1308 统计单词数 洛谷
  6. c语言低通滤波参数调节,低通滤波器的参数设置
  7. nginx配置域名指向ip
  8. 解决warning: #1296-D: extended constant initialiser used告警
  9. memory exhausted mysql 42000 1064
  10. D-028 DDR3硬件电路设计