12Anroid警报器实时时钟系统

上传人:桔**** 文档编号:512647488 上传时间:2023-10-13 格式:DOC 页数:31 大小:457.50KB
返回 下载 相关 举报
12Anroid警报器实时时钟系统_第1页
第1页 / 共31页
12Anroid警报器实时时钟系统_第2页
第2页 / 共31页
12Anroid警报器实时时钟系统_第3页
第3页 / 共31页
12Anroid警报器实时时钟系统_第4页
第4页 / 共31页
12Anroid警报器实时时钟系统_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《12Anroid警报器实时时钟系统》由会员分享,可在线阅读,更多相关《12Anroid警报器实时时钟系统(31页珍藏版)》请在金锄头文库上搜索。

1、警报器系统/警报器系统口 第一部分警报器系统结构和移植内容口 第二部分移植和调试的要点口 第三部分模拟器中的实现丿第一部分警报器系统结构和移植内容Android的警报器(Alarm )系统提供了 警报和时间设置方面支持,其实现的硬件基础 通常是实时时钟设备。在Linux内核代码中, 需要有实时时钟设备驱动程序和Android的 Alarm驱动程序。警报器-实时时钟系统包含 T JNI和JAVA层的接口,在JAVA应用程序 层可以通过接口控制警报器方面的功能。丿第一部分警报器系统结构和移植内容J第一部分警报器系统结构和移植内容自下而上,光系统包含了以下内容:1、RTC驱动程序:Linux的实时时

2、钟驱动程序 代码路径在内核的drivers/rtc/目录中,各个具体硬件的实现不同。2、Alarm驱动程序:这是Android特定内核的组件,调用RTC系统的功 能,但是本身和硬件无关,3、本地JNI部分代码路径:frameworks/base/services/ini/com android serverAlarmManagerService.CDD这个文件是Alarm部分的本地代码,也同时提供 T JNI的接口。4、JAVA部分frameworks/base/services/iava/com/android/server/AlarmMa naaerService.java framewo

3、rks/base/core/java/android/app/AlarmManager.iavaAlarmManagerService.java 文件实现了 android.server 包 中的 AlarmManagerService, AlarmManager.java 实现 T android.app包中AlarmManager类,它通过彳吏用 AlarmManagerService服务实现,并对JAVA层提供了平 台 API。J丿第一部分警报器系统结构和移植内容JAVA应用层*7AlarmManagerA larmM anagerS erviceJAVA框架本地框架AlarmManag

4、erService JNI八内核| Alarm|.卜 .kI”1|RTC Driver|移植部分丿第一部分警报器系统结构和移植内容Android警报器系统的JAVA层、本地部分的代码都 是标准的,不需要更改。内核中的Alarm驱动程序与硬 件无关,在Android系统中都是相同的。因此警报器系 统的移植实际上就是RTC驱动程序的移植。RTC驱动程序也是Linux中一种标准的驱动程序, 它在用户空间也提供了设备节点(自定义的字符设备或 MISC字符设备)。根据Android系统的情况,不直接使 用RTC驱动程序,而是通过Alarm驱动程序调用RTC 系统,而Android系统的用户空间只调用Al

5、arm驱动程 序。VJ口 1 RTC驱动程序口 2 Alarm驱动程序口 3上层的情况和注意事项RTC是Linux中标准的实时时钟驱动程 序框架。驱动程序的框架内容在内核代码的 inlcude/linux/rtc.h 中定义 st ruct rtc_class_ops int (*open)(struct device *); void (* release)(st ruct device *); int)(struct deviceunsigned intf unsigned long);int (*read_time)(st ruet device *f st ruet rtc_time

6、*);int (*set_time)(struct device struct rtc_time *); int (*read_alarm)(struct device struct rtc_wkalrm *); int (*set_alarm)(st ruet device *f st ruet rtc_wkalrm *); int (*proc)(struct device *f struct seq_file *); int (*set_mmss)(struct device unsigned long secs); int (*irq_set_state)(struct device

7、int enabled); int (*irq_set_freq)(struct device int freq); int (*read_callback)(struct device int data);int (*alarm_irq_enable)(struct device unsigned int enabled); int (*update_irq_enable)(struct device unsigned int enabled)1 RTC驱动程序struct rtc_device 是对 struct device 的扩 展,在RTC驱动理序中使用,其中也包含了 rtc_cla

8、ss_ops 纟吉构 RTC驱而呈序的实现实际上就是实现了 rtc_class_ops中的函数指针,主要包括了时间和警 报器这2个芳面的内容。在用户空间中,也可以通过RTC驱动程序的设备节 点对其进行调试,调试的方法是通过ioctl命令。这些 命令号也是在rtc.h中定义的,以RTC为开头。1 RTC驱动程序Power Supply驱动程序的头文件在 include/linux/power_supply.h 中定义 ,注册和注销驱动程序的囱数如下所示:2 Alarm驱动程序Alarm驱动程序为用户空间提供T /dev/alarm,主设备号为10的Misc字符设备,其次设备号是动态生成的。Ala

9、rm驱动程序由内核代码中drivers/rtc/ 目录中alarmc和alarm-devc组 成。include/linux/ 录中的 android_alarm.h头文件提供了到用户空间的各个 ioctl命令接口。在Alarm设备的Suspend和Resume过程中,也通过调用RTC的rtc_read_time(),rtc_set_alarm()等函数 进彳打操低 表示通过RTC萦统存/取当前的状态。J2 Alarm驱动程序在Alarm设备的Suspend和Resume过程中,也通过调用RTC的rtc_read_time() , rtc_set_alarm()等函数 进行了操仮 表示通过RT

10、C萦统存/取当前的状态。rtc_read_time(alarm_rtc_dev, &rtc_current_rtc_time); /* 获得时间 */ rtc_curre nt_timespec.tv_ nsec = 0;rtc_tm_to_time(&rtc_curre nt_rtc_time,&rtc_current_timespectv_sec); save_time_delta(&rtc_delta, &rtc_current_timespec); /* 设置时间变花 */ set_normalized_timespec(&elapsed_realtime_alarm_time, al

11、arm_timeANDROID_ALARM_ELAPSED_REALTIME_WAKEUP .tv_sec + elapsed_rtc_delta.tv_sec, alarm_timeANDROID_ALARM_ELAPSED_REALTIME_WAKEUP tv_n sec + elapsed_rtc_delta.tv_ nsec);J丿3上层的情况和注意事项Ala rm在用户空间中的本地JNI部分的代码在 frameworks/base/services/jni/ 目录,由 com_android_server_AlarmManagerService. cpp文件实现。它调用亍Alarm驱

12、动程序,向上层 提供了 JNI的接口。static JNINativeMethod sMethods = ”init”,”()l”,(void*)android_server_AlarmManagerService_init, close蔦 M(l)Vlf, (void*)android_server_AlarmManagerService_close, set1; M(IIJJ)Vn, (void*)android_server_AlarmManagerService_set, waitForAlarm, ”(l)l“,(void*)android_server_AlarmMa nagerS

13、ervice_waitForAlarm, “setKernelTimezone”,”(ll)l”,(void*)a ndroid_server_AlarmManagerService_setKernelTimezone, ;3上层的情况和注意事项这里提供的是对androidserver包中的 AlarmManagerService 类的支持 static jint android_server_AlarmManagerService_waitForAlarm(JNIEnv* env, jobject obj, jint fd) #if HAVE_ANDROID_OSint result = 0

14、;doresult = ioctl(fd, ANDROID_ALARM_WAIT); / fd 是从(/dev/alarm 中打开 的 while (result v 0 & errno = EINTR);/省略部分错误处理内容return result;#endif3上层的情况和注意事项在JAVA代码方面,由frameworks/base/services/java/com/android /server/ 目录中的 AlarmManagerService java 文 彳牛实现了 android server中的AlarmManagerService类。它调用了 JNI部分的代码 ,实现了

15、一个Android中的服务。AlarmManagerService等服务类一般不作为平台 的API给JAVA应用程序的层使用 frameworks/base/core/java/android/app / 中的 AlarmManager. java 文件是 android.app 包 中的AlarmManager类,这个萸是平台的API AlarmManager. java配合同目录中的 rmManager.aidl祓用,调用月艮务的内容。第三部分模拟器中的实现模拟器的警报器-实时时钟部分实现的特 殊方面,只有模拟器的RTC驱动程序,在 drivers/rtc/ 目录白勺 goldfishc 文件中实

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号