从主管模式调用

问题描述 投票:0回答:1

我正在进行一个系统调用,在

mtime
寄存器中提取一个值。

我正在 riscv (xv6) 环境上工作。因为

mtime
寄存器只能在机器模式下读取,与其他仅在超级用户模式下进行的系统调用不同,我想要进行的系统调用应该进入机器模式。

为此,我尝试进行嵌套系统调用。

首先,我调用了我所做的

sys_time
系统调用,在该系统调用中,
ecall
被执行,以便模式进入机器模式。

timervec()
写入
mtvec
寄存器中,因此我希望控件转到
timervec()

timervec()
中,我编写了一个条件分支,这样如果
mcause
寄存器中的值为 9(这意味着从主管模式ecall),它就会跳转到我制作的
mtimevec()

然而,它并没有到达

mtimevec()
。似乎在调用
ecall
之后它没有跳转到
timervec()
或者当它跳转到
timervec()
mcause
寄存器中的值不是 9。

有谁能告诉我哪一部分的想法是错误的吗?为了我的目的,我将

medeleg
设置为
0xfdff

operating-system system-calls trap
1个回答
0
投票

在跳转到 S 模式之前,您可以通过在 M 模式中设置

mtime
mcounteren.TM
暴露于 S 模式。

© www.soinside.com 2019 - 2024. All rights reserved.