学习笔记 之 android 电源管理学习

2019-07-13 23:17发布

一、电源管理文件组织结构  1、首先介绍一下android系统的结构: 
应用程序(application) 应用程序框架(Application Framework) 各种库和android运行环境(HAL) Linux操作层OS
可以参考下面的文章了解android的文件层次结构:
《android体系结构介绍 》
 而电源管理模块贯穿了android的四大部分:应用层,框架层,HAL层和Kernel层。 参考下面:《Android电源管理文件组织结构》
二、android 的电源管理机制(参考:《Android 技术内幕》系统卷 扬丰盛著)     android 的电源管理机制只要是通过锁和定时器来切换系统的状态,是系统的功耗降至最低。 在应用层:android 提供了android.os.PowerManager类供应程序使用,用于控制设备的电源状态切换。
在框架层 :是再java中通过JNI 访问C++函数->HAL层->sysfs文件系统->调用内核提供的支持来实现。
三、android 的电源管理机制的具体实现 Linux  设备驱动模型最底层的数据结构:kobject、kset、kobj_type等。 kobject kset:
kobj_type:
1、电源管理模块的初始化 /kernel/kernel/power kobject_create_and_addstatic int __init pm_init(void) //初始化电源管理模块 { int error = pm_start_workqueue(); if (error) return error; hibernate_image_size_init(); hibernate_reserved_size_init(); touch_evt_timer_val = ktime_set(2, 0); hrtimer_init(&tc_ev_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); tc_ev_timer.function = &tc_ev_stop; tc_ev_processed = 1; power_kobj = kobject_create_and_add("power", NULL); //创建一个power的kobject if (!power_kobj) return -ENOMEM; return sysfs_create_group(power_kobj, &attr_group); //是电源管理进入内核的接口,这里会建立几个文件,书上说:生成power的sys文件并返回 } core_initcall(pm_init);
kobject_creat_and_add sysfs_create_group