上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
4.3.4 Alarm驱动程序
Alarm驱动程序为用户空间提供了一个时钟的接口。它和RTC系统密切相关,起到封装的作用,同时使用了Android系统的wake_lock等功能。Alarm提供给用户空间的接口是主设备号为10的Misc字符设备,其次设备号是动态生成的。在用户空间中,Alarm设备节点为:/dev/alarm。
Alarm驱动程序的内容在drivers/rtc/目录中,KConfig和Makefile中定义了相关的内容,如下所示:
rtc-core-$(CONFIG_RTC_INTF_ALARM) += alarm.o
Alarm驱动程序的头文件是include/linux/中的android_alarm.h文件,alarm.c文件中定义了misc设备。
Alarm可以提供一些ioctl的命令供用户空间调用,如下所示:
#define ANDROID_ALARM_CLEAR(type) _IO('a', 0 | ((type) << 4)) #define ANDROID_ALARM_WAIT _IO('a', 1) #define ALARM_IOW(c, type, size) _IOW('a', (c) | ((type) << 4), size) #define ANDROID_ALARM_SET(type) ALARM_IOW(2, type, struct timespec) #define ANDROID_ALARM_SET_AND_WAIT(type) ALARM_IOW(3, type, struct timespec) #define ANDROID_ALARM_GET_TIME(type) ALARM_IOW(4, type, struct timespec) #define ANDROID_ALARM_SET_RTC _IOW('a', 5, struct timespec) #define ANDROID_ALARM_BASE_CMD(cmd) (cmd & ~(_IOC(0, 0, 0xf0, 0))) #define ANDROID_ALARM_IOCTL_TO_TYPE(cmd) (_IOC_NR(cmd) >> 4)
以上ioctl命令主要用于设置警报器的时间,设置RTC(实时时钟)时间,获取当前时间等功能。
提示:Alarm设备需要利用内核中的RTC部分,但是和具体的RTC驱动程序没有直接关系。