OK6410A 开发板 (八) 56 linux-5.11 OK6410A armv6 异常之访存异常

本文描述 armv6 异常 中的 data abort 和 instruction fetch abort
  • ARMv6 异常

ARMv6 异常   7种
	reset 和 swi 										共享 SVC异常模式(特权)
	data abort 和 instruction fetch abort				共享 ABT异常模式(特权)
	attempted execution of an Undefined instruction 	UND异常模式(特权)
	IRQ, normal interrupt 								IRQ异常模式(特权)
	FIQ, fast interrupt 								FIQ异常模式(特权)
ARMv6 非异常 2种
	user												user模式(非特权)
	system 												system模式(特权)
  • 中止
中止

在 内存访问流程中 ,ARM处理器可能会发生异常

异常的原因是中止(异常的访问),中止分为三种:

	MMU faults(4)
			MMU检测到限制并向处理器发送信号。
	Debug abort
			监视器调试模式已启用,并且检测到断点或监视点。
	External abort(三种)
			外部内存系统发出非法或错误的内存访问信号。



异常发生时,记录相关的上下文信息 在 register 5register 6 中。

  • 中止导致的异常类型

本文中描述的 中止 会导致 什么异常?

	MMU faults
		如果中止的内存请求是指令获取,则当处理器尝试执行与中止的访问对应的指令时,将引发预取中止异常。
		如果中止的访问是数据访问或缓存维护操作,则会引发数据中止异常。
	Debug event
		当启用监视调试模式时 , 可以由于 指令访问上的breakpoint  而执行中止, 产生 预取中止异常
		当启用监视调试模式时 , 可以由于 数据访问上的watchpoint  而执行中止, 产生 数据中止异常
	External abort
		指令获取时的外部中止 , 可能会产生 预取中止异常(依据是否执行)
		数据读/写时外部中止 , 会产生 数据中止异常
		硬件页表遍历上的外部中止 , 会产生 数据中止异常
中止详细解读
  • 1.MMU faults




	如果MMU检测到中止,不会对检测到中止的地址进行外部访问。

	异常访问源分类:
		如果中止的内存请求是指令获取,则当处理器尝试执行与中止的访问对应的指令时,将引发预取中止异常。
			问题: 如果MMU检测到中止,不会对检测到中止的地址进行外部访问 ,那么 指令没有预取成功, 怎么会尝试执行呢???
			有关预取中止的详细信息,请参阅第A2-16页的异常。

		如果中止的访问是数据访问或缓存维护操作,则会引发数据中止异常。
			有关数据中止的详细信息,请参阅第A2-16页的异常。
	

	faults检查顺序
		MMU用于检查访问faults的顺序在节和页上略有不同。
		第B4-15页的图B4-2显示了两种访问类型的顺序。

	MMU产生四种类型的faults:
		alignment fault
			For details of when alignment faults are generated, see Table A2-10 on page A2-40
		translation fault
			翻译错误有两种类型:
			段
				如果第一级描述符被标记为无效,则生成此项。
					当描述符的位[1:0]都是0时,就会发生这种情况;
					或VMSAv6中, 描述符的位[1:0]值为0b11(保留值)
			页
				如果第二级描述符被标记为无效,则生成此项。
					如果描述符的位[1:0]都是0,就会发生这种情况。

			会不会刷新 TLBs
				页表条目(PTE) fetches 会导致翻译错误,保证不会更新 TLBs . 
				翻译错误时刷新损坏的条目不需要TLB维护操作 .

		domain fault
			有两种类型的域故障:
				区段域故障
					返回有效的第一级描述符时 检查域。
				页域错误
					返回有效的第二级描述符时 检查域.(基于一级描述符的域字段)。

			会不会刷新 TLBs
				如果域错误导致对关联页表的更新,则需要刷新相应的TLB条目以确保正确性。
				有关详细信息,请参阅第B2-22页上TLB维护操作和内存顺序模型中的页表条目更新示例。
			内存顺序模型 相关
				对域访问控制寄存器的更改通过执行预取刷新操作(或由于异常或异常返回)进行同步。
				参见对CP15寄存器和存储器顺序的更改模型见第B2-24页。

		permission fault
			检查时机:
				如果两位域字段返回client(01),则对TLB条目中的access permission字段执行权限访问检查。
			会不会刷新 TLBs
				如果权限错误导致对关联页表的更新,则需要刷新相应的TLB条目以确保正确性。
				有关详细信息,请参阅第B2-22页上TLB维护操作和内存顺序模型中的页表条目更新示例。

  • 2.Debug event

	中止发生时机:
		当启用监视调试模式时 , 可以由于 指令访问上的breakpoint 或 数据访问上的watchpoint 而执行中止。
	指令访问上的breakpoint
		FSR 被更新(指令或数据)用以指示调试中止 // 这是保存在预取中止(断点)调试事件上的唯一信息
		R14_abt 被更新 用于确定失败指令的地址    // 这是一个精确的中止。
	数据访问上的watchpoint
		WFAR 被给你更新,用于 确定是哪个指令导致了调试事件 	// 器必须读取Watchpoint错误地址寄存器(WFAR)
		R14_abt 不能用于判断失败指令的地址 					// 监视点并不精确,因为之后的指令可以在加载和存储下运行
  • 3.External abort


	谁发出的 中止
		外部存储器错误是指发生在存储器系统中而不是由MMU检测到的那些错误。
		外部内存错误很少见,并且可能会对正在运行的进程造成致命的影响。
	例子
		L2内存结构上的不可纠正奇偶校验或ECC故障。
	实现定义
		它是实现定义的,如果有的话,支持外部中止。

	概念
		精确: 硬件 设置的 R14_abt 是更新的.


	更新的寄存器
		DFSR或IFSR中会发出精确外部中止的信号。
		有关不精确外部中止模型的更多详细信息,请参见第A2-23页的不精确数据中止。

	指令获取时的外部中止
		存储器系统向ARM处理器发出存储器中止(Abort)信号,预取的指令被记为无效.
		是否精确
			指令预取期间外部生成的错误本质上是精确的

		是否会导致异常产生
			如果指令未被执行,则预取指令中止不会发生。 // 示例在指令流水线中发生了跳转
			当CPU试图执行从导致错误的位置获取的指令时,预取指令中止会发生.
		更新的寄存器
			不更新 Fault Address register

	数据读/写时外部中止
		数据读写过程中外部生成的错误可能不精确。
			在这种中止的情况下进入中止处理程序时,不能保证 R14_abt 中存在 与导致异常的指令相关的地址
			相应地,外部中止可能无法恢复
				1. 中止状态不是重新进入	
					如果不精确的外部中止导致进入中止状态,而中止状态不是重新进入,则处理器处于不可恢复状态,因为R14和SPSR值已损坏。
				2. 中止状态是重新进入	
					由于这个原因,只有在中止状态重新进入时,处理器才会识别出不精确的外部中止。
					这是通过在CSPR中为不精确的外部中止提供一个掩码来管理的,这个掩码称为位。
		更新的寄存器
			更新 DFSR  // 指示存在不精确的外部中止。
			不更新 FAR 

	硬件页表遍历上的外部中止
		在硬件页表访问上发生的外部中止必须与页表数据一起返回。 // 这个返回是什么意思??? 
		这样的中止是精确的。
		更新的寄存器
			更新FAR
			更新FSR(指令或数据) // 表明发生了这种情况。
		
	奇偶校验错误报告
		是否精确
			奇偶校验错误可以作为精确(例如,从一级缓存命中读取)或不精确(例如,缓存线填充)中止发生
		定义了什么
			架构定义了
				1.用于报告奇偶校验错误的故障状态代码
			实现定义了
				1.提供哪些奇偶校验错误支持
				2.是否使用指定的故障状态代码或其他适当的编码来报告它们


本文主要讲述了 内存系统相关的异常 的原因(中止)的 分类,对应 data abort 和 instruction fetch abort				共享 ABT异常模式(特权)

访存异常产生的流程图
  • Figure B4-2 Sequence for checking faults
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值