rustsbi/rustsbi-qemu

在Ubuntu物理机和WSL 上行为不一致

2catycm opened this issue · 8 comments

您好!
我正在尝试跑通rcore。
按照 http://rcore-os.cn/rCore-Tutorial-Book-v3/chapter0/5setup-devel-env.html 里的描述,可以正常在WSL和物理机上跑通rcore。
然而,我注意到有一个rcore的实验指导,专门为了做实验的同学设计的,这里面的代码和tutorial稍有不同,我尝试跑通实验指导三:虚拟内存的时候的时候,出现了以下奇怪的情况:

物理机+opensbi(qemu参数改为default): 正常运行!
物理机+rustsbi2.2.0: 运行失败! 具体来说,在虚拟内存开启之后(mm::init()之后),println宏无法打印变量的值,此时PC不知道跑哪去了,再也没有输出了!
WSL+opensbi: 所有章节的rcore都运行失败!(rcore指的是实验指导的rcore,不是tutorial的rcore)
WSL+rustsbi: 没有虚拟内存的章节的rcore可以正常运行,但是开启了虚拟内存章节的rcore运行失败!

我正在学习操作系统,尝试理解rcore,但是对这个问题的解决方法没有思路。请问 rustsbi 和 opensbi的区别是什么呢?物理机和WSL的兼容性上有什么区别呢?
为什么之前在WSL上我跑opensbi不能成功运行rcore代码呢?

环境设置:
物理机:包括云服务器Ubuntu、VMVare模拟出来的Ubuntu 和 双系统安装的Ubuntu
WSL: wsl2, 运行在Windows11上。
Ubuntu:我配置的都是Ubuntu20.04。
代码-虚拟内存: 虚拟内存开启之前的章节的代码
代码:完整rcore 代码
rcore deploy: 代码在opensbi+物理机下, 代码-虚拟内存在(rustsbi+WSL) or (opensbi+物理机)下可以运行,其他情况下无法运行。

我们不知道和 OpenSBI 的区别是什么,而且我们希望没有区别。这句话有两方面含义,换句话说,既然 rustsbi 和 opensbi 遵循同样的标准(目前是 SBI SPEC v1.0.0),就应该表现出一致的行为;且不一致的行为应该视为 bug(但可能是 opensbi 或 rustsbi 的 bug,也可能是标准的描述不够明确)。

具体来说,rustsbi-qemu 这个项目本身做了 windows+ubuntu 适配,理论上说,它在所有 qemu 上都应该有一致的表现,不仅包括同一份 qemu 源码的不同编译产物,甚至应该包括任何 qemu(至少保证 6.1 以上)。

但是,仅就你目前的描述,很难判断问题出在哪里。近期这个项目经历了一些重构,中间版本不一定是正确的,也许你可以试着编译这个项目的 pr #28 所在的分支,看看有没有不同的结果。另外,应该关注实验指导与正常的教程有何不同。

@2catycm 嗨,最近有什么进展吗

@2catycm 经典问题,可以看我的笔记

似乎没有进一步的问题了?我先关了,也可以加微信聊,rcore 群里可以找到我们