Linux Power Management源码分析(一)

Linux Power Management接口 

   PM subsystem是以sysfs为接口.接口的位置在 /sys/power/目录下.以Andorid手机为例:


/sys/power/state 控制系统电源状态,从这个文件里可以读出来系统支持的所有状态,如:

    "standby"----->Power-On Suspend

     "mem"--------->Suspend-to-RAM

      "disk"---------->Suspend-to-disk

kernel/include/linux/suspend.h
#define PM_SUSPEND_ON           ((__force suspend_state_t) 0)
#define PM_SUSPEND_STANDBY      ((__force suspend_state_t) 1)
#define PM_SUSPEND_MEM          ((__force suspend_state_t) 3)
#define PM_SUSPEND_MAX          ((__force suspend_state_t) 4) 

kernel/kernel/power/suspend.c
const char *const pm_states[PM_SUSPEND_MAX] = {
        [PM_SUSPEND_STANDBY]    = "standby",
        [PM_SUSPEND_MEM]        = "mem",
};

kernel/kernel/power/main.c

/**
 *      state - control system power state.
 *
 *      show() returns what states are supported, which is hard-coded to
 *      'standby' (Power-On Suspend), 'mem' (Suspend-to-RAM), and
 *      'disk' (Suspend-to-Disk).
 *
 *      store() accepts one of those strings, translates it into the
 *      proper enumerated value, and initiates a suspend transition.
 */
static ssize_t state_show(struct kobject *kobj, struct kobj_attribute *attr,
                          char *buf)
{
        char *s = buf;
#ifdef CONFIG_SUSPEND
        int i;

        for (i = 0; i < PM_SUSPEND_MAX; i++) {
                

            /*检查pm_states中包含的电源狀态是否可用,并调用 valid_state函数来检查,
            * valid_state函数会调用platform下注册的valid来检测state的有效性,platform_suspend_ops的实现一般在
            *kernel/archn/arm/mach-omap2/pm.c  
            */
           if (pm_states[i] && valid_state(i))
               s += sprintf(s,"%s ", pm_states[i]);
        }
       

#ifdef CONFIG_HIBERNATION
        s += sprintf(s, "%s\n", "disk");
#else
        if (s != buf)
                /* convert the last space to a newline */
                *(s-1) = '\n';
#endif
        return (s - buf);

}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值