内核稳定性问题复杂多样,最常见的莫过于“kernel panic”,意为“内核恐慌,不知所措”。这种情况下系统自然无法正常运转,只能自我结束生命,留下死亡信息。诸如: “Unable to handle kernel XXX at virtual address XXX” “undefined instruction XXX” “Bad mode in Error handler detected on CPUX, code 0xbe000011 -- SError” ...... 这些死亡信息是系统在什么状态下产生?如何产生?以及如何处理?本文主要从这三个方面介绍ARMv8架构下CPU的异常处理流程。 一、ARMv8异常简介 1.异常级别 不同于Armv7架构采用CPU模式切换的方式进行异常处理,Armv8架构定义了一组全新的异常级别进行异常处理,即EL0至EL3,有如下特性:
一个实现可以不包括所有的异常级别,但都必须包括EL0和EL1。EL2和EL3是可选的。 如下是典型的异常级别使用模型: ![]() 2. 同步异常和异步异常 如果满足以下所有条件,则将异常描述为同步的:
如果满足以下任一条件,则将异常描述为异步的:
3. 主要寄存器 (1)通用寄存器R0-R30 在基本指令集处理指令时,将使用通用寄存器组。它包括31个通用寄存器R0-R30。这些寄存器可以作为31个64位寄存器X0-X30或31个32位寄存器W0-W30进行访问。
|