无线电爱好网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

无线电爱好网 首页 技术应用 单片机 查看内容

ARMv8 异常处理简介

2022-10-13 10:19| 发布者: 闪电| 查看: 9| 评论: 0

摘要: 内核稳定性问题复杂多样,最常见的莫过于“kernel panic”,意为“内核恐慌,不知所措”。这种情况下系统自然无法正常运转,只能自我结束生命,留下死亡信息。诸如:“Unable to handle kernel XXX at virtual addre ...


其次设置栈帧大小S_FRAM_SIZE,S_FRAM_SIZE根据pt_regs结构体大小而设定。


pt_regs结构体:


另外就是读取elr_el1和spsr_el1等寄存器值。总之,kernel_entry主要将CPU寄存器按照pt_regs结构体的定义将异常第一现场保存到栈上。


(2)判断异常类型


kernel_entry保存完第一现场之后,接下来读取esr_el1寄存器的值,并判断异常的具体类型。如2.3.5章节所描述的ESR寄存器定义,ESR包含的异常信息主要用于异常处理程序确定异常原因,其中ESR_ELn的BIT[31:26] EC域指示处理程序执行的对应异常类型。


发生DataAbort时,EC = 0b100101,即ESR_ELx_EC_DABT_CUR=0x25,el1_syn将跳转至el1_da。


ESR_ELx_EC_DABT_CUR定义在/kernel/msm-4.19/arch/arm64/include/asm/esr.h。


除此之外,还有其他的同步异常类型,比如:


(3)跳转至异常类型标签


通过esr_el1寄存器值确定同步异常的具体类型后,跳转至对应的异常处理标签el1_da。el1_da第一条指令,mrs x3,far_el1,将far_el1保存到x3。在2.4异常入口章节介绍过如果发生数据中止异常(DataAbort exception),故障的虚拟地址将保存在FAR_ELx中。这里就是首先将data abort异常发生的虚拟地址第一时间取出,保持在x3中。


el1_da 跳转到异常处理程序do_mem_abort之前,为其设置好了三个入参:


  • x0:产生DataAbort的故障虚拟地址。


  • x1:esr_el1,异常综合表征寄存器值,在el1_sync第二条指令已经保存。


  • x2:stack frame 地址,即pt_regs结构体的首地址,在kernel_entry已对其填充。



路过

雷人

握手

鲜花

鸡蛋

QQ|关于本站|小黑屋|Archiver|手机版|无线电爱好网 ( 粤ICP备15040352号 ) 无线电爱好技术交流5 无线电爱好技术交流1无线电爱好技术交流9开关电源讨论群LED照明应用、电源无线电爱好技术交流4无线电爱好技术交流8无线电爱好技术交流10无线电爱好技术交流11

粤公网安备 44030702001224号

GMT+8, 2022-10-13 10:19 , Processed in 0.109200 second(s), 17 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

返回顶部