rCore-Tutorial-Book-v3
rCore-Tutorial-Book-v3 copied to clipboard
rCore-Tutorial-Book-v3/chapter0/5setup-devel-env
实验环境配置 — rCore-Tutorial-Book-v3 0.1 文档
https://rcore-os.github.io/rCore-Tutorial-Book-v3/chapter0/5setup-devel-env.html
请问虚拟磁盘文件可以传一份到清华云盘上吗?
想问下有docker镜像吗
想问下有docker镜像吗
抱歉,暂时还没有。
我弄了个docker镜像,不想重新配一遍的话可以用一下
docker pull dinghao188/rcore-tutorial
安装rustup target add riscv64gc-unknown-none-elf提示
info: component 'rust-std' for target 'riscv64gc-unknown-none-elf' is up to date,但是cargo build 编译程序提示can't find crate for std,the riscv64gc-unknown-none-elf target may not be installed,蒙圈了
安装rustup target add riscv64gc-unknown-none-elf提示 info: component 'rust-std' for target 'riscv64gc-unknown-none-elf' is up to date,但是cargo build 编译程序提示can't find crate for
std,theriscv64gc-unknown-none-elftarget may not be installed,蒙圈了
Rust 官方并没有为 riscv64gc-unknown-none-elf 这个 target 提供标准库 std,而只有核心库 core 。所以是因为现在 build 的项目用到了标准库 std 才出现了这个问题,详情参考文档第一章第二小节的 移除标准库依赖 。
M1 MacbookPro 正常启动 Qemu 安装:
执行:
brew install ninja glib pixman pkg-config texinfo nettle gettext libffi
git clone https://github.com/patchew-project/qemu
cd qemu
然后需要加一个补丁,以避免qemu-system-riscv: qemu_mprotect__osdep: mprotect failed: Permission denied的问题。
// util/osdep.c
// 在 int qemu_mprotect_none(void *addr, size_t size) 函数中加入 m1 平台判断
int qemu_mprotect_none(void *addr, size_t size)
{
#ifdef _WIN32
return qemu_mprotect__osdep(addr, size, PAGE_NOACCESS);
#elif defined(__APPLE__) && defined(__arm64__)
/* Workaround mprotect (RWX->NONE) issue on Big Sur 11.2 */
return 0;
#else
return qemu_mprotect__osdep(addr, size, PROT_NONE);
#endif
}
开始构建:
mkdir build && cd build
../configure --target-list=riscv64-softmmu,aarch64-softmmu --extra-cflags=-I/opt/homebrew/opt/gnutls/include --extra-ldflags=-L/opt/homebrew/opt/gnutls/lib --enable-cocoa
make -j
sudo make install
构建完毕,注意设置 qemu 的 PATH 为 build 目录。
以上。应该就可以在 M1 上正常使用 Qemu 了。
qemu-riscv64在mac下怎么没有呢? 只能使用qemu-system-riscv64
$ qemu-
qemu-edid qemu-system-m68k qemu-system-riscv64
qemu-ga qemu-system-microblaze qemu-system-rx
qemu-img qemu-system-microblazeel qemu-system-s390x
qemu-io qemu-system-mips qemu-system-sh4
qemu-nbd qemu-system-mips64 qemu-system-sh4eb
qemu-storage-daemon qemu-system-mips64el qemu-system-sparc
qemu-system-aarch64 qemu-system-mipsel qemu-system-sparc64
qemu-system-alpha qemu-system-moxie qemu-system-tricore
qemu-system-arm qemu-system-nios2 qemu-system-x86_64
qemu-system-avr qemu-system-or1k qemu-system-xtensa
qemu-system-cris qemu-system-ppc qemu-system-xtensaeb
qemu-system-hppa qemu-system-ppc64
qemu-system-i386 qemu-system-riscv32
Ubuntu-20.04(wsl2)环境下安装后,使用qemu-system-riscv64命令提示libtinfo.so.6不存在;Ubuntu-18.04(wsl2)正常
rust安装脚本中toolchain需要手动选择nightly,否则默认安装的为default版本
Ubuntu-20.04(wsl2)环境下安装后,使用qemu-system-riscv64命令提示libtinfo.so.6不存在;Ubuntu-18.04(wsl2)正常
按照实验指导书中所述进行qemu的手动编译安装,wsl2 ubuntu20.04未发现此情况。请确认你正确的进行了编译安装。
> qemu-system-riscv64 --version
QEMU emulator version 5.0.0
Copyright (c) 2003-2020 Fabrice Bellard and the QEMU Project developers
rust安装脚本中toolchain需要手动选择nightly,否则默认安装的为default版本
可以通过在项目根目录下添加写有 nightly 的 rust-toolchain 文件实现本项目使用 nightly 版本,而非 stable 版本。这样的话,电脑上会同时存在两个版本。
> rustup toolchain list
stable-x86_64-unknown-linux-gnu (default)
nightly-x86_64-unknown-linux-gnu
楼上大佬提供的docker镜像下载如果慢的话,使用如下pull姿势,亲测可行: docker pull dockerhub.azk8s.cn/dinghao188/rcore-tutorial
@zeyuanj @dinghao188 请问这个 dinghao188/rcore-tutorial 的dockerfile 在哪里?
macOS (Intel)可以使用brew安装qemu:
brew install qemu
经过测试,5.2.50版本的qemu会在make run的时候报错(invalid instruction),5.1.0和5.2.0可以正常运行。
@Hunter-CH3
macOS(Arm) 下 5.2.50 版本的 qemu 同样会在 make run 的时候报错(invalid instruction)。 我还以为是我自己的问题呢。。。 看来是qemu的问题
@zeyuanj 你提供的这个镜像地址返回 403
@ZhangHanDong 同样启动qemu 后加载sbi报错
➜ os git:(main) ✗ qemu-system-riscv64 \
-machine virt \
-nographic \
-bios ../bootloader/rustsbi-qemu.bin
[rustsbi] RustSBI version 0.1.1
.______ __ __ _______.___________. _______..______ __
| _ \ | | | | / | | / || _ \ | |
| |_) | | | | | | (----`---| |----`| (----`| |_) || |
| / | | | | \ \ | | \ \ | _ < | |
| |\ \----.| `--' |.----) | | | .----) | | |_) || |
| _| `._____| \______/ |_______/ |__| |_______/ |______/ |__|
[rustsbi] Platform: QEMU (Version 0.1.0)
[rustsbi] misa: RV64ACDFIMSU
[rustsbi] mideleg: 0x222
[rustsbi] medeleg: 0xb1ab
[rustsbi-dtb] Hart count: cluster0 with 1 cores
[rustsbi] Kernel entry: 0x80200000
[rustsbi-panic] hart 0 panicked at 'invalid instruction, mepc: 0000000080003eba, instruction: 0000000030200073', platform\qemu\src\main.rs:458:17
[rustsbi-panic] system shutdown scheduled due to RustSBI panic
降到5.2.0,之后会出现 Could not allocate dynamic translator buffer 错误,trace了一下,是一个mmap的出错。
所以貌似又无解了
安装完rust后,需要切换到nightly,要不然RV64裸机应用那里的实验通不过。
cargo default nightly
@imjustfly 你是在用m1 吗? Could not allocate dynamic translator buffer这个错误是需要打patch的。你可以看看我上面评论里的那个方法重装一下qemu。然而那个patch也是针对 5.2.50最新版本的。总之目前还不如用docker。
@zeyuanj @dinghao188 请问这个 dinghao188/rcore-tutorial 的dockerfile 在哪里?
发到这了 https://github.com/dinghao188/rcore-tutorial-v3-docker;
这个里面的rust是最小化安装的
Q:windows下可以开展OS实验的方便环境吗? A:可以的,有两种方式:
- 安装wsl2和vscode,在wsl2上安装ubuntu 20.04,并进一步根据本章描述在ubuntu上安装相关软件;在vscode安装Remote - WSL,Rust Analyzer等插件。就可以在vscode上编辑/分析位于wsl2的ubuntu 20.04中的代码文件了
- 安装wsl2和clion,在wsl2上安装ubuntu 20.04,并进一步根据本章描述在ubuntu上安装相关软件(包括xfce4 GUI环境,clion IDE for linux);安装VcXsrv(xserver in win)。这样就可以在VcXsrv提供的图形界面下用clion IDE编辑/分析位于wsl2的ubuntu 20.04中的代码文件了
注:编译运行一般在命令行通过 make run等完成。
安装WSL2应该不需要加入预览体验计划吧
@ZhangHanDong M1 没错。你上面那个手动的patch是修复M1 macos 11.2 下的 mprotect问题,Could not allocate dynamic translator buffer 是mmap问题,这个在5.2.50版本才修复,之前的版本都不行。
然而,rustsbi表示必须在5.1以下的qemu中使用:
https://github.com/luojia65/rustsbi/issues/12#issuecomment-784900685
所以,我也懒得研究把5.2.50中对于mmap syscall的使用的修改port到5.1去了,毕竟只是一时兴起想学习一下这个项目,我还是直接docker或者ssh 一个linux主机吧。
@imjustfly 你看我上面那个 qemu 的clone仓库是patch版本的,修复了 Could not allocate dynamic translator buffer .
然而,还是docker吧,等qemu后面完全兼容m1再切吧
@ZhangHanDong 哦哦,了解。多谢!
结合 @dinghao188 提供的 Dockerfile 给实验环境加了个 Docker 支持,方便使用。
https://github.com/rcore-os/rCore-Tutorial-v3/pull/6
安装WSL2应该不需要加入预览体验计划吧
@Gallium70
不需要加入
实验指导书中已有安装讲解,你也可以参考微软的指南 https://docs.microsoft.com/zh-cn/windows/wsl/install-win10
@zeyuanj 你提供的这个镜像地址返回 403
不好意思,我可能描述有误,仅就docker pull来说,我这边的网下载原始镜像速度有点慢,添加pdockerhub.azk8s.cn后加速成功,类似于更换下载源实现镜像加速(其他方式如阿里云等效果不好)可能仅针对自己的环境有效,不具有普遍性
macOS(intel)上通过brew install qemu安装后,没有用户模式的qemu-riscv64,只有qemu-system-riscv64并且能够在os目录下执行make run,不知道是否会影响后续实验?