专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
电源
Linux电源管理研究笔记 gnome power manager的工作原理
2019-07-13 22:55
发布
生成海报
站内文章
/
电源技术
10110
0
1048
分享一下我老师大神的人工智能教程!零基础,通俗易懂!
http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
Linux
电源管理研究笔记
—gnome-power-manager
的工作原理
转载时请注明出处:
http://blog.csdn.net/absurd/
在手持设备设计中,电源管理历来为重要的研究课题之一。我们日常所说的省电就属于电源管理的范畴,这也是我们最关心的一个部分。通过挂起不必要的设备、降低
CPU
的频率或者其它方法,可以减少能量的消耗,达到省电的目的。电源管理实际上是一个系统工程,从应用程序到内核框架,再到设备驱动和硬件设备,都要参与进来,才能达到电源管理的最优化。本文介绍一下
gnome-power-manager
的工作原理。
为什么要研究
gnome-power-manager
呢?我们说过,电源管理是一个系统工程,不但与内核有关,与应用程序也有很大关系,而
gnome-power-manager
其名称就暗示了它是与电源管理关系最大的应用程序之一。研究
gnome-power-manager
的工作原理,我们可以更好的理解应用程序与底层电源管理服务之间的交互关系。
gnome-power-manager
具有哪些功能呢?从官方网站上我们可以看到:
1.
电源状态。
2.
电源管理。
3.
设置电源选项。
交流电源选项:其中包括显示器
/
计算机进入休眠的时间、显示器的亮度和笔记本合上时的动作。
电池电源选项:其中包括显示器
/
计算机进入休眠的时间、显示器的亮度和笔记本合上时的动作。
常用选项:休眠的类型和
panel
上的通知区的行为。
通过以上几幅图片,我们已经了解到
gnome-power-manager的基本功能,但这些功能都是从用户角度来看的。下面我们再从程序内部来看看,在gnome-power-manager的代码中,有一个名为gpm-manager.xml的文件,从其内容我们知道这是一个dbus服务对象接口定义,它实现了一个org.gnome.PowerManager接口,这个接口提供了基本的电源管理功能。在acpid一文中,我们说过acpid是内核与应用程序之间的接口,但是acpid对普通应用程序来说还是过于底层,而gnome-power-manager才是普通应用程序应该调用的接口。
gpm-manager.xml中定义的主要接口有:
1.
GetLowPowerMode
是否使用了低耗能模式。
2.
GetOnAc
是否使用的交流电源。
3.
AllowedSuspend
能否挂起。
4.
AllowedHibernate
能否睡眠。
5.
AllowedShutdown
能否关机。
6.
AllowedReboot
能否重起。
7.
Hibernate
睡眠
8.
Suspend
挂起
9.
Shutdown
关机
10.
Reboot
重起
11.
GetDpmsMode
得到显示器电源管理模式。
12.
SetDpmsMode
设置显示器电源管理模式。
13.
Inhibit
禁用电源管理功能。比如文件管理在拷贝文件时,为了防止系统在此时挂起或者睡眠,可以暂时禁用电源管理,直到拷贝完成。
14.
UnInhibit
恢复电源管理功能。
下面我们再看以上这些函数的实现方式,这才是我真正关心的。
1.
GetLowPowerMode
这个函数实现很简单,只是一项简单的配置信息,通过
gconf_client_get_bool
获取
GPM_PREF_AC_LOWPOWER
或者
GPM_PREF_BATTERY_LOWPOWER
,这取决于当前的电源类型。
2.
GetOnAc
通过向
hal
服务进程发送
FindDeviceByCapability
请求,可以得到是否支持交流电源的属性。然后发送
GetPropertyBoolean(ac_adapter.present)
请求,可以得到交流电源是否存在。
3.
AllowedSuspend
4.
AllowedHibernate
以上函数都是通过向
hal
服务进程发送
GetPropertyBoolean
请求,得到对应的属性值。
5.
AllowedShutdown
6.
AllowedReboot
以上函数都是通过向
hal
服务进程发送
IsUserPrivileged
请求,查看当前用户是否具有权限决定。
7.
Hibernate
睡眠
8.
Suspend
挂起
9.
Shutdown
关机
10.
Reboot
重起
以上函数都是通过向
hal
服务进程发送相应请求来实现。请求分别为
Hibernate
、
Suspend
、
Shutdown
和
Reboot
。
11.
GetDpmsMode
得到显示器电源管理模式。
12.
SetDpmsMode
设置显示器电源管理模式。
以上函数都是通过
X11
的
DPMS
扩展实现的。当然
X11
只是封装了
DPMS
功能,真正的实现是在内核的显示驱动程序里。
DPMS
比较重要,因为显示设备通常是耗电大户,如果可能的话,我们会用专门一章来讲解。
13.
Inhibit
14.
UnInhibit
这两个函数的实现很简单:
Inhibit
把应用程序的
dbus-connection(
标识发送请求的应用程序
)
加入到一个链表中。
UnInhibit
则从该链表中删除应用程序的
dbus-connection
。如果该链表不为空,则禁用电源管理功能。
综上所述,
gnome-power-manager
即是一个直接面对最终用户的应用程序,也是一个中间层。作为中间层,它把
hal
和
x11
提供的底层细节封装起来了,同时为其它应用程序提供了更高层的服务接口。
~~end~
给我老师的人工智能教程打call!
http://blog.csdn.net/jiangjunshow
Ta的文章
更多
>>
Linux电源管理研究笔记 gnome power manager的工作原理
0 个评论
热门文章
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮