资料:
http://blog.csdn.net/bingqingsuimeng/article/category/1228414
http://os.chinaunix.net/a2006/0519/1002/000001002210.shtml
http://www.ednchina.com/ART_44010_29_0_TA_eeda337e_3.HTM?jumpto=view_welcomead_1408610592294

好文:
http://blog.csdn.net/bingqingsuimeng/article/details/7935414
http://blog.csdn.net/bingqingsuimeng/article/details/8197912
http://blog.sina.com.cn/s/blog_a6559d920101i52j.html

Linux电源管理(1)_整体架构
http://www.wowotech.net/linux_kenrel/pm_architecture.html

Linux电源管理(4)_Power Management Interface
http://www.wowotech.net/linux_kenrel/pm_interface.html

Linux电源管理(6)_Generic PM之Suspend功能
http://www.wowotech.net/linux_kenrel/suspend_and_resume.html

Linux运行时IO设备电源管理框架---PM (runtime power manager)
http://blog.sina.com.cn/s/blog_533074eb0101dnm2.html

Run-time PM 详解
http://blog.csdn.net/bingqingsuimeng/article/details/7935440

电源管理之regulator机制流程
http://blog.csdn.net/bingqingsuimeng/article/details/8216782

linux内核对S3C2410睡眠模式的支持 (讲得很好!)
http://blog.csdn.net/hongtao_liu/article/details/4208988

s3c2440 省电模式开发详解(讲得很好!)
http://blog.chinaunix.net/uid-517401-id-1641576.html

http://www.linuxforum.net/forum/showflat.php?Board=embedded&Number=725416

s3c2440 省电模式开发详解
http://blog.chinaunix.net/uid-517401-id-1641576.html

一、APP_修改数码相框以支持自动关闭LCD

2.Linux下的时间函数与定时器: https://blog.csdn.net/dsg333/article/details/4870639 (未看)
里面在用户空间使用alarm()定时时间到会向本进程发送一个SIGALARM信号!
==>TODO: 查是不是所有的信号都可以从用户空间或内核空间中调用函数发送 ?

3.alarm(seonds):若干秒后内核会发出SIGALARM给APP,APP
可以提供信号处理函数signal(SIGALRM, function)。在function()中调用system("echo 0 > /sys/xxx")
来关闭LCD。

4.实现15s内没有触摸屏幕就关闭LCD的思路:
a. 应用程序注册aignal(SIGALARM, function); function函数中echo auto > /sys/device/platform/mylcd/power/control来关闭LCD和
echo on > /sys/device/platform/mylcd/power/control 来打开LCD。
b.在读取输入事件的进程中执行alarm(15)
c.如果一直没有读取到触摸屏的数据,定时器就会超时导致function()被调用从而关闭LCD。
d.如果读取到数据就再次执行alarm(15),会更新超时时间为当前之后的15s,如果之前关闭过LCD
还需要打开LCD。

5.使用# exec 6</dev/fb0就可以打开fb0 ? TODO : 查bash: exec的使用方法

6.遇到问题与解决
a. echo auto > /sys/device/platform/mylcd/power/control无法正常起作用
查驱动control_store()
中调用的pm_runtime_allow()中判断了若dev->power.runtime_auto为true的话就直接退出了,不会去执行
atomic_dec_and_test(),而dev->power.runtime_auto的初始化值就是true。
解决:
可以先执行echo on > /sys/device/platform/mylcd/power/control让dev->power.runtime_auto为0
原因是control_store()
pm_runtime_forbid
dev->power.runtime_auto = false;
但是仍然不能满足需求,因为open(/dev/fb0)会会使LCD的引用计数加1
,在echo on到control又会使LCD的应用计数加1。执行echo auto
时只会把引用计数减1,引用计数并不为0,所以不会关闭LCD。
解决:
在驱动中的lcd_open()中将pm_runtime_get_sync()换成pm_runtime_forbid();来增加引用计数,
后者不但会增加引用计数还会使dev->power.runtime_auto = false。
在close()调用的release()函数中也对应将pm_runtime_put_sync_autosuspend()换成
pm_runtime_allow()。

7.Linux内核电源管理子系统源码:drivers\base\power

TODO:查找电源管理子系统的文档学习。

二、APP_编写支持开关机(suspend)的应用程序

1.编写支持开关机(suspend)的应用程序
思路:读按键,得到某个值就执行echo mem > /sys/power/state 让系统休眠

2.hexdump /dev/event1可以来监听事件,不过打印出来的都是16进制数而已。

三、从系统角度考虑电源管理,我们要学习更多

1.优秀博文推荐:
Linux电源管理(1)_整体架构: www.wowotech.net/pm_architecture.html (未看)

2.Linux内核menuconfig的Device Drivers栏下中有DVFS,动态地调节电压和频率,当CPU的负载
不是很高的时候可以让CPU的频率降下来。

3.PM QOS的接口学习参考内核文档pm_qos_interface.txt,它是关于cpu dma延时,网络延时等
来省电的。

4.APP可以省电的做法
a. 比如明确知道此时不使用视频编解码模块的时候可以把它关掉,因为它是非常耗电的。
b. 不要去频繁地无用地去读写文件,因为eMMC也是非常耗电的。
c. 充分利用CPU的cache来降低内存的耗电

5.硬件省电
a. 如果芯片有省电模式,尽量用起来。
b. 如果芯片能关闭,给它提供开关,比如单独供电。
c. 使用效率高的电源芯片。
d. 如果可以就使用PMU(它集成了若干个DC/DC或LDO,它可以给芯片单独供电和提供开关,甚至可以调节电流大小)
LDO: 输入电压和输出电压相差不大,外围器件比较少,干扰小,但是效率低。它的输入端和输出端的电流和功率不变Vin*Iin=Vout*Iout + 发热
DC-DC: 效率比较高,但是可能会带来干扰。DC-DC也简称为BUCK。

6.手机电路图大全:http://pan.baidu.com/s/1sjJgKOH (目前已经访问不到了)

7.基本在iPhone中每个硬件模块都是单独供电的。在不需要的时候就可以断电

Linux内核电源管理综述的更多相关文章

  1. Linux内核内存管理算法Buddy和Slab: /proc/meminfo、/proc/buddyinfo、/proc/slabinfo

    slabtop cat /proc/slabinfo # name <active_objs> <num_objs> <objsize> <objpersla ...

  2. linux驱动程序之电源管理之linux的电源管理架构(3)

    设备电源管理 Copyright (c) 2010 Rafael J. Wysocki<rjw@sisk.pl>, Novell Inc. Copyright (c) 2010 Alan ...

  3. Linux内核内存管理子系统分析【转】

    本文转载自:http://blog.csdn.net/coding__madman/article/details/51298718 版权声明:本文为博主原创文章,未经博主允许不得转载. 还是那张熟悉 ...

  4. Linux内核内存管理

    <Linux内核设计与实现>读书笔记(十二)- 内存管理   内核的内存使用不像用户空间那样随意,内核的内存出现错误时也只有靠自己来解决(用户空间的内存错误可以抛给内核来解决). 所有内核 ...

  5. linux内核--内存管理(二)

    一.进程与内存     所有进程(执行的程序)都必须占用一定数量的内存,它或是用来存放从磁盘载入的程序代码,或是存放取自用户输入的数据等等.不过进程对这些内存的管理方式因内存用途不一而不尽相同,有些内 ...

  6. Linux内核——进程管理与调度

    进程的管理与调度 进程管理 进程描写叙述符及任务结构 进程存放在叫做任务队列(tasklist)的双向循环链表中.链表中的每一项包括一个详细进程的全部信息,类型为task_struct,称为进程描写叙 ...

  7. linux内核内存管理(zone_dma zone_normal zone_highmem)

    Linux 操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,两者不能简单地使用指针传递数据,因为Linux使用的虚拟内存机制,用户空间的数据可能被换出,当内核空间使用用户空间指针时,对应的数 ...

  8. Linux内核内存管理架构

    内存管理子系统可能是linux内核中最为复杂的一个子系统,其支持的功能需求众多,如页面映射.页面分配.页面回收.页面交换.冷热页面.紧急页面.页面碎片管理.页面缓存.页面统计等,而且对性能也有很高的要 ...

  9. Linux内核——内存管理

    内存管理 页 内核把物理页作为内存管理的基本单位.内存管理单元(MMU,管理内存并把虚拟地址转换为物理地址)通常以页为单位进行处理.MMU以页大小为单位来管理系统中的页表. 从虚拟内存的角度看,页就是 ...

随机推荐

  1. Android发展历程

    Android历代版本的命名: 我们都是知道,安卓系统的历来的名称都是很有意思的,下面无限互联Android培训的老师归纳了一下:Android在正式发行之前,最开始拥有两个内部测试版本,并且以著名的 ...

  2. Cron\CronExpression::setPart("24")

    利用laravle实现定时器的功能的时候,报错说:Cron\CronExpression::setPart("24"). 后来发现是时间设置的问题,他不能设置("24:0 ...

  3. 『Sklearn』特征向量化处理

    『Kaggle』分类任务_决策树&集成模型&DataFrame向量化操作 1 2 3 4 5 6 7 8 9 '''特征提取器''' from sklearn.feature_extr ...

  4. 『科学计算_理论』优化算法:梯度下降法&牛顿法

    梯度下降法 梯度下降法用来求解目标函数的极值.这个极值是给定模型给定数据之后在参数空间中搜索找到的.迭代过程为: 可以看出,梯度下降法更新参数的方式为目标函数在当前参数取值下的梯度值,前面再加上一个步 ...

  5. configparser、subprocess模块

    一.configparser模块 该模块适用于配置文件的格式与windows ini文件类似,可以包含一个或多个节(section),每个节可以有多个参数(键=值). 1.创建文件 一般软件的常见文档 ...

  6. hdu 1175 bfs+priority_queue

    连连看 如上图所示如果采用传统bfs的话,如果按照逆时针方向从(1,1)-->(3,4)搜索,会优先选择走拐四次弯的路径导致ans错误: Time Limit: 20000/10000 MS ( ...

  7. RK3288 GMAC整理

    一.源文件 源码路径:\drivers\net\ethernet\rockchip\gmac 源码阅读顺序: 二.重要探针函数stmmac_dvr_probe 1. alloc_etherdev 申请 ...

  8. Sring类的codePointAt()方法

    工作中遇到一段代码 private static String getClassNameWithoutPackage(Class cl) { String className = cl.getName ...

  9. iOS使用UIWebView遇到Error Domain=WebKitErrorDomain Code=101 “The operation couldn’t be completed. (WebKitErrorDomain error 101

    现在在接触iOS开发,今天在调试一个界面加载web页面的问题,发现死活无法加载,浏览器里能正常打开,加上相应代码之后得到了错误信息为: 2013-04-18 15:05:06.446 Client_D ...

  10. vsftpd配置虚拟用户为登录用户02

    1.安装vsftpd 安装依赖包: yum -y install pam pam-devel db4 de4-devel db4-uitls db4-tcl 新建vsftpd系统用户: #建立Vsft ...