打印

linux内核3.x的电源管理研究

[复制链接]
2561|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
keer_zu|  楼主 | 2020-3-19 14:24 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
沙发
keer_zu|  楼主 | 2020-3-19 14:43 | 只看该作者
本帖最后由 keer_zu 于 2020-3-19 15:08 编辑

通过下面程序:


/*************************** Main ***********************************/
int main(int argc, char **argv)
{
    XX_Autosleep_Enable(1);

    while (deamon_flag) {
        sleep(1);
    }

    return 0;
}



在打开开发板上linux系统的auto sleep之后,将进程杀掉,这时候系统会进入休眠模式,可以看到下面打印信息:

  221.312292] Freezing remaining freezable tasks ... (elapsed 0.003 seconds) done.
[  221.322026] Suspending console(s) (use no_console_suspend to debug)
[  221.356825] [gale] quectel_low_consume_suspend: OK ###############################
[  221.362071] msm_serial_hs_suspend(): jun test
[  221.362078] PM: suspend of devices complete after 32.311 msecs
[  221.363456] PM: late suspend of devices complete after 1.340 msecs
[  221.365111] PM: noirq suspend of devices complete after 1.614 msecs
[  221.365161] suspend ns:     221365144824        suspend cycles:       9966203615
[  221.365144] CPU0:msm_cpu_pm_enter_sleep mode:3 during suspend
[  221.365144] resume cycles:      10196593398
[  221.367060] PM: noirq resume of devices complete after 1.049 msecs
[  221.368093] PM: early resume of devices complete after 0.644 msecs
[  221.377232] Resume: sysfs_notify wakeup_in
[  221.377525] [gale] quectel_low_consume_resume:  ###############################
[  221.378102] msm_otg 78d9000.usb: phy_reset: success
[  221.436430] PM: resume of devices complete after 68.291 msecs
[  221.499950] msm_otg 78d9000.usb: msm_otg_reset motg->inputs=1, motg->id_state=1
[  221.500070] msm_otg 78d9000.usb: USB exited from low power mode
[  221.530945] Restarting tasks ... done.
[  221.553122] cpufreq: Frequency violation fixed for CPU0
[  221.558334] PM: suspend exit 1980-01-06 03:25:28.091607828 UTC
[  223.042426] PM: suspend entry 1980-01-06 03:25:29.575692202 UTC
[  223.047464] msm_otg 78d9000.usb: USB in low power mode
[  223.052538] PM: Syncing filesystems ... done.
[  223.062319] Freezing user space processes ...
[  223.073352] mbim_read: Waiting failed
[  223.080123] (elapsed 0.013 seconds) done.
[  223.083133] Freezing remaining freezable tasks ... (elapsed 0.003 seconds) done.
[  223.092845] Suspending console(s) (use no_console_suspend to debug)


在bing下搜索:
Freezing remaining freezable tasks

可以找到linux下关于power manager的内容:



这里正好有待机流程的分析,先向别人学习一下,哈哈


1:待机节点创建



static int __init pm_init(void)
{
        int error = pm_start_workqueue();
        if (error)
                return error;
        hibernate_image_size_init();
        hibernate_reserved_size_init();
        power_kobj = kobject_create_and_add("power", NULL);
        if (!power_kobj)
                return -ENOMEM;
#ifdef CONFIG_X86_INTEL_XGOLD
        power_hal_kobj = kobject_create_and_add("power_HAL_suspend",
                                        power_kobj);
        if (!power_hal_kobj)
                return -ENOMEM;
#endif
        error = sysfs_create_group(power_kobj, &attr_group);
        if (error)
                return error;
        pm_print_times_init();
        return pm_autosleep_init();
}

core_initcall(pm_init);

可以看到,内核创建了一个核心节点 ----- "power"节点。如何创建核心节点,参看:linux如何创建核心节点
power节点是在sysfs的ops下创建。它的位置就是 /sys/power

同时,在linux内核代码中找到这些内容的出处:

kernel-src/kernel/power/main.c






使用特权

评论回复
板凳
keer_zu|  楼主 | 2020-3-19 15:14 | 只看该作者
power节点下子节点群创建

继续拿来主义.....

power作为内核待机主要节点。也能够说是父节点,非常多相关节点都在它低下创建。这就要看它的attribute_group

static struct attribute * g[] = {
        &state_attr.attr,
#ifdef CONFIG_PM_TRACE
        &pm_trace_attr.attr,
        &pm_trace_dev_match_attr.attr,
#endif
#ifdef CONFIG_PM_SLEEP
        &pm_async_attr.attr,
        &wakeup_count_attr.attr,
#ifdef CONFIG_PM_AUTOSLEEP
        &autosleep_attr.attr,
#endif
#ifdef CONFIG_PM_WAKELOCKS
        &wake_lock_attr.attr,
        &wake_unlock_attr.attr,
#endif
#ifdef CONFIG_PM_DEBUG
        &pm_test_attr.attr,
#endif
#ifdef CONFIG_PM_SLEEP_DEBUG
        &pm_print_times_attr.attr,
#endif
#endif
#ifdef CONFIG_FREEZER
        &pm_freeze_timeout_attr.attr,
#endif
        NULL,
};


例如,以下是子节点:

# ls /sys/power/
autosleep          pm_freeze_timeout  wake_lock          wakeup_count
pm_async           state              wake_unlock




使用特权

评论回复
地板
icecut| | 2020-3-19 22:24 | 只看该作者
这个先问问fae, 他们的所有设备都支持休眠了没

使用特权

评论回复
5
海中水| | 2020-3-20 09:05 | 只看该作者
这个方面值得研究。我先打个样,最近工作牵扯到TBOX的功耗的问题,里面modem是用的Linux系统,低功耗整体方案是用的睡眠+外部RTC唤醒的机制。

使用特权

评论回复
6
keer_zu|  楼主 | 2020-3-20 10:27 | 只看该作者
yyy71cj 发表于 2020-3-20 10:15
这个省电,还需要程序控制,嗯嗯,我感觉比较高深。要是所有芯片,都支持一线休眠就好了…… ...

就是让系统(包括子系统,如外设)在空闲的时候就进入低功耗状态,变着法省电。

使用特权

评论回复
7
keer_zu|  楼主 | 2020-3-20 10:28 | 只看该作者
icecut 发表于 2020-3-19 22:24
这个先问问fae, 他们的所有设备都支持休眠了没

正想@你呢,没找到你的ID,哈哈
这是linux系统本身就支持的,我们只是想把它用起来。看看结果

使用特权

评论回复
8
keer_zu|  楼主 | 2020-3-20 10:29 | 只看该作者
海中水 发表于 2020-3-20 09:05
这个方面值得研究。我先打个样,最近工作牵扯到TBOX的功耗的问题,里面modem是用的Linux系统,低功耗整体方 ...

我们这次遇到的事情简直一模一样,多多交流,哈哈
请问TBOX是什么,我也听同事们说过,不懂。
给个TBOX的详细说明,让我扫扫盲

使用特权

评论回复
9
海中水| | 2020-3-20 13:27 | 只看该作者
keer_zu 发表于 2020-3-20 10:29
我们这次遇到的事情简直一模一样,多多交流,哈哈
请问TBOX是什么,我也听同事们说过,不懂。
给个TBOX的 ...

啊啊啊!看起来接下来我们要多多交流。

使用特权

评论回复
10
keer_zu|  楼主 | 2020-3-20 13:49 | 只看该作者
海中水 发表于 2020-3-20 13:27
啊啊啊!看起来接下来我们要多多交流。

看来车载对低功耗的需求开始普遍了,TBOX我看了,跑的android,带定位和通信功能,但是不明白这东西为什么要单独整成一款产品。

使用特权

评论回复
11
海中水| | 2020-3-20 14:40 | 只看该作者
keer_zu 发表于 2020-3-20 13:49
看来车载对低功耗的需求开始普遍了,TBOX我看了,跑的android,带定位和通信功能,但是不明白这东西为什 ...

没有不是全部跑的android

使用特权

评论回复
12
icecut| | 2020-3-20 21:54 | 只看该作者
我在芯片公司的时候,旁边的那个哥们一个一个片内设备测试休眠的支持,重启后是不是还是正常的.太累了.

使用特权

评论回复
13
keer_zu|  楼主 | 2020-3-22 10:47 | 只看该作者
icecut 发表于 2020-3-20 21:54
我在芯片公司的时候,旁边的那个哥们一个一个片内设备测试休眠的支持,重启后是不是还是正常的.太累了.[em:1: ...

睡眠功能和操作系统的核心功能紧密相连,而且被各种事件(如中断)唤醒。

使用特权

评论回复
14
bg4ajb| | 2020-4-17 10:50 | 只看该作者
这个问题比较复杂,很多系统里面实际是没用实现这些低功耗的基础的。
可以分成几个部分讨论:
1. 应用的启动的多少,这个涉及到CPU Freq的提高导致的高功耗,这个是纯软件的,通过在HAL层,Lib库调用再调试可以解决。
2. 软件和硬件配合,每个子模块一路可关断的供电,这样可以根据HAL层的需求,再在底层驱动实现供电的开关,这样会比较明显,尤其是Sleep模式下。
3. 涉及到硬件
目前的硬件设计包括TBOX,NAVI都是要尽量节省成本,这个会导致很多供电合并,这样就实现不了低功耗了。

使用特权

评论回复
评论
海中水 2020-4-18 11:10 回复TA
@keer_zu :这个是实际的! 
keer_zu 2020-4-17 16:46 回复TA
@海中水 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1352

主题

12436

帖子

53

粉丝