【发布时间】:2022-08-17 03:16:22
【问题描述】:
我正在尝试在 16 字节区域上使用 PMP 来保护特定的内存区域。但是,启用 PMP 配置后跳转到 U 模式时出现指令访问错误。
细节:
-
我的程序以 M 模式启动,并在某些时候使用跳转到 U 模式 先生。我没有为此测试使用虚拟内存。
-
我要保护的内存区域从 0x80020180 开始。
-
我将 pmaddr0 设置为 0x20008061(将 0x80020180 右移 2 和 将最后两位数字设为 0b\'01 以标记 16 字节区域)。
-
pmp0cfg 设置为 0b\'0001 1000(使用 NAPOT 并读取、写入、 不允许执行)。
-
我有一个存储操作,它试图在 U 模式下存储到 0x80020184。 但是代码在跳转到 U 时给出指令访问错误 模式。
-
U模式的第一条指令位于PC 0x800004c0, 不应该与 pmaddr0 匹配。
我试图弄清楚为什么在跳转到 U 模式时会出现指令访问错误。 谁能帮我理解发生了什么?
我在 Spike 上运行我的代码,我在火箭核心模拟中也看到了相同的行为。
标签: riscv rocket-chip