1. 用户空间产生异常
d()函数里对空指针赋值,由于0地址属于非法地址,访问时会被MMU(内存保护单元)拦截,并发送abort信号给CPU:
ARM CPU有1张异常向量表响应对应的异常(可以存放在0x00000000或0xFFFF0000处,目前配置为0xFFFF0000),访问0地址对应的是data abort,如果程序跑飞则对应的是prefetech abort:
此时从用户态切换到了内核态,在内核态,会将当前的上下文保存并记录异常的地址和类型,内核处理完成后在返回用户态。
以下是对应的异常向量表的汇编代码(对应的代码:alps/kernel/arch/arm/kernel/entry-armv.s):
d()函数里对空指针赋值,由于0地址属于非法地址,访问时会被MMU(内存保护单元)拦截,并发送abort信号给CPU:
ARM CPU有1张异常向量表响应对应的异常(可以存放在0x00000000或0xFFFF0000处,目前配置为0xFFFF0000),访问0地址对应的是data abort,如果程序跑飞则对应的是prefetech abort:
此时从用户态切换到了内核态,在内核态,会将当前的上下文保存并记录异常的地址和类型,内核处理完成后在返回用户态。
以下是对应的异常向量表的汇编代码(对应的代码:alps/kernel/arch/arm/kernel/entry-armv.s):