Linux resume流程

      

目录

 

resume执行流程:

resume各阶段主要动作:


       本文主要介绍Linux系统resume唤醒的软件执行流程,相对于Linux suspend过程,resume是一个完全逆向过程。

 

resume执行流程:

        Arm核linux系统的Suspend待机过程,是由suspend_ops->enter进入到Arm核固件级别的待机状态。Resume过程时也是由suepend_ops->enter退出固件及待机进入Linux系统的唤醒流程,resume过程也是分多个阶段执行: sys_resume  ->  suspend_resume_noirq-> suspend_resume_early -> suspend_resume,如图所示。

resume各阶段主要动作:

     sys_resume : 调用注册在syscore_ops_list链表上的resume函数,需要在系统阶段进行suspend和resume的机制或者设备会注册到该链表上(自己的划分的阶段,是为更好理解resume和suspend相对性)。

      sys_resume 阶段的位置1:因此时只有boot cpu为active状态,所以arch_suspend_enable_irq函数使能是boot cpu的中断功能;又因为系统的唤醒动作基本都是由中断触发的,所以此处boot cpu中断使能后会立即响应唤醒系统irq,进入irq handle的处理流程。

      suspend_resume_noirq:调用设备的resume_noirq唤醒函数,之后再使能suspend过程关闭的irq。resume_onirq是在非irq状态下执行,其目的更多的是为执行唤醒系统irq的 irq handle执行做准备。如:通过I2C总线与CPU连接外设唤醒系统时,在进入该外设的irq handle前需要保证系统的I2C controller已被唤醒,之后irq handle才可通过I2C 总线访问外设,否则I2C总线没有被唤醒时外设的irq handle将不能成功访问外设。

      suspend_resume_early:  调用设备的resume_early函数,进行设备唤醒;resume_early会在resume函数前调用,因此可以在resume_early函数做唤醒准备或唤醒需要更早唤醒的设备。

       suspend_resume:调用设备resume唤醒设备,更多的外设是在这个阶段本唤醒的。

问题:

   arch_suspend_enable_irq后就有机会切入执行唤醒系统的irq handle,但如果唤醒系统的设备依赖其他系统总线,哪唤醒系统irq 的irq handle执行的具体流程应该是怎样?

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值