首先让我们带着问题进入到armv8架构的学习中。linux中断代码分为两部分entry.S @arch\arm64\kernel\entry.S汇编部分和C代码后续处理。汇编代码中处理最为低级的部分,设置硬件中断向量表,保持当前上下文,切换中断堆栈等任务,这是就如我们嵌入式系统看到那样。
@arch\arm64\kernel\entry.S中对于中断向量表(vectors)的定义如下:
初看这张表,会有很多的疑问:
- 系统在什么状态下,会触发el1_irq,el0_irq这些中断函数?
- EL0,EL1是什么?
- IRQ 32-bit EL0具有代表什么?
- EL1H,EL1t?
一开始我也是看不懂这些代表什么,如果要彻底理解这张表,需要知道一点点ARMV8系统架构中的一些