执行不可屏蔽中断的方法和装置的制造方法_3

文档序号:9524057阅读:来源:国知局
义函数以完成用户定义处理。
[0070]其中,用户定义处理可以是用户定义的,能够在不可屏蔽流程中的非安全模式下执行的指令。用户定义处理,可以由用户根据系统的需要定制,例如可以包括:保存系统日志、上报0S的状态和喂狗中的至少一种,以完成本次中断的一些惯常的后续处理,例如,保存系统日志,上报本次中断0S的状态,清空Watch Dog的计时器告等等。
[0071]用户定义处理还可以包括用户定义的一些其它处理,本发明实施例对此不作限定。用户定义函数中可以包括再次进入EL3模式时,所进入的函数的地址。
[0072]ARM架构的EL3模式下,不能实现本发明实施例的用户定义处理,因而需返回非安全模式(ELI模式)中来执行。
[0073]S250和S260,可以对应于S130返回该非安全模式执行用户定义处理,包括:在该安全模式下完成该中断上下文的保存后,根据该安全模式的异常返回地址返回该非安全模式,执行用户定义函数以完成该用户定义处理。
[0074]S270,在用户定义处理完成后,通过ARM架构中通用的安全监控呼叫(SecureMonitor Call, SMC)指令再次从ELI进入EL3,即安全模式,进入S260该的函数。该函数可以为恢复函数,用于根据中断上下文恢复0S状态,但本发明实施例不限于此。
[0075]S280,在中断上下文恢复后,返回非安全模式,继续执行中断产生时0S的操作。
[0076]应理解,本发明实施例的方法运行在EL3模式时,可以通过Secure Monitor软件完成相应的处理。Secure Monitor软件是可以运行在EL3模式下的一类软件。当CPU在安全模式和非安全模式之间进行切换时均可经过Secure Monitor软件。Secure Monitor软件主要负责CPU在两种模式之间转换时上下文(Context)安全稳定的切换。因而,本发明实施例的实现NMI机制可视为是基于软件实现的。
[0077]本发明实施例中,以Secure Monitor软件为Trust Firmware软件为例进行描述,当然也可以使用其他的Secure Monitor软件,本发明实施例对此不作限定。
[0078]本发明实施例中,为使得系统可执行不可屏蔽中断,在EL3模式系统需要运行trust firmware软件。在系统启动过程中,在对trust firmware初始化过程中需对FIQ进行预配置,使其能够作为安全中断请求来使用。
[0079]因此,在本发明实施例中,S120通过该安全中断请求进入安全模式,在该安全模式下保存该0S的操作中断时0S状态的中断上下文,可以包括:通过该安全模式中运行的安全监测Secure Monitor软件捕获该安全中断请求以进入安全模式,并且通过该SecureMonitor软件在该安全模式下保存该0S的操作中断时0S状态的中断上下文。
[0080]具体地,例如,FIQ的预配置过程可以如图4所示的流程300,包括:
[0081]S310,在系统启动阶段,初始化异常向量表,将异常向量表(runtime_except1ns)的地址初始化为VBAR_EL3。由此,当捕获FIQ时,CPU可以根据异常向量表进入EL3模式。
[0082]S320,配置SCR_EL3寄存器的FIQ位为1。由此,当FIQ产生时,系统可知应执行不可屏蔽中断,从而转向至异常向量表查找应路由至的模式。
[0083]S330,对系统的硬件进行配置,定义由FIQ产生的中断的特性。其中,包括配置GICC FIQEn为1,即GroupO的中断为FIQ形式;设置GICC的FIQBypDisGrpO位为0。使能GICD的GroupO和Groupl,设置中断前将所有安全中断请求的中断使能清除,同时优先级设置为不区分。设置GICC PMR,即不屏蔽任何中断。设置对应安全中断号的中断优先级为0,即最高优先级。设置中断分组寄存器,即设置对应的安全中断号为GroupO。
[0084]对应上述方法100,方法100还可以包括:
[0085]在该安全模式的异常向量表中预配置保存函数的地址,该保存函数用于保存该0S的操作中断时0S状态的中断上下文;
[0086]S120通过该安全中断请求进入安全模式,在该安全模式下保存该0S的操作中断时0S状态的中断上下文,可以包括:
[0087]当产生该安全中断请求时,该安全中断请求不可被屏蔽,根据该地址进入安全模式执行该保存函数。
[0088]应理解,上述预配置的过程也可以不在trust firmware初始化时执行,而是在系统启动的其他过程中执行。或者可以将上述流程分开在系统不同的启动阶段来执行,并且预配置的顺序可以不局限于流程300所给出的顺序。
[0089]本发明实施例中,在完成中断上下文的保存后,根据异常返回地址返回非安全模式(ELI模式的kernel中)的用户定义函数。异常返回地址可以如图5所示的流程400进行预配置,用于将运行在非安全模式下的0S的NMI的中断接口函数注册到安全模式下。
[0090]S410,启动kernel,装载除kernel以外的其他模块的代码。
[0091]S420,调用中断接口函数(例如可以为register_nmi_handler)。该函数通过SMC指令将ELI模式执行的用户定义函数(例如可以为nmi_handler)的地址传送到EL3模式的trust firmware软件中并被记录下来。
[0092]具体地,中断接口函数可以通过SMC指令向trust firmware软件发送两个参数。参数0为用户定义函数的地址,其中用户定义函数可以为用户根据需要定制的函数;参数1为SMC函数标识(ID),例如可以参考SMC调用规范设为0x83000000。其中,0x83000000可以是原始设备制造商(Original Equipment Manufacture,OEM)定义的标识ID,其符合SMC调用规范,实现的功能为保存用户定义函数的地址。继而,系统进入EL3模式的trustfirmware软件,确认SMC函数ID并保存用户定义函数nmi_handler。
[0093]相应地,在该根据该安全模式的异常返回地址返回该非安全模式,执行用户定义函数以完成用户定义处理之前,该方法还包括:
[0094]在该非安全模式的kernel的启动时调用接口函数,该接口函数通过安全监控呼叫SMC指令在该安全模式,将该用户定义函数的地址记录在该异常返回地址中。
[0095]应理解,本发明实施例中也可以通过其他方式,例如中断等方式来将该用户定义函数的地址传递给trust firmware软件,本发明实施例对此不作限定。
[0096]此外,在本发明实施例的ARM架构中,当系统产生其他类型的中断时,即非不可屏蔽中断时,仍然可以依照现有的方式,生成IRQ。由相应的硬件,如IRQ MASK对其进行屏蔽,从而使得应用软件所运行的EL0和kernel运行的ELI等非安全模式不感知该中断。本发明实施例对非不可屏蔽中断的实施方式不作限定。
[0097]还应理解,在本发明的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
[0098]上文中结合图1至图5详细描述了根据本发明实施例的执行不可屏蔽中断的方法,下面将结合图6和图7描述根据本发明实施例的执行不可屏蔽中断的装置。
[0099]如图6所示,该执行不可屏蔽中断的装置500包括:
[0100]中断模块510,用于在非安全模式下获取安全中断请求,并中断操作系统0S的操作,该安全中断请求不可被屏蔽;
[0101]保存模块520,用于通过该安全中断请求进入安全模式,在该安全模式下保存该0S的操作中断时0S状态的中断上下文;
[0102]第一执行模块530,用于返回该非安全模式执行用户定义处理;
[0103]恢复模块540,用于在该用户定义处理完成后,再次进入该安全模式,在该安全模式下根据该中断上下文恢复该0S状态;
[0104]第二执行模块550,用于再次返回该非安全模式,继续执行该0S的操作。
[0105]因此,本发明实施例的执行不可屏蔽中断的装置,通过安全中断请求进入安全模式保存中断时0S状态的中断上下文,返回非安全模式执行用户定义处理后再次进入安全模式恢复0S状态,恢复0S状态后再次返回非安全模式继续执行0S的操作,从而可以不依赖于硬件简单地实现匪I。
[0106]在本发明实施例中,该安全中断请求可以为快速中断请求FIQ。
[0107]在本发明实施例中,该用户定义处理可以包括:保存系统日志、上报0S的状态和喂狗中的至少一种。
[0108]在本发明实施例中,该非安全模式可以包括进阶精简指令集机器ARM架构的异常等级EL0和ELI中的至少一种,该安全模式可以包括该ARM架构的EL3。
[0109]在本发明实施例中,该安全中断请求可以是该0S定时触发看门狗生成的,或者可以是由于硬件故障触发看门狗生成的。
[0110]可选地,作为一个实施例,该第一执行模块530具体可以用于:
[0111]在该安全模式下完成该中断上下文的保存后,根据该安全模式的异
当前第3页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1