1 作用 : 它提供了一个定时器,用于把设备从睡眠状态唤醒,同时也提供了一个在设备睡眠时仍然会运行时的基准时钟。
2 源码:drivers/rtc/alarm.c
3 设备名称:"/dev/alarm"
4 代码介绍:
22 enum android_alarm_type {
23 /* return code bit numbers or set alarm arg */
24 ANDROID_ALARM_RTC_WAKEUP, //表示在触发Alarm时需要唤醒设备
25 ANDROID_ALARM_RTC, //表示在指定的某一时刻发出alarm。
26 ANDROID_ALARM_ELAPSED_REALTIME_WAKEUP,
27 ANDROID_ALARM_ELAPSED_REALTIME, //表示在设备启动后,流逝的时间达到总时间之后触发alarm;
28 ANDROID_ALARM_SYSTEMTIME, //表示系统时间。
29
30 ANDROID_ALARM_TYPE_COUNT, //alarm类型的计数。
31
32 /* return code bit numbers */
33 /* ANDROID_ALARM_TIME_CHANGE = 16 */
34 };
在“drivers/rtc/class.c”里面有一段代码:
230 static int __init rtc_init(void)
231 {
232 rtc_class = class_create(THIS_MODULE, "rtc"); //主要是在系统"/sys/class/”目录下创建了“rtc"目录。
233 if (IS_ERR(rtc_class)) {
234 printk(KERN_ERR "%s: couldn't create class\n", __FILE__);
235 return PTR_ERR(rtc_class);
236 }
237 rtc_class->suspend = rtc_suspend;
238 rtc_class->resume = rtc_resume;
239 rtc_dev_init(); //在“/sys/class/rtc/"下创建了”rtc0“设备。
240 rtc_sysfs_init(rtc_class); //初始化了"/sys/class/rtc/rtc0"设备的属性。
241 return 0;
242 }
其中”drivers/rtc/rtc-dev.c“里面定义:以字符设备的形式创建“rtc0”设备.
515 void __init rtc_dev_init(void)
516 {
517 int err;
518
519 err = alloc_chrdev_region(&rtc_devt, 0, RTC_DEV_MAX, "rtc");
520 if (err < 0)
521 printk(KERN_ERR "%s: failed to allocate char dev region\n",
522 __FILE__);
523 }
而"drivers/rtc/rtc-sysfs.c"又定义了rtc0的设备属性:
246 void __init rtc_sysfs_init(struct class *rtc_class)
247 {
248 rtc_class->dev_attrs = rtc_attrs;
249 }
“RTC0”的设备属性主要包括以下几个部分:
119 static struct device_attribute rtc_attrs[] = {
120 __ATTR(name, S_IRUGO, rtc_sysfs_show_name, NULL),
121 __ATTR(date, S_IRUGO, rtc_sysfs_show_date, NULL),
122 __ATTR(time, S_IRUGO, rtc_sysfs_show_time, NULL),
123 __ATTR(since_epoch, S_IRUGO, rtc_sysfs_show_since_epoch, NULL),
124 __ATTR(max_user_freq, S_IRUGO | S_IWUSR, rtc_sysfs_show_max_user_freq,
125 rtc_sysfs_set_max_user_freq),
126 __ATTR(hctosys, S_IRUGO, rtc_sysfs_show_hctosys, NULL),
127 { },
128 };
include/linux/sysfs.h里面定义了:
70 #define __ATTR(_name,_mode,_show,_store) { \
71 .attr = {.name = __stringify(_name), .mode = _mode }, \
72 .show = _show, \
73 .store = _store, \
74 }
参数说明:
_name: 是设备属性在文件系统里面的显示。
_mode: 说明设备属性的读写模式,是读设备还是写设备还是读写设备。
_show: 是设备属性读模式的实现函数。
_store:是设备属性写模式的实现函数。