107|2

8

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

《Linux内核深度解析》-异常处理 [复制链接]

《Linux内核深度解析》-异常处理

一、异常级别

二、异常分类

异常分为同步异常和异步异常。如下图所示

 

三、异常处理

    以出现用户模式(异常级别0)下访问数据时生成的页错误异常为例。

el0_sync:
	kernel_entry 0
	mrs	x25, esr_el1			// read the syndrome register
	lsr	x24, x25, #ESR_EL1_EC_SHIFT	// exception class
	cmp	x24, #ESR_EL1_EC_SVC64		// SVC in 64-bit state
	b.eq	el0_svc
	cmp	x24, #ESR_EL1_EC_DABT_EL0	// data abort in EL0
	b.eq	el0_da                   //调用el0_da   
	cmp	x24, #ESR_EL1_EC_IABT_EL0	// instruction abort in EL0
	b.eq	el0_ia
	cmp	x24, #ESR_EL1_EC_FP_ASIMD	// FP/ASIMD access
	b.eq	el0_fpsimd_acc
	cmp	x24, #ESR_EL1_EC_FP_EXC64	// FP/ASIMD exception
	b.eq	el0_fpsimd_exc
	cmp	x24, #ESR_EL1_EC_SYS64		// configurable trap
	b.eq	el0_undef
	cmp	x24, #ESR_EL1_EC_SP_ALIGN	// stack alignment exception
	b.eq	el0_sp_pc
	cmp	x24, #ESR_EL1_EC_PC_ALIGN	// pc alignment exception
	b.eq	el0_sp_pc
	cmp	x24, #ESR_EL1_EC_UNKNOWN	// unknown exception in EL0
	b.eq	el0_undef
	cmp	x24, #ESR_EL1_EC_BREAKPT_EL0	// debug exception in EL0
	b.ge	el0_dbg
	b	el0_inv

    对于用户模式(异常级别0)下生成的同步异常,入口是el0_sync。该入口函数在arch/arm64/kernel/entry.s中

通过上面代码,跳到对应的异常处理函数, 

其中:访问数据时生成的页错误异常,通过(   b.eq    el0_da                   //调用el0_da   )这行代码,进入   el0_da   函数。

下面为 el0_da   函数代码

el0_da:
	/*
	 * Data abort handling
	 */
	mrs	x26, far_el1    //获取数据的虚拟地址
	// enable interrupts before calling the main handler
	enable_dbg_and_irq    //开启调试异常和中断
	ct_user_exit
	bic	x0, x26, #(0xff << 56)
	mov	x1, x25
	mov	x2, sp
	bl	do_mem_abort     //调用do_mem_abort函数
	b	ret_to_user

   通过do_mem_abort(  ) 函数将异常信息进行处理。

最新回复

已下载学习了,谢谢楼主的介绍。   详情 回复 发表于 昨天 14:35
点赞(1) 关注

回复
举报

73

帖子

0

TA的资源

一粒金砂(中级)

沙发
 

已下载学习了,谢谢楼主的介绍。

点评

共同进步  详情 回复 发表于 昨天 15:38
 
 

回复

8

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
风尘流沙 发表于 2025-1-14 14:35 已下载学习了,谢谢楼主的介绍。

共同进步

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表