Linux电源管理研究笔记 gnome power manager的工作原理

2019-07-13 22:55发布

分享一下我老师大神的人工智能教程!零基础,通俗易懂!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.         AllowedShutdown6.         AllowedReboot以上函数都是通过向hal服务进程发送IsUserPrivileged请求,查看当前用户是否具有权限决定。 7.         Hibernate 睡眠8.         Suspend 挂起9.         Shutdown 关机10.     Reboot 重起以上函数都是通过向hal服务进程发送相应请求来实现。请求分别为HibernateSuspendShutdownReboot 11.     GetDpmsMode 得到显示器电源管理模式。12.     SetDpmsMode 设置显示器电源管理模式。以上函数都是通过X11DPMS扩展实现的。当然X11只是封装了DPMS功能,真正的实现是在内核的显示驱动程序里。DPMS比较重要,因为显示设备通常是耗电大户,如果可能的话,我们会用专门一章来讲解。 13.     Inhibit 14.     UnInhibit这两个函数的实现很简单:Inhibit把应用程序的dbus-connection(标识发送请求的应用程序)加入到一个链表中。UnInhibit则从该链表中删除应用程序的dbus-connection。如果该链表不为空,则禁用电源管理功能。 综上所述,gnome-power-manager即是一个直接面对最终用户的应用程序,也是一个中间层。作为中间层,它把halx11提供的底层细节封装起来了,同时为其它应用程序提供了更高层的服务接口。 ~~end~               

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

这里写图片描述