这一节回顾一下以前学习的Linux的电源管理模块,整个流程如下:
1:内核中的相关配置
在3.4.43内核配置中,Linux/arm 3.4.43 Kernel Configuration:
Power management options --->
[*] Suspend to RAM and standby //STR的支持
[*] Run-time PM core functionality
2:用户的接口:sysfs接口,各个kobj_attribute
相关源码位于:kernel/power/main.c
static int __init pm_init(void)
{
int error = pm_start_workqueue(); //如果使能CONFIG_PM_RUNTIME,这函数将分配一个workqueue,否则函数为NULL.
if (error)
return error;
hibernate_image_size_init(); //以下两个函数与hibernate有关,也就是suspend to disk.
hibernate_reserved_size_init();
power_kobj = kobject_create_and_add("power", NULL); //建立一个名为"power"的kobject,并注册到sysfs
if (!power_kobj)
return -ENOMEM;
return sysfs_create_group(power_kobj, &attr_group); //在"power"的目录kobject下建立属性组。
}
重点在于attr_group, 看下面代码:
static struct attribute * g[] = {
&state_attr.attr,
#ifdef CONFIG_PM_TRACE //没有打开
&pm_trace_attr.attr,
&pm_trace_dev_match_attr.attr,
#endif
#ifdef CONFIG_PM_SLEEP //打开
&pm_async_attr.attr,
&wakeup_count_attr.attr,
#ifdef CONFIG_PM_DEBUG //可以打开
&pm_test_attr.attr,
#endif
#endif
NULL,
};
static struct attribute_group attr_group = {
.attrs = g,
};
power_attr(pm_async);
power_attr(pm_test);
power_attr(state);
power_attr(wakeup_count);
在kernel/power/power.h
#define power_attr(_name)
static struct kobj_attribute _name##_attr = {
.attr = {
.name = __stringify(_name),
.mode = 0644,
},
.show = _name##_show,
.store = _name##_s
本文发布于:2024-01-28 02:18:27,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/17063795134076.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |