一、中断的发生、处理过程

  • 中断发生的硬件过程

中断处理的过程和中断发生的过程正好相反

  • 中断处理的软件处理流程

    • CPU执行完当前指令,检查到发生了中断,跳到向量表
    • 保存现场、执行GIC提供的处理函数、回复现场

二、异常向量表的安装

对于arm结构来说,异常向量表有两个地址,一个是地址0x00000000,一个是地址0xffff0000
这个0xffff0000是一个虚拟地址,它需要映射到某个物理的地址,这个物理地址存放的就是异常向量表。

2.1 复制向量表

arch/arm/kernel/entry-armv.S程序入口,需要把这个复制到内核种,并映射:

    .section .vectors, "ax", %progbits
.L__vectors_start:W(b)    vector_rstW(b)    vector_undW(ldr)  pc, .L__vectors_start + 0x1000W(b)    vector_pabtW(b)    vector_dabtW(b)    vector_addrexcptnW(b)    vector_irqW(b)    vector_fiq.data

从源头开始看,对于arm架构,这是第一个运行的文件:

// arch\arm\kernel\head.Smrc p15, 0, r9, c0, c0      @ get processor idbl  __lookup_processor_type     @ r5=procinfo r9=cpuid//.....bl  __create_page_tables     @ 建立虚拟地址和物理地址的映射关系ldr r13, =__mmap_switched       @ address to jump to after @ 记录函数地址@ mmu has been enabled//....
1:  b   __enable_mmu//....__enable_mmu://....b   __turn_mmu_on          @ 打开mmu
ENDPROC(__enable_mmu)ENTRY(__turn_mmu_on)//....mov r3, r13              @ 把r13 赋值给r3ret r3                     @ 返回r3
__turn_mmu_on_end:
ENDPROC(__turn_mmu_on)__mmap_switched:      @开始执行//....b   start_kernel        @进入c函数的start_kernel
ENDPROC(__mmap_switched)
  • 复制向量表
// init/main.c
asmlinkage __visible void __init start_kernel(void)
{//...setup_arch(&command_line);        //设置架构paging_init(mdesc);       // arch/arm/kernel/setup.c  页的初始化devicemaps_init(mdesc);        // arch/arm/mm/mmu.c 设备映射,复制异常向量表的关键vectors = early_alloc(PAGE_SIZE * 2);       //1.分配新向量表 8k内存early_trap_init(vectors);                            //2.从代码把向量表复制到新向量表//3.映射新向量表到虚拟地址0xffff0000map.pfn = __phys_to_pfn(virt_to_phys(vectors)); //物理地址就是上面分配的map.virtual = 0xffff0000;     //虚拟地址,发生异常时会执行vectorsmap.length = PAGE_SIZE;
#ifdef CONFIG_KUSER_HELPERSmap.type = MT_HIGH_VECTORS;
#elsemap.type = MT_LOW_VECTORS;
#endifcreate_mapping(&map);//...
}

把vectors的向量,复制到对应的地址。

2.2 向量表在哪

上面代码中可以看到代码中向量表位于__vectors_start,它在arch/arm/kernel/vmlinux.lds中定义:

 __vectors_start = .;.vectors 0xffff0000 : AT(__vectors_start) {*(.vectors)}. = __vectors_start + SIZEOF(.vectors);__vectors_end = .;__stubs_start = .;.stubs ADDR(.vectors) + 0x1000 : AT(__stubs_start) {*(.stubs)}

在代码里搜.vectors,可以找到向量表:

三、中断向量

发生中断时,CPU跳到向量表去执行b vector_irq
vector_irq函数使用宏来定义:

四、处理流程

五、处理函数

异常向量表的安装与调用相关推荐

  1. 在linux、optee、ATF中的中断异常向量表

    目录 1.在linux中的异常向量表 (1).arm64的异常向量表-(irq,fiq,svc......) (2).arm32的异常向量表-(irq,fiq,swi......) 2.在optee中 ...

  2. [ARM异常]-linux中(aarch/aarch64)异常向量表介绍

    文章目录 1.ARM的异常向量表基地址寄存器--VBAR 1.1.armv8 : VBAR寄存器 1.2.armv7 : VBAR寄存器 2.ARM的异常向量表的定义 2.1 armv8 :异常向量表 ...

  3. optee的异常向量表-(irq,fiq,svc...)

    文章目录 1. optee中的异常向量表thread_excp_vect 1.1.异步异常elx_irq.elx_fiq中断的处理 1.2.同步异常el0_sync_a64.el0_sync_a32中 ...

  4. [ATF]-ATF的异常向量表介绍-(irq,fiq,smc,hyc...)

    文章目录 1.同步异常向量表-(smc) 1.1.handle_sync_exception调用smc_handler64处理同步异常 2.异类步异常向量表-(irq,fiq...) 2.1.get_ ...

  5. 【嵌入式开发】ARM 异常向量表 ( 异常概念 | 异常处理流程 | 异常向量 | 汇编代码 )

    一. 异常向量表 1. 异常相关概念 (1) 异常 (2) 异常类型简介 2. 异常处理 (1) 异常处理 二. 异常向量表代码编写 1. 初始化异常向量表模块代码 2. 链接器脚本 3. Makef ...

  6. [optee]-optee中的异常向量表的实现

    Optee异常向量表 ARMV8-aarch64 1.optee中定义的异常向量表 2.optee中设置向量表基地址VBAR_EL1 ARMV8-aarch32.ARMV7-aarch32 1.opt ...

  7. u-boot分析(四)---设置异常向量表|设置SVC模式

    u-boot分析(四) 通过前三篇的分析,我们对u-boot已经有了整体的认识和掌握,但是我们仍然对于其部分硬件是如何初始化的不太清楚,所以接下来几篇博文我将会对我们在http://www.cnblo ...

  8. inside uboot (三) 异常向量表

    1. 异常向量表概述 从上面的地址映射来看,中断向量表的地址为0xD0037400,因此如果我们想在SRAM中,也就是BL1中处理异常的话, 就需要把我们的异常向量表拷贝到这个地址上.或者我们可以在链 ...

  9. 中断向量表 异常相量表 中断向量(中断函数入口地址)ARM和X86异常向量表不同

    STM32的中断向量表是干什么的?到底有什么用?它放在哪里? 一.中断向量表里有什么?它放在那里?到底有什么用? 1.中断向量表实际上就是存放在Code区(也就是STM32内部的Flash区)从0x0 ...

最新文章

  1. “寒假”建站创业 选购虚拟主机是关键
  2. 初学duboo+zookeeper
  3. java生成随机数的两种方式
  4. 2019年网络规划设计师上午真题及答案解析
  5. 洛谷P3588 [POI2015]PUS(线段树优化建图)
  6. 安卓微信下video退出视频全屏方法
  7. Cache 和 Buffer 有什么区别
  8. mysql union (all) 后order by的排序失效问题解决
  9. 关于浏览器的兼容性问题
  10. FindFirstFile
  11. 图书馆预约占座系统 (SSM JAVA)
  12. 联想拯救者P7000八代I7 8750H 可以安装WIN7系统吗
  13. python处理nc文件时,遇到不同的产品中经度坐标的排序不一致
  14. 软件人员kpi制定模板_绩效考核软件有哪些,员工绩效考核制度模板
  15. CSS学习笔记 01、CSS3基础知识学习
  16. 软件测试的“道”与“术” - 软件测试新观察(转载崔启亮的文章)
  17. 关系数据库设计 函数依赖 逻辑蕴含
  18. PostgreSQL提示:‘psql: FATAL: ”Peer authentication failed for user ”postgres“’错误#将文件Database administ
  19. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java装修服务分析系统03563
  20. Linux基本知识点整理

热门文章

  1. 深富策略:大盘连续上行 周期股领涨
  2. 准确率、召回率、F1值的思考
  3. 【实战篇】是时候彻底弄懂BERT模型了(收藏)
  4. MapReduce源码解析之Mapper
  5. 远程员工的设备更新和数据迁移应该如何管理?
  6. 新手小白做跨境电商应该从哪里入手?
  7. 店铺如何快速实现数字化管理?不妨参考一下管理系统
  8. 微博的大V经济学,让自媒体今年赚了117亿
  9. 拜耳集全球创新服务中国农业,积极构建粮食系统韧性
  10. vue 图片裁剪上传