# System call flow ## Basic Knowledge ### Arm Assembly ![](https://i.imgur.com/UC8Dsgj.png) ![](https://i.imgur.com/irdBaYX.png) ### ARM64 Arch EL0: User EL1: Kernel EL2: Hypervisor EL3: Secure monitor ![](https://i.imgur.com/59sqkKc.png) 每个exception level都有自己的stack pointer register,名字是SP_ELx ### Term SCTLR, System Control Register用来控制MMU icache和dcache Process state PSTATE ### Arm 64 Register ![](https://i.imgur.com/tu66iF1.png) https://www.jianshu.com/p/2f4a5f74ac7a ## ArmV8 Entry 中断、系统调用的入口在arch/arm64/kernel/entry.S ENTRY(vectors) ventry el1_sync_invalid // Synchronous EL1t ventry el1_irq_invalid // IRQ EL1t ventry el1_fiq_invalid // FIQ EL1t ventry el1_error_invalid // Error EL1t ventry el1_sync // Synchronous EL1h ventry el1_irq // IRQ EL1h ventry el1_fiq_invalid // FIQ EL1h ventry el1_error_invalid // Error EL1h ventry el0_sync // Synchronous 64-bit EL0 ventry el0_irq // IRQ 64-bit EL0 ventry el0_fiq_invalid // FIQ 64-bit EL0 ventry el0_error_invalid // Error 64-bit EL0 #ifdef CONFIG_COMPAT ventry el0_sync_compat // Synchronous 32-bit EL0 ventry el0_irq_compat // IRQ 32-bit EL0 ventry el0_fiq_invalid_compat // FIQ 32-bit EL0 ventry el0_error_invalid_compat // Error 32-bit EL0 #else ventry el0_sync_invalid // Synchronous 32-bit EL0 ventry el0_irq_invalid // IRQ 32-bit EL0 ventry el0_fiq_invalid // FIQ 32-bit EL0 ventry el0_error_invalid // Error 32-bit EL0 #endif END(vectors) el1_sync:当前处于内核态时,发生了指令执行异常、缺页中断(跳转地址或者取地址)。 el1_irq:当前处于内核态时,发生硬件中断。 el0_sync:当前处于用户态时,发生了指令执行异常、缺页中断(跳转地址或者取地址)、系统调用。 el0_iqr:当前处于用户态时,发生了硬件中断。