![](https://csdnimg.cn/release/download_crawler_static/3237519/bg3.jpg)
该文件依赖于 alarm.c 提供的框架,实现了与应用层交互的功能,具体说就是暴露出
miscdevice 的设备接口。Alarm_dev.c 定义了几个全局变量:
每种类型一个 alarm 设备,android 目前创建了 5 个 alarm 设备。
static struct alarm alarms[ANDROID_ALARM_TYPE_COUNT];
wake lock 锁,当加锁时,阻止系统进 suspend 状态。
static struct wake_lock alarm_wake_lock;
标志位,alarm 设备是否被打开。
static int alarm_opened;
标志位,alarm 设备是否就绪。所谓就绪是指该 alarm 设备的闹铃时间到达,但原本等待在
该 alarm 设备上的进程还未唤醒,一旦唤醒,该标志清零。
static uint32_t alarm_pending;
标志位,表示 alarm 设备是否 enabled,表示该设备设置了闹铃时间(并且闹铃时间还未到),
一旦闹铃时间到了,该标志清零。
static uint32_t alarm_enabled;
标志位,表示原先等待该 alarm 的进程被唤醒了(它们等待的 alarm 到时了)。
static uint32_t wait_pending;
该文件提供的主要函数有:
1,模块初始化和 exit 函数:alarm_dev_init 和 alarm_dev_exit
2,模块 miscdevice 标准接口函数:alarm_open、alarm_release 和 alarm_ioctl
3, alarm 定时时间到时候的回调函数:alarm_triggered
alarm_dev_init 初始化函数调用 misc_register 注册一个 miscdevice。
static int __init alarm_dev_init(void){
int err;
int i;
err = misc_register(&alarm_device);
if (err)
return err;
for (i = 0; i < ANDROID_ALARM_TYPE_COUNT; i++)
alarm_init(&alarms[i], i, alarm_triggered);
wake_lock_init(&alarm_wake_lock, WAKE_LOCK_SUSPEND, "alarm");
return 0;
}
该设备称为 alarm_device,定义如下:
static struct miscdevice alarm_device = {
.minor = MISC_DYNAMIC_MINOR,
.name = "alarm",
.fops = &alarm_fops,
};