linux之待机流程

来源:互联网 发布:二维码解码器软件 编辑:程序博客网 时间:2024/05/02 13:17

采用wakeup source 机制,wakeup source 是一种suspend blocker,它阻碍系统进入休眠

起点:sys/power/autosleep 写入mem;off

→pm_autosleep_set_state(state)              //----------------kernel/kernel/power/main.c

∣↘queue_up_suspend_work()

∣↘try_to_suspend()

      ∣↘pm_get_wakeup_count()//-----------判断当前是否有wakeup_lock

      ∣↘pm_suspend()//----------------打印开始进入suspend的时间

             ∣↘enter_state()  [PM:suspend entry 年月日]

             ∣↘sys_sync();  [PM:syncying file systems …done]

                   ∣↘suspend_prepare()          //-----------all user serves suspendhere

                          ∣↘pm_prepare_console()

                          ∣↘pm_notifier_call_chain()

                          ∣↘suspend_freeze_processes()

                                  ∣↘freeze_proceses()

                                  ∣↘freeze_kernel_threads()

                ∣↘suspend_devices_and_enter()  //all extern devices supend here

                         ∣↘suspend_ops->begin()

                         ∣↘suspend_console()  [use no_console_suspend to debug]

                         ∣↘dpm_suspend_start()

                                ∣↘dpm_prepare()

                                       ∣↘device_prepare

                                ∣↘dpm_suspend()   

                                        ∣↘device_suspend   [pm:suspend of devicescomplete after…所有设备-----再次检查是否有wakeup_lock持有]

                                                ∣↘__device_suspend

                                                             ∣↘dev->class->suspend/dev->bus->suspend---------------调用真正驱动中定义的supend函数

                          ∣↘suspend_enter()

                                  ∣↘suspend_ops_prepare()

                                  ∣↘dpm_suspend_end()

                                          ∣↘dpm_suspend_late()  [pm:latesuspend of]

                                          ∣↘dpm_suspend_noirq()  [pm:noirq suspend of]

                                  ∣↘suspend_ops->prepare_late()//准备待机,进行检查

                                  ∣↘disable_nonboot_cpus()  [disabling non_boot cpus…]

                                  ∣↘arch_suspend_disable_iqrs()

                                  ∣↘syscore_suspend()

                                  ∣↘suspend_ops->enter()//检查没有问题真正待机

                                         ∣↘lpm_suspend_enter()  [深待机,可输出GPIO,clock, LDO信息]

                                                  ∣↘lpm_enter_low_power()                                                      

                                                          ∣↘msm_cpu_pm_enter_sleep()

0 0
原创粉丝点击