[RK3288][Android6.0] RTC驱动的上层调用流程
来源:互联网 发布:2017永久免费顶级域名 编辑:程序博客网 时间:2024/05/16 14:15
Platform: Rockchip
OS: Android 6.0
Kernel: 3.10.92
说明:
RTC驱动在注册的时候提供了两个字符设备给用户空间供操作。
1. /dev/alarm, android特有设备,为了提高平台无关性而加入,这里不关注闹钟的设置。
2. /dev/rtcx, 原始linux操作字符设备的方法。
通过alarm节点操作:
上层的操作最终都是通过alarm节点来实现,JNI提供给上层应用的接口在
frameworks/base/services/core/jni/com_android_server_AlarmManagerService.cpp
初始化:
android_server_AlarmManagerService_init -> init_alarm_driver
static jlong init_alarm_driver(){ int fd = open("/dev/alarm", O_RDWR);...... AlarmImpl *ret = new AlarmImplAlarmDriver(fd);}
设置时间:
android_server_AlarmManagerService_setKernelTime -> impl->setTime
impl即AlarmImplAlarmDriver, 所以有
AlarmImplAlarmDriver::setTime ->
ioctl(fds[0], ANDROID_ALARM_SET_RTC, &ts); ->
alarm_ioctl -> alarm-dev.c
alarm_do_ioctl ->
alarm_set_rtc ->
rtc_set_time -> interface.c
rtc->ops->set_time ->
rx8010_set_time //最终设置时间到硬件RTC中
通过rtc节点操作 :
如hwclock命令就是通过/dev/rtcX来读写RTC时间。
external/busybox/libbb/rtc.c
初始化:
int FAST_FUNC rtc_xopen(const char **default_rtc, int flags){ int rtc; if (!*default_rtc) { *default_rtc = "/dev/rtc"; rtc = open(*default_rtc, flags); if (rtc >= 0) return rtc; *default_rtc = "/dev/rtc0"; rtc = open(*default_rtc, flags); if (rtc >= 0) return rtc; *default_rtc = "/dev/misc/rtc"; } return xopen(*default_rtc, flags);}
open -> rtc_dev_open
设置时间:
from_sys_clock -> xioctl(rtc, RTC_SET_TIME, &tm_time) -> rtc_dev_ioctl -> rtc_set_time -> rtc->ops->set_time -> rx8010_set_time
可见最终调用的接口是一样的。
- [RK3288][Android6.0] RTC驱动的上层调用流程
- [RK3288][Android6.0] RTC模块RX8010SJ驱动添加及改动
- [RK3288][Android6.0] Camera驱动初始化流程
- [RK3288][Android6.0] 串口驱动流程小结
- [RK3288][Android6.0] ION 驱动流程小结
- [RK3288][Android6.0] Audio的DMA调用实例流程
- [RK3288][Android6.0] PWM backlight 驱动流程小结
- [RK3288][Android6.0] Display驱动初始化流程小结
- [RK3288][Android6.0] 系统调试串口驱动流程小结
- [RK3288][Android6.0] TS-ADC驱动流程小结
- [RK3288][Android6.0] USB WiFi驱动流程小结
- [RK3288][Android6.0] 系统按键驱动流程分析
- [RK3288][Android6.0] PWM backlight 驱动流程小结
- [RK3288][Android6.0] Audio的音量设置流程小结
- [RK3288][Android6.0] Audio的ASOC驱动及数据结构
- [RK3288][Android6.0] WiFi的驱动初始化过程小结
- [RK3288][Android6.0] RTC模块RX8010SJ硬件部分概要
- [RK3288][Android6.0] Camera HAL流程小结
- android 静音与振动
- js获取当前域名、Url、相对路径和参数
- 简单理解Socket及TCP/IP、Http、Socket的区别
- @RequestMapping详解
- .net http post接口返回json格式数据
- [RK3288][Android6.0] RTC驱动的上层调用流程
- sony apkanalyser使用
- java Web开发_购物车功能实现
- go"???
- Java实现-最大间距
- Unity3D 03-代码及效率优化总结
- bzoj 2219: 数论之神 (BSGS+GCD+数论)
- 查看虚拟机里的Centos7的IP
- 一种非递归实现广度优先搜索(BFS)的方法