求助:D1怎样从M模式切换到S模式呢?
-
我尝试着将D1的工作模式从M模式切换到S模式,使用的是mret命令,mepc、mstatus等均已设置,但是当执行到mret后就直接进入异常了。
-
Dear friend, neither my colleagues nor I are clear about your question. What do you want to do? What do M mode and S mode mean? Switch register mode?If you are a foreign friend and you are using machine translation, you can say noon directly, so that it will be easier for us to understand
-
简单的方法使用OpenSBI,RustSBI切换,不太建议直接操作CSR寄存器。
如果需要操作寄存器切换,可以尝试参考Xuantie_C906_R1S0_User_Manual.pdf 中的附录A与附录C相关的操作说明。
官方的D1使用的是OpenSBI
-
@xiaowenge 就是D1有3种工作模式,机器模式,监管者模式和用户模式,开发版上电后是在机器模式,然后我想把他切换到监管模式以便于使用MMU。我切换的方式是参考opensbi的设置mepc,mstatus.mpp等,然后mret,但是当mret后就直接进异常了,mcause的值是1
-
@zt13947787451 参考这个OpenSBI,这个是D1使用的版本,可能master的OpenSBI有些更改。opensbi.zip
或者贴一下操作的code
-
@yuzukitsuru 嗯嗯,我正在试opensbi,以下是我自己切换的代码:
main:
la t0, traps_entry
csrw mtvec, t0
li t0, 1 << 12
csrc mstatus, t0
li t1,1 << 11
csrs mstatus, t1
la t2, test_S_mode_ok
csrw mepc, t2
mret -
@yuzukitsuru 试了opensbi,也是不可以,mret后就直接挂了,是不是和编译参数有关系呀
-
@zt13947787451 直接烧录编译出来的fw_jump.bin呢?我这边对模式切换也不熟,也只是停留在能用OpenSBI的阶段
-
@yuzukitsuru 咦~这个fw_jump.bin可以直接烧进去运行吗?好像没有bootrom的头部信息诶
-
@zt13947787451 可以用xfel运行,初始化写入内存,然后直接在内存里运行
-
@yuzukitsuru 确实可以直接运行,但要怎样证明他成功跳转了呢,我跳转到一个打印的地方,没有打印
-
@zt13947787451 可以试试用OpenSBI引导U-Boot什么的
-
@yuzukitsuru 终于找到问题了,切换模式要配置PMP,默认PMP是关闭的,关闭的情况下S模式和U模式访存会抛异常。
Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号