1.环境信息
环境:
WSL2 + Ubuntu 20.04
2.操作步骤
在WSL2上安装完原生Ubuntu 20.04后,首先安装git
sudo apt-get install git
然后下载riscv-gnu-toolchain
git clone https://github.com/riscv/riscv-gnu-toolchain
配置和安装
./configure --prefix=/usr/local
sudo make
下载QEMU
https://download.qemu.org/
解压并编译安装
tar xf qemu-7.2.0.tar.xz
./configure --disable-kvm --disable-werror --prefix=/usr/local --target-list="riscv64-softmmu"
sudo make
sudo make install
报错 ERROR: Cannot find Ninja
安装ninja-build
sudo apt-get install ninja-build
报错处理 ERROR: Cannot find pkg-config
sudo apt-get install pkg-config
报错 ERROR: glib-2.56 gthread-2.0 is required to compile QEMU
这里遇到了一些困难,在执行
sudo apt-get install glib2
后报错E: Unable to locate package,找了网上的一些方法给出的解决方案都是更换源后执行upgrade和update,但实际上看了一下镜像源里的文件实际上要安装
sudo apt-get install libglib2.0-0 libglib2.0-dev
同理报错后安装pixman
sudo apt-get install libpixman-1-dev
然后报错
***
*** Error: Couldn't find an riscv64 version of GCC/binutils.
*** To turn off this error, run 'gmake TOOLPREFIX= ...'.
***
gcc -c -o kernel/entry.o kernel/entry.S
kernel/entry.S: Assembler messages:
kernel/entry.S:17: Error: no such instruction: `la sp,stack0'
kernel/entry.S:18: Error: no such instruction: `li a0,1024*4'
kernel/entry.S:19: Error: no such instruction: `csrr a1,mhartid'
kernel/entry.S:20: Error: no such instruction: `addi a1,a1,1'
kernel/entry.S:21: Error: too many memory references for `mul'
kernel/entry.S:22: Error: too many memory references for `add'
kernel/entry.S:26: Error: no such instruction: `j junk'
<builtin>: recipe for target 'kernel/entry.o' failed
make: *** [kernel/entry.o] Error 1
此处按照课程教学给出应该安装另外一个插件
sudo apt install gcc-riscv64-unknown-elf
确保我们拥有这两个组件
riscv64-unknown-elf-gcc --version
qemu-system-riscv64 --version
之后再执行make,看到与课程中给出的一致输出,成功boot
make qemu
...
mkfs/mkfs fs.img README user/_cat user/_echo user/_forktest user/_grep user/_init user/_kill user/_ln user/_ls user/_mkdir user/_rm user/_sh user/_stressfs user/_usertests user/_wc user/_zombie user/_cow
nmeta 46 (boot, super, log blocks 30 inode blocks 13, bitmap blocks 1) blocks 954 total 1000
balloc: first 497 blocks have been allocated
balloc: write bitmap block at sector 45
qemu-system-riscv64 -machine virt -kernel kernel/kernel -m 3G -smp 3 -nographic -drive file=fs.img,if=none,format=raw,id=x0 -device virtio-blk-device,drive=x0,bus=virtio-mmio-bus.0
hart 0 starting
hart 2 starting
hart 1 starting
init: starting sh
$