android对linux内核的增强 ----alarm(硬件时钟)

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:是设备属性写模式的实现函数。


    

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值