switch_el x6, 0f, 1f, 0f 0: /* x4 is kernel entry point. When running in EL1 * now, jump to the address saved in x4. */ br x4 1: armv8_switch_to_el1_m x4, x5, x6 ENDPROC(armv8_switch_to_el1) WEAK(armv8_el2_to_aarch32) ret ENDPROC(armv8_el2_to_aarch32) 1....
bgt switch_to_el2_from_el3 b halt // 这种是未定义情况 让cpu halt住方便调试 halt: wfe // wait for event 休眠CPU b halt switch_to_el2_from_el3: // 向scr_el3写入0101_1011_0001 // [0]:1 NS none secure EL0与EL1处于Non-secure状态 // [1]:0 IRQ 路由 当设为0时:(在EL3级别...
其中switch_el是一个宏,用于读取当前所处的异常级别,根据所处异常级别调用对应的系统控制寄存器。某些时候u-boot的加载并不是一定在el3级别,当存在atf等时,el3由atf控制,atf会将u-boot的运行级别切换到el2,以便保证自己的控制级别,所以u-boot通过switch_el来选择自己能够控制的系统寄存器。 (2)定义设置异常向量表...
ARM DDI 0487中D19.2以H开头的系列寄存器可以控制在guest读写执行某些敏感指令的行为。 enable HCR_EL2.IMO中断会route到EL2。还由FMO,AMObit也有同样的作用。 HCR_EL2的E2H控制vhe的行为,如果打开则由TGE决定当前是VM还是host,1是host,表面host kernel在EL2,也就不需要virtual interrupt了。所以在VM中E2H=1,...
reset label里会调用switch_el、lowlevel_init(define本文件,start.S),然后bl _main 104 switch_el x1, 3f, 2f, 1f 105 3: set_vbar vbar_el3, x0 106 mrs x0, scr_el3 107 orr x0, x0, #0xf /* SCR_EL3.NS|IRQ|FIQ|EA */
b __primary_switch //启动MMU,最后跳转到start_kernel(内核C语言部分) SYM_CODE_END(primary_entry) 其中__create_page_tables函数的功能就是创建恒等映射和内核映像映射页表,这里先看创建恒等映射页表。 __create_page_tables /* * Create the identity mapping. ...
登录后复制switch(irqnr) { 登录后复制casePENDING_G1S_INTID: 登录后复制returnINTR_TYPE_S_EL1; 登录后复制casePENDING_G1NS_INTID: 登录后复制returnINTR_TYPE_NS; 登录后复制caseGIC_SPURIOUS_INTERRUPT: 登录后复制returnINTR_TYPE_INVAL; 登录后复制default: ...
DCPS3 Debug switch to Exception level 3 DRPS Debug restore PE state 5、系统访问指令 系统寄存器访问指令 : 1个 系统操作指令 : 6个 (1)、系统寄存器访问指令 MRS MSR (2)、系统操作指令 SYS SYSL IC DC AT TLBI 6、提示指令Hint instructions ...
DCPS3 Debug switch to Exception level 3 DRPS Debug restore PE state 5、系统访问指令 系统寄存器访问指令 : 1个 系统操作指令 : 6个 (1)、系统寄存器访问指令 MRS MSR (2)、系统操作指令 SYS SYSL IC DC AT TLBI 6、提示指令Hint instructions ...
Linux内核中,异常处理主要由两个文件完毕,entry.S和traps.c。当然另一些其他异常处理函数分布于fault.c, memory.c等等。entry.S包括异常的入口、进入异常处理C函数前的压栈、退出C函数前的出栈、一些fork函数相关的处理代码(暂不分析)、任务切换汇编处理过程(cpu_switch_to函数,暂不分析)。