• Linux内核电源管理综述



    资料:
    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内核电源管理子系统源码:driversasepower

    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。

    补充:LDO:(Low Dropout Regulator)是阻性电源产品,通过内部MOSFET 的开关,只能进行降压输出,输出电压一定不高于入电压要低。LDO 的效率一般为输出电压/输入电压。也就是,如果说输出电压1.8 V,输入电压为3.6 V 时,理论上它的效

    率只有50%。

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

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

  • 相关阅读:
    Android Handler主线程和一般线程通信的应用分析
    在java中string为什么要设计成final的
    Java中有几种创建对象的方式
    String和StringBuilder、StringBuffer的区别
    正确的二分查找实现
    SSH编写程序中文乱码解决
    lamda表达式
    kmp算法核心代码
    简洁清晰的quicksort核心代码
    [趣题]生成多个质数的幂积序列
  • 原文地址:https://www.cnblogs.com/hellokitty2/p/9975715.html
Copyright © 2020-2023  润新知