[RK3128][Android 6.0] RTC设备注册及调用流程
2017-12-15 13:53
931 查看
硬件平台:RK3128
Android版本:6.0
Kernel版本:3.10.92
先来看rtc的注册:
devm_rtc_device_register ->
rtc_device_register ->
device_register ->
device_add ->
class_intf->add_dev ->
alarmtimer_rtc_add_device //alarmtimer.c
看下定义:
注意alarmtimer_rtc_add_device中,有两个地方出错会导致注册失败,可以看我另一篇文章。到这里就注册完成了。
下面看设置时间到rtc的流程:
Android设置时间后,最终调用到jni:
frameworks/base/services/core/jni/com_android_server_AlarmManagerService.cpp中的
AlarmImplAlarmDriver::setTime ->
ioctl(fds[0], ANDROID_ALARM_SET_RTC, &ts) ->
alarm_ioctl -> //alarm-dev.c
alarm_do_ioctl ->
alarm_set_rtc ->
alarmtimer_get_rtcdev //获取到注册时保存的全局变量rtcdev
rtc_set_time -> //interface.c
rtc->ops->set_time //设置时间到硬件RTC中
到这里,时间就保存到我们的RTC中了。
Android版本:6.0
Kernel版本:3.10.92
先来看rtc的注册:
devm_rtc_device_register ->
rtc_device_register ->
device_register ->
device_add ->
class_intf->add_dev ->
alarmtimer_rtc_add_device //alarmtimer.c
看下定义:
static int alarmtimer_rtc_add_device(struct device *dev, struct class_interface *class_intf) { unsigned long flags; struct rtc_device *rtc = to_rtc_device(dev); if (rtcdev) return -EBUSY; if (!rtc->ops->set_alarm) return -1; if (!device_may_wakeup(rtc->dev.parent)) return -1; spin_lock_irqsave(&rtcdev_lock, flags); if (!rtcdev) { rtcdev = rtc; //将rtc_device赋值给全局变量rtcdev /* hold a reference so it doesn't go away */ get_device(dev); } spin_unlock_irqrestore(&rtcdev_lock, flags); return 0; }
注意alarmtimer_rtc_add_device中,有两个地方出错会导致注册失败,可以看我另一篇文章。到这里就注册完成了。
下面看设置时间到rtc的流程:
Android设置时间后,最终调用到jni:
frameworks/base/services/core/jni/com_android_server_AlarmManagerService.cpp中的
AlarmImplAlarmDriver::setTime ->
ioctl(fds[0], ANDROID_ALARM_SET_RTC, &ts) ->
alarm_ioctl -> //alarm-dev.c
alarm_do_ioctl ->
alarm_set_rtc ->
alarmtimer_get_rtcdev //获取到注册时保存的全局变量rtcdev
rtc_set_time -> //interface.c
rtc->ops->set_time //设置时间到硬件RTC中
到这里,时间就保存到我们的RTC中了。
相关文章推荐
- [RK3128][Android 6.0] PWM backlight注册及调用流程
- platform设备和驱动注册调用probe的流程
- Android下rtc驱动调用流程
- QEMU(基于QEMU 2.0.0)设备初始化流程 - realizefn 调用流程(以 RTC为例)
- [RK3128][Android 6.0] RTC芯片PCF8563调试记录
- android,利用广播接收者调用服务的方法,代码注册广播接收者
- Android系统框架和几种调用流程
- Android HAL的被调用流程
- Android 6.0 设备上自定义文本操作栏
- 面试问题 activity生命周期,当设备旋转时android生命周期方法的调用顺序
- unity调用Android通过编译 java jar包出现问题解决和简单支付流程
- phonegap-网络访问与调用android手机硬件设备
- android phone电话调用流程
- 设备驱动-----Android关机流程总结
- Android深入源码分析理解Aidl整体调用流程(雷惊风)
- android camera flow and V4L2 in linux kernel--------android 调用流程
- Android4.2之Camera系统HAL调用流程
- [android] 代码注册广播接收者&利用广播调用服务的方法
- 十二 v4l2 video设备注册和调用过程
- Android Linker(一) 从loadLibrary开始-----上层调用流程