【发布时间】:2016-12-15 02:47:17
【问题描述】:
我已经能够使用命令hvc #0 将我的处理器从 svc 模式置于 hyp 模式。我在 HVBAR 上做了一些寄存器读写操作,我想回到主管模式。
我尝试了以下方法:
-
在调用 hvc 之前复制 sp 和 lr,然后在注册操作结束后恢复它们。然后跳转到链接寄存器值。
mov r5,sp; mov r6,lr; bx lr; -
我也尝试过将链接寄存器直接传递给程序计数器的旧方法
mov pc,lr; -
我尝试从 hyp 模式进行 svc 调用,并希望它将处理器状态更改为主管模式
svc #0; 我已经在寄存器操作结束时使用了
eret指令,看看会不会有效果。没有任何影响。
但是这些都没有导致处理器改变状态。运行代码后 我的 CPSR 和 SPSR 中的模式仅为非安全管理程序模式。
在进行文献调查后,我知道我必须使用 ELR_Hyp 寄存器,因为我正在使用虚拟化扩展。但是我不明白如何使用 ELR_Hyp 从 Hyp 模式返回到 Supervisor 模式。
【问题讨论】:
-
相当肯定你需要一个异常返回(不仅仅是一个分支),我认为这是 ARMv7 中的一个显式指令(但我现在没有时间检查)
-
@achoora 你能分享你进入炒作模式的代码吗?我的意思是能够调用“hvc #0”之前的所有准备工作。全网没有它的代码。
-
@Joey 对不起伙计,我理解这个问题,但我写的代码现在是专有的。 arm架构参考手册有你需要的一切。特别是 B1136 页。如果要保留上下文,则必须在从模式返回时处理堆栈。
标签: assembly arm hypervisor