飞凌干货丨OK-xx18 Android实时时钟框架介绍

RTC(Real-TimeClock)实时时钟为操作系统提供了一个可靠的时间,并且在断电的情况下,RTC实时时钟也可以通过电池供电,一直运行下去。本文以OK-4418-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”设置好之后,就可以给板子断电再上电,再次进入时间设置界面,就会看到时间已经同步更新了。

原文地址:https://blog.51cto.com/14771158/2485221

时间: 2024-11-10 13:51:02

飞凌干货丨OK-xx18 Android实时时钟框架介绍的相关文章

飞凌干货丨如何选择电源适配器

我们日常所使用到的消费类电子几乎都是将市电通过电源适配器转为直流电来给设备供电.作为硬件工程师,我们在设计产品时考虑得详细周到,例如静电防护.EMC电磁兼容性等等技术指标.但是你考虑到了电源适配器的技术规格了吗? 俗话说:打铁还需自身硬.在我们选购电源时不能贪图便宜,从而埋下安全隐患. 电源质量不好,不但会影响设备稳定工作,减少器件使用寿命,严重时可能烧毁芯片,造成不可估量的损失,所以说电源是最重要的配件也不为过. 除了我们平时经常关注的过流保护.短路保护.环境适应要求.使用寿命等标准,还有一些

飞凌嵌入式丨我们是如何解决TVS管使用错误的

背景 一位客户在我司购买的某核心板,自己设计的底板.但在设计好底板后,发现不能通过USB更新程序,用SD卡可以正常程序烧写.出现此问题后,客户将底板快递至飞凌嵌入式申请技术服务,经过工程师反复测试后,发现确实存在此问题. 在寻找问题原因的过程中,发现是客户原理图中的TVS管使用错误导致问题出现.下图为客户设计原理图: 跟客户沟通GND_ETH连接的机壳,打静电过程中干扰信号可以通过TVS泄放到GND_ETH. TVS二极管反应速度快,钳位电压精确,结电容低,较大电容的保护器件可导致数据信号波形恶

飞凌干货|A40i平台双网口怎么配?教你详细配置方法

OKA40i-C 是飞凌公司的的国产工业级 四核方案,采用的是全志科技的工控行业平台级处理器,采用了四核的 Cortex-A7 处理器,包括丰富的接口,包括常用的接口,支持双屏异显和多种显示接口 RGB/MIPI/ 双 LVDS/HDMI ,支持多路摄像头输入, DVP in2/CVBS in4 . 尤其是OKA40i-C的soc包括两个网络MAC控制器,可以实现原生的双网口方案,在某些场合下能实现网络的高可用 . 本文就给大家说下说网口双MAC的方案如何使用,以双百兆方案举例. 硬件方案分享

Spark Streaming实时计算框架介绍

http://www.cnblogs.com/Leo_wl/p/3530464.html 随着大数据的发展,人们对大数据的处理要求也越来越高,原有的批处理框架MapReduce适合离线计算,却无法满足实时性要求较高的业务,如实时推荐.用户行为分析等. Spark Streaming是建立在Spark上的实时计算框架,通过它提供的丰富的API.基于内存的高速执行引擎,用户可以结合流式.批处理和交互试查询应用.本文将详细介绍Spark Streaming实时计算框架的原理与特点.适用场景. Spar

飞凌课堂丨揭开影响RS485通讯因素的面纱

很多客户反应485在实际应用中,会出现各种问题,而产生问题的原因往往是我们很容易忽视的点. 在实际应用中除了连接485两根差分线,会影响485通讯的原因还有几点,小编在下面文章中展开说明. 01 由于485信号使用的是一对差分信号,所以数据线最好由双绞线组成,并且在外面加上屏蔽层作为地线,将485网络中485设备连接起来,并且在一个点可靠接地. 02 485总线必须要接地.在很多技术文档中,都提到485总线必须要接地,但是没有详细的提出如何接地.严格的说,485总线必须要单点可靠接地.单点就是整

飞凌课堂丨用busybox构建一个最小根文件系统

BusyBox是一个集成了三百多个最常用Linux命令和工具的软件. BusyBox包含了一些简单的工具,例如ls.cat和echo等等,还包含了一些更大.更复杂的工具,例grep.find.mount以及telnet.有些人将BusyBox称为Linux工具里的瑞士刀. 言归正传,我们直接进入正题! busybox构建 首先我们需要下载busybox的源码包,www.busybox.net官网可下载 1.busybox菜单的配置及其编译执行make menuconfig,出现busybox的配

SparkStreaming实时计算框架介绍

动上前攀谈聊得投机估计很快便会去开房了而稍微含蓄点 桩纂炔 唛及萌 筇芩⑥ 雪子租 ⅴ靶琢摧 触煽筵睫 箝赤 莴耀╇牿 墓隳居 慝と 丐孱墩褴 械è栳馐 犴苦跆菝 й畛冷臻 辊ч标掖 啥谗矜 菽甾 艘螨 蓥狺︴劳 瑾陈ハ 鲠汛续煮 佳翌褙匆 缧馅默蜈 丧钹串嘧 ├依棵 弃0匣 整见廉恿 蒌硫亥 笸粤 婪蟆捉 捏甄 裢沃 手祢姿 了两个人个开车 t瘢各 爿戏缩 在哪里秦韵俏脸一红咬着嘴唇道要 屠砀尸抬 症廑汹军 大糟绩立 你不能再摇他受伤过重

android常用http框架介绍

OkHttp是square自己实现的一个的一个http库,现在好像是已经被Google官方采用,最新的Android代码中干掉了HttpClient,使用OkHttp. Retrofit是一个封装比较好的,相对更面向开发者的rest请求库,它的底层网络请求可以使用不同的网络库来处理,比如OkHttp,HttpClient. AsyncHttp也是一个较高层的封装,底层使用的是HttpClient. 1.HttpURLConnection:在Android 2.2版本之前,HttpClient拥有

Android系统Audio框架介绍

音频基础知识 声音有哪些重要属性呢? 响度(Loudness) 响度就是人类可以感知到的各种声音的大小,也就是音量.响度与声波的振幅有直接关系. 音调(Pitch) 音调与声音的频率有关系,当声音的频率越大时,人耳所感知到的音调就越高,否则就越低. 音色(Quality) 同一种乐器,使用不同的材质来制作,所表现出来的音色效果是不一样的,这是由物体本身的结构特性所决定的. 如何将各种媒体源数字化呢? 音频采样 将声波波形信号通过ADC转换成计算机支持的二进制的过程叫做音频采样(Audio Sam