[Linux kernel]系统sleep

本文详细探讨了Linux内核中系统睡眠的流程,包括lpm_suspend_enter()和lpm_cpuidle_enter()两个主要入口点。在进入睡眠状态时,涉及屏蔽RPM中断、MPM配置、系统核心模块的挂起与恢复等关键步骤。当系统没有待处理任务时,CPU会主动进入睡眠状态。此外,还介绍了由应用触发睡眠的机制,如autosleep_store()和state_store()。
摘要由CSDN通过智能技术生成
//以下是进入sleep的关键入口
lpm_cpuidle_enter(,fromidle)或 lpm_suspend_enter(,fromidle)
 ->lpm_enter_low_power()
	->lpm_cpu_prepare(system_state, cpu_index, from_idle);
	->lpm_system_prepare(system_state, idx, from_idle);
		->msm_rpm_enter_sleep() 
			->smd_mask_receive_interrupt() //屏蔽RPM发给AP的中断	
		->msm_mpm_enter_sleep() //进入sleep前配置MPM
	->msm_cpu_pm_enter_sleep(cpu_level->mode, from_idle);
		->execute[mode](from_idle); //调用msm_pm_power_collapse()等
	->lpm_system_unprepare(system_state, cpu_index, from_idle);
		->msm_rpm_exit_sleep();  //不屏蔽RPM发给AP的中断
		->msm_mpm_exit_sleep(from_idle); //退出SLEEP时
	->lpm_cpu_unprepare(system_state, cpu_index, from_idle); 

1)lpm_suspend_enter()被调用的过程

被定义在 lpm_suspend_ops 里:
static const struct platform_suspend_ops lpm_suspend_ops = 
{
	enter = lpm_suspend_enter,
	valid = suspend_valid_only_mem,
	prepare_late = lpm_suspend_prepare,
	wake = lpm_suspend_wake
}

 suspend_set_o
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值