- Android系統級深入開發
- 韓超 梁泉
- 339字
- 2018-12-29 13:39:33
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驅動程序沒有直接關系。
推薦閱讀
- Django+Vue.js商城項目實戰
- Go語言高效編程:原理、可觀測性與優化
- JavaScript語言精髓與編程實踐(第3版)
- FreeSWITCH 1.6 Cookbook
- Building Mapping Applications with QGIS
- WordPress Plugin Development Cookbook(Second Edition)
- OpenStack Orchestration
- The DevOps 2.5 Toolkit
- Mastering Apache Storm
- 零基礎學Python編程(少兒趣味版)
- 單片機原理及應用技術
- UML基礎與Rose建模實用教程(第三版)
- Django 2.0 入門與實踐
- Java從入門到精通(微視頻精編版)
- Unity3D游戲開發標準教程