基于Android的Linux内核的电源管理:Early Suspend
基于Android的Linux内核的电源管理:Early Suspend
1.用户空间的接口
在kernel/power/main.c中,定义了一组sysfs的属性文件,其中一个定义是:
power_attr(state);
把这个宏展开后:
- staticstruct kobj_attribute state_attr = { \
- .attr ={ \
- .name = "state", \
- .mode = 0644, \
- }, \
- .show =state_show, \
- .store =state_store, \
- }
我们再看看main.c的入口:
- staticint __init pm_init(void)
- {
- ......
- power_kobj =kobject_create_and_add("power", NULL);
显然,该函数执行后,会在生成/sys/power目录,该目录下会建立一系列属性文件,其中一个就是/sys/power/state文件。用户空间向该文件的写入将会导致state_store被调用,读取该文件将会导致state_store函数被调用。
现在回到Android的HAL层中,查看一下代码:hardware/libhardware_legacy/power/power.c:
- //定义写入/sys/power/state的命令字符串
- staticconst char *off_state = "mem";
最终,用户空间的电源管理系统会调用set_screen_state函数来触发suspend的流程,该函数实际上就是往/sys/power/state文件写入"mem"或"on"命令字符串。
- int
- set_screen_state(inton)
- {
- ......
- initialize_fds();
- ......
- char buf[32];
|
评论暂时关闭