android内核驱动 pdf,第十一节_Android内核驱动——Alarm.pdf

第十一章 Android 内核驱动——Alarm

11.1 基本原理

Alarm 闹钟是 android 系统中在标准 RTC 驱动上开发的一个新的驱动,提供了一个定时器

用于把设备从睡眠状态唤醒,当然因为它是依赖 RTC 驱动的,所以它同时还可以为系统提

供一个掉电下还能运行的实时时钟。

当系统断电时,主板上的rtc 芯片将继续维持系统的时间,这样保证再次开机后系统的时间

不会错误。当系统开始时,内核从 RTC 中读取时间来初始化系统时间,关机时便又将系统

时间写回到 rtc 中,关机阶段将有主板上另外的电池来供应 rtc 计时。Android 中的Alarm

在设备处于睡眠模式时仍保持活跃,它可以设置来唤醒设备。

上图为android 系统中alarm 和rtc 驱动的框架。Alarm 依赖于rtc 驱动框架,但它不是一个 rtc

驱动,主要还是实现定时闹钟的功能。相关源代码在 kernel/drivers/rtc/alarm.c 和

drivers/rtc/alarm_dev.c 。

其中 alarm.c 文件实现的是所有 alarm 设备的通用性操作,它创建了一个设备 class ,而

Linux公社(LinuxIDC.com) 是包括Ubuntu,Fedora,SUSE技术,最新IT资讯等Linux专业类网站。

alarm_dev.c 则创建具体的alarm 设备,注册到该设备class 中。alarm.c 还实现了与interface.c

的接口,即建立了与具体rtc 驱动和rtc 芯片的联系。alarm_dev.c 在alarm.c 基础包装了一层,

主要是实现了标准的miscdevice 接口,提供给应用层调用。

可以这样概括:alarm.c 实现的是机制和框架,alarm_dev.c 则是实现符合这个框架的设备驱

动,alarm_dev.c 相当于在底层硬件rtc 闹钟功能的基础上虚拟了多个软件闹钟。

11.2 关键数据结构

 alarm

定义在 include/linux/android_alarm.h 中。

struct alarm {

struct rb_node node;

enum android_alarm_type type;

ktime_t softexpires; //最早的到期时间

ktime_t expires; //绝对到期时间

void (*function)(struct alarm *); //当到期时系统回调该函数

};

这个结构体代表 alarm 设备,所有的 alarm 设备按照它们过期时间的先后被组织成一

个红黑树,alarm.node 即红黑树的节点,alarm 设备通过这个变量插入红黑树。alarm.type

是类型,android 中一共定义了如下 5 种类型,在现在的系统中每种类型只有一个设备。

enum android_alarm_type {

/* return code bit numbers or set alarm arg */

ANDROID_ALARM_RTC_WAKEUP,

ANDROID_ALARM_RTC,

ANDROID_ALARM_ELAPSED_REALTIME_WAKEUP,

ANDROID_ALARM_ELAPSED_REALTIME,

ANDROID_ALARM_SYSTEMT

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值