启动xv6(easy)
前言
我的实验环境是一台PC, 运行在我的寝室,作为工作站运行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| [I] lyc@lyc-workstation ~/w/学/C/c/MIT6.S081 (master)> neofetch -/oyddmdhs+:. lyc@lyc-workstation -odNMMMMMMMMNNmhy+-` ------------------- -yNMMMMMMMMMMMNNNmmdhy+- OS: Gentoo Base System release 2.8 x86_64 `omMMMMMMMMMMMMNmdmmmmddhhy/` Host: MS-7D42 1.0 omMMMMMMMMMMMNhhyyyohmdddhhhdo` Kernel: 5.18.5-gentoo-lyc .ydMMMMMMMMMMdhs++so/smdddhhhhdm+` Uptime: 22 hours, 29 mins oyhdmNMMMMMMMNdyooydmddddhhhhyhNd. Packages: 1473 (emerge) :oyhhdNNMMMMMMMNNNmmdddhhhhhyymMh Shell: bash 5.1.16 .:+sydNMMMMMNNNmmmdddhhhhhhmMmy Resolution: 3840x2160 /mMMMMMMNNNmmmdddhhhhhmMNhs: DE: Plasma 5.24.5 `oNMMMMMMMNNNmmmddddhhdmMNhs+` WM: KWin `sNMMMMMMMMNNNmmmdddddmNMmhs/. WM Theme: Breeze 微风 /NMMMMMMMMNNNNmmmdddmNMNdso:` Theme: Breeze Light [Plasma], Breeze [GTK2/3] +MMMMMMMNNNNNmmmmdmNMNdso/- Icons: Fluent [Plasma], Fluent [GTK2/3] yMMNNNNNNNmmmmmNNMmhs+/-` Terminal: Konsole /hMMNNNNNNNNMNdhs++/-` CPU: 12th Gen Intel i7-12700 (20) @ 4.900GHz `/ohdmmddhys+++/:.` GPU: Intel AlderLake-S GT1 `-//////:--. Memory: 36679MiB / 128619MiB
|
RISC-V 64运行和交叉编译环境
cross-compilers
要运行老师给的xv6
操作系统代码,必须先有交叉编译工具。[1]
用gentoo的crossdev工具[2]安装跨指令集的编译工具,包括GNU binutils
, gcc
, g++
。
1
| sudo crossdev --stable -t riscv64-unknown-linux-gnu
|
Emulator(QEMU)
安装打开了riscv64对应的编译开关的qemu
,我的实验主机是Gentoo Linux
操作系统,在Portage
中加入USE
1
| write-use app-emulation qemu qemu_user_targets_riscv64 qemu_softmmu_targets_riscv64
|
其中write-use
是一个自己写的辅助脚本
1 2 3 4 5
| lyc@lyc-workstation ~> cat $(which write-use)
set portage_use_dir "/etc/portage/package.use" echo "$argv[1]/$argv[2] $argv[3..]" | sudo tee -a "$portage_use_dir/$argv[1]"
|
然后,重新编译qemu
获取实验源代码
clone mit xv6仓库
1
| git clone git://g.csail.mit.edu/xv6-labs-2021
|
选到util分支
1
| cd xv6-labs-2021 && git checkout util
|
编译和进入xv6系统
1 2 3 4 5 6 7 8 9 10
| [I] lyc@lyc-workstation ~/w/学/C/c/M/xv6-labs-2021 (util)> make qemu qemu-system-riscv64 -machine virt -bios none -kernel kernel/kernel -m 128M -smp 3 -nographic -drive file=fs.img,if=none,format=raw,id=x0 -device virtio-blk-device,drive=x0,bus=virtio-mmio-bus.0
xv6 kernel is booting
hart 1 starting hart 2 starting init: starting sh $
|
Ctrl-a x
退出系统。