在ARM V4及V4T以后的大部分处理器中,中断向量表的位置可以有两个位置:一个是0,另一个是0xffff0000。可以通过CP15协处理器c1寄存器中V位(bit[13])控制。V和中断向量表的对应关系如下: [V=0]0x00000000~0x0000001C /[V=1]0xffff0000~0xffff001C 。Linux内核使用0xffff0000。
异常向量的代码很简单,只是一些跳转指令。发生异常时,cpu自动执行这些指令,跳转到更复杂得代码。
地址__vectors_start~__vectors_end间的代码就是异常向量,在arch/arm/kernel/entry-armv.S中定义,这些异常向量会被复制到0xffff0000处。
.globl __vectors_start
__vectors_start:
swi SYS_ERROR0 //复位时,cpu将执行这条指令
b vector_und + stubs_offset //未定义异常时,cpu执行这条指令
ldr pc, .LCvswi + stubs_offset //swi异常
b vector_pabt + stubs_offset //指令预取终止
b vector_dabt + stubs_offset //数据访问终止
b vector_addrexcptn + stubs_offset //没有用到
b vector_irq + stubs_offset //irq异常
b vector_fiq + stubs_offset //fiq异常
.globl __vectors_end
__vectors_end:
“更复杂得代码”在地址__stubs_start~__stubs_end之间,在arch/arm/kernel/entry-armv.S中定义,这些异常向量会被复制到0xffff0200处。
__stubs_start
关于stubs_offset的值及解析,参考Linux异常体系之stubs_offset
关于__stubs_start~__stubs_end之间的代码解析,参考vector_stub宏解析 。vector_irq、 vector_dabt、vector_pabt、vector_und、vector_fiq都在它们中间。
各种异常的C处理函数分为5类,分布在不同的函数中。
1.中断处理C总入口函数asm_do_IRQ,在linux/arch/arm/kernel/irq.c中。它调用其它文件注册的中断处理函数。
init_IRQ函数被用来初始化中断的处理框架,设置各种中断的默认处理函数。当中断发生时,中断总入口函数asm_do_IRQ就可以调用这些函数坐进一步的处理。
b vector_irq + stubs_offset
-->vector_stub irq, IRQ_MODE, 4
-->__irq_usr/__irq_svc
-->void __exception asm_do_IRQ(unsigned int irq, struct pt_regs *regs)
2.未定义指令处理C总入口函数do_undefinstr,在linux/arch/arm/kernel/traps.c中。
b vector_und + stubs_offset
-->vector_stub und, UND_MODE
-->__und_usr/__und_svc
-->b do_undefinstr
3.与内存访问相关的异常处理C总入口函数do_DataAbort,do_PrefechAbort,在linux/arch/arm/kernel/fault.c中。
4.swi异常处理函数,在在linux/arch/arm/kernel/calls.S中。swi异常的处理函数指针被组织成一个表格;swi指令机器码的为[23:0]用来作为索引,通过不同的“swi index”指令可以调用不同的swi异常处理函数,也称为系统调用,比如sys_open、sys_read、sys_write等。
5.没有使用的异常,linux中没有使用FIQ异常。
上一篇:ARM MMU
下一篇:Linux中断体系结构
推荐阅读最新更新时间:2026-03-21 10:49
- LM2904DMR2G 函数发生器运算放大器的典型应用
- DEMO9RS08KA2: DEMO9RS08KA2 Demonstration Board
- MCP73871EV,MCP73871 锂离子电池充电器评估板
- STEVAL-IHM039V1,采用 STM32F415 微控制器的双电机控制演示板
- LTC1606CG 演示板、16 位、250ksps ADC
- RT8086B 3.5A、1.2MHz、同步降压转换器的典型应用
- TS4999EIJT 典型应用 免滤波器立体声 2.8 W D 类音频功率放大器,可选择 3D 音效
- LTM4615,采用 15mm-15mm 封装的完整双路和三路输出负载点模块稳压器
- LTC2415-1IGN 24 位 ADC 的典型应用电路使用电阻器阵列在励磁放大器中提供精确匹配
- 使用 Analog Devices 的 LTC1450LIN 的参考设计

Linux技术手册
【2025 DigiKey创意大赛】 学伴智盒 - 代码
智能机械臂
现代雷达系统的信号设计
BFR340T






京公网安备 11010802033920号