标签:arm 分享 play 体系 .com journey block png stat
见 ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(1)-EL/ET/ST 一文
AArch32、AArch64架构下IRQ 和Data Abort 异常处理流程图对比.
图 AArch32 IRQ 路由
图 AArch64 IRQ路由
图 AArch64 IRQ向量查找
异常类型 |
AArch32 State |
AArch64 State |
||
所在文件 |
C 函数 |
所在文件 |
C 函数 |
|
Und |
arm/kernel/traps.c |
do_undefinstr |
Arm64/kernel/traps.c |
do_undefinstr |
Data Abort |
arm/mm/fault.c |
do_DataAbort |
arm64/mm/fault.c |
do_mem_abort |
IRQ |
arm/kernel/irq.c |
asm_do_IRQ |
arm64/kernel/irq.c |
handle_IRQ |
FIQ |
||||
System Call |
例举Data Abort 和 IRQ中断的入口流程图
分析64位kernel_entry 压栈代码逻辑(代码路径:kernel/arch/arm64/kernel/entry.S)
压栈准备 |
说明 |
? sp指向 #S_LR – #S_FRAME_SIZE 位置 |
#S_FRAME_SIZE是pt_regs结构图的size |
? 依次把x28-x29 … x0-x1 成对压入栈内 |
每压入一对寄存器,sp指针就移动 -16 =((64/8)*2)字节长度,栈是向地址减少方向增长的. |
? 保存sp+#S_FRAME_SIZE数据到x21 |
add x21, sp, #SP_FRAME_SIZE |
? 保存elr_el1到x22 |
mrs x22, elr_el1 |
? 保存spsr_el1到x23 |
mrs x23, spsr_el1 |
? 把lr、x21写入sp+#S_LR地址内存 |
保存lr和x21的数据到指定栈内存位置 |
? 把x22、x23写入sp+#S_PC地址内存 |
保存elr,spsr数据到指定栈内存位置 |
[1] DDI0487A_k_armv8_arm_iss10775.pdf
标签:arm 分享 play 体系 .com journey block png stat
原文地址:http://www.cnblogs.com/smartjourneys/p/6848204.html