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,如图所示。

Linux resume流程_第1张图片

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执行的具体流程应该是怎样?

你可能感兴趣的:(Linux,linux)