rCore-Tutorial-Book-v3 icon indicating copy to clipboard operation
rCore-Tutorial-Book-v3 copied to clipboard

rCore-Tutorial-Book-v3/chapter0/5setup-devel-env

Open utterances-bot opened this issue 4 years ago • 191 comments

实验环境配置 — rCore-Tutorial-Book-v3 0.1 文档

https://rcore-os.github.io/rCore-Tutorial-Book-v3/chapter0/5setup-devel-env.html

utterances-bot avatar Jan 23 '21 07:01 utterances-bot

请问虚拟磁盘文件可以传一份到清华云盘上吗?

hsiachi avatar Jan 23 '21 07:01 hsiachi

想问下有docker镜像吗

dinghao188 avatar Jan 23 '21 19:01 dinghao188

请问虚拟磁盘文件可以传一份到清华云盘上吗?

虚拟磁盘文件已经传到清华云盘上了。

wyfcyx avatar Jan 24 '21 20:01 wyfcyx

想问下有docker镜像吗

抱歉,暂时还没有。

wyfcyx avatar Jan 24 '21 20:01 wyfcyx

我弄了个docker镜像,不想重新配一遍的话可以用一下 docker pull dinghao188/rcore-tutorial

dinghao188 avatar Jan 27 '21 17:01 dinghao188

安装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,蒙圈了

xinhaoyu-wd avatar Feb 04 '21 06:02 xinhaoyu-wd

安装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,蒙圈了

Rust 官方并没有为 riscv64gc-unknown-none-elf 这个 target 提供标准库 std,而只有核心库 core 。所以是因为现在 build 的项目用到了标准库 std 才出现了这个问题,详情参考文档第一章第二小节的 移除标准库依赖

wyfcyx avatar Feb 04 '21 06:02 wyfcyx

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 了。

ZhangHanDong avatar Feb 18 '21 05:02 ZhangHanDong

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                               



sedationh avatar Feb 20 '21 05:02 sedationh

Ubuntu-20.04(wsl2)环境下安装后,使用qemu-system-riscv64命令提示libtinfo.so.6不存在;Ubuntu-18.04(wsl2)正常

TB5z035 avatar Feb 22 '21 13:02 TB5z035

rust安装脚本中toolchain需要手动选择nightly,否则默认安装的为default版本

TB5z035 avatar Feb 22 '21 13:02 TB5z035

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版本

可以通过在项目根目录下添加写有 nightlyrust-toolchain 文件实现本项目使用 nightly 版本,而非 stable 版本。这样的话,电脑上会同时存在两个版本。

> rustup toolchain list
stable-x86_64-unknown-linux-gnu (default)
nightly-x86_64-unknown-linux-gnu

duskmoon314 avatar Feb 23 '21 11:02 duskmoon314

楼上大佬提供的docker镜像下载如果慢的话,使用如下pull姿势,亲测可行: docker pull dockerhub.azk8s.cn/dinghao188/rcore-tutorial

zeyuanj avatar Feb 23 '21 14:02 zeyuanj

@zeyuanj @dinghao188 请问这个 dinghao188/rcore-tutorial 的dockerfile 在哪里?

ZhangHanDong avatar Feb 23 '21 14:02 ZhangHanDong

macOS (Intel)可以使用brew安装qemu

brew install qemu

经过测试,5.2.50版本的qemu会在make run的时候报错(invalid instruction),5.1.05.2.0可以正常运行。

hsiachi avatar Feb 23 '21 15:02 hsiachi

@Hunter-CH3

macOS(Arm) 下 5.2.50 版本的 qemu 同样会在 make run 的时候报错(invalid instruction)。 我还以为是我自己的问题呢。。。 看来是qemu的问题

ZhangHanDong avatar Feb 23 '21 15:02 ZhangHanDong

@zeyuanj 你提供的这个镜像地址返回 403

ZhangHanDong avatar Feb 23 '21 16:02 ZhangHanDong

@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的出错。

所以貌似又无解了

imjustfly avatar Feb 23 '21 19:02 imjustfly

安装完rust后,需要切换到nightly,要不然RV64裸机应用那里的实验通不过。

cargo default nightly

zhugy08 avatar Feb 24 '21 00:02 zhugy08

@imjustfly 你是在用m1 吗? Could not allocate dynamic translator buffer这个错误是需要打patch的。你可以看看我上面评论里的那个方法重装一下qemu。然而那个patch也是针对 5.2.50最新版本的。总之目前还不如用docker。

ZhangHanDong avatar Feb 24 '21 07:02 ZhangHanDong

@zeyuanj @dinghao188 请问这个 dinghao188/rcore-tutorial 的dockerfile 在哪里?

发到这了 https://github.com/dinghao188/rcore-tutorial-v3-docker;

这个里面的rust是最小化安装的

dinghao188 avatar Feb 25 '21 01:02 dinghao188

Q:windows下可以开展OS实验的方便环境吗? A:可以的,有两种方式:

  1. 安装wsl2和vscode,在wsl2上安装ubuntu 20.04,并进一步根据本章描述在ubuntu上安装相关软件;在vscode安装Remote - WSL,Rust Analyzer等插件。就可以在vscode上编辑/分析位于wsl2的ubuntu 20.04中的代码文件了
  2. 安装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等完成。

chyyuu avatar Feb 25 '21 02:02 chyyuu

安装WSL2应该不需要加入预览体验计划吧

Gallium70 avatar Feb 25 '21 02:02 Gallium70

@ZhangHanDong M1 没错。你上面那个手动的patch是修复M1 macos 11.2 下的 mprotect问题,Could not allocate dynamic translator buffermmap问题,这个在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 avatar Feb 25 '21 04:02 imjustfly

@imjustfly 你看我上面那个 qemu 的clone仓库是patch版本的,修复了 Could not allocate dynamic translator buffer .

然而,还是docker吧,等qemu后面完全兼容m1再切吧

ZhangHanDong avatar Feb 25 '21 04:02 ZhangHanDong

@ZhangHanDong 哦哦,了解。多谢!

imjustfly avatar Feb 25 '21 04:02 imjustfly

结合 @dinghao188 提供的 Dockerfile 给实验环境加了个 Docker 支持,方便使用。

https://github.com/rcore-os/rCore-Tutorial-v3/pull/6

ZhangHanDong avatar Feb 25 '21 12:02 ZhangHanDong

安装WSL2应该不需要加入预览体验计划吧

@Gallium70

不需要加入

实验指导书中已有安装讲解,你也可以参考微软的指南 https://docs.microsoft.com/zh-cn/windows/wsl/install-win10

duskmoon314 avatar Feb 25 '21 12:02 duskmoon314

@zeyuanj 你提供的这个镜像地址返回 403

不好意思,我可能描述有误,仅就docker pull来说,我这边的网下载原始镜像速度有点慢,添加pdockerhub.azk8s.cn后加速成功,类似于更换下载源实现镜像加速(其他方式如阿里云等效果不好)可能仅针对自己的环境有效,不具有普遍性

zeyuanj avatar Feb 27 '21 08:02 zeyuanj

macOS(intel)上通过brew install qemu安装后,没有用户模式的qemu-riscv64,只有qemu-system-riscv64并且能够在os目录下执行make run,不知道是否会影响后续实验?

huang-jl avatar Feb 27 '21 12:02 huang-jl