如何使用armv7中的ELR_Hyp从hyp模式切换回svc模式

时间:2016-08-09 07:07:10

标签: assembly arm hypervisor

我已经能够使用命令hvc #0从svc模式将处理器置于hyp模式。我在HVBAR上做了一些注册读写操作,我想回到管理员模式 我尝试了以下方法:

  1. 在调用hvc之前复制sp和lr,然后在寄存器操作结束后恢复它们。然后分支到链接寄存器值。

    mov r5,sp;  
    mov r6,lr;  
    bx lr;  
    
  2. 我还尝试了将链接寄存器直接传递给程序计数器的旧方法

    mov pc,lr;  
    
  3. 我尝试从hyp模式进行svc调用,并期望它将处理器状态更改为管理员模式

    svc #0;  
    
  4. 我在寄存器操作结束时使用了eret指令来查看它是否会产生影响。它没有任何影响。

  5. 但这些都没有导致处理器改变状态。运行代码后我的CPSR和SPSR中的模式仅为非安全管理程序模式 经过文献调查后,我得知我必须使用ELR_Hyp寄存器,因为我使用的是虚拟化扩展。但我无法理解如何使用ELR_Hyp从Hyp模式返回Supervisor模式。

1 个答案:

答案 0 :(得分:1)

从Hyp模式下降到PL1模式很像从PL1模式下降到用户模式;这是一个例外回报。唯一的区别是您必须使用特定的eret instruction,而不是movs pc, lr和朋友。