系列文章 : [6.1810] 跟著 MIT 6.1810 學習基礎作業系統觀念
我使用的作業系統是 Ubuntu,所以這邊的 command 不確定在其他的作業系統能不能成功的被運行。
這一篇筆記有幾個目標
mkdir xv6-riscv
export WORK_SPACE=$PWD/xv6-riscv
cd ${WORK_SPACE}
git clone --recurse-submodules git@github.com:qemu/qemu.git
cd qemu
# 用 stable-7.2 發現 slirp 會使用 deprecated 的 function,導致 build failed
git checkout stable-10.0
./configure --enable-debug --enable-plugins --prefix=/opt/install/path --target-list=riscv32-linux-user,riscv32-softmmu,riscv64-linux-user,riscv64-softmmu
make -j16
cd ${WORK_SPACE}
# gdb
sudo apt-get install gdb-multiarch
mkdir toolchain
cd toolchain
# get riscv64-unknown-elf-*
wget https://github.com/riscv-collab/riscv-gnu-toolchain/releases/download/2026.02.13/riscv64-elf-ubuntu-24.04-gcc.tar.xz
tar Jxvf riscv64-elf-ubuntu-24.04-gcc.tar.xz
# get riscv64-unknown-linux-gnu-*
wget https://github.com/riscv-collab/riscv-gnu-toolchain/releases/download/2026.02.13/riscv64-glibc-ubuntu-24.04-gcc.tar.xz
tar Jxvf riscv64-glibc-ubuntu-24.04-gcc.tar.xz
cd ${WORK_SPACE}
export PATH=$PWD/toolchain/riscv/bin/:$PATH
export PATH=$PWD/qemu/build/:$PATH
make qemu
假如我們開機成功的話,會顯示
xv6 kernel is booting
hart 2 starting
hart 1 starting
init: starting sh
$
想要離開模擬的話,可以 ctrl-a + x
ctrl 跟 a 一起按,放開之後迅速按 x
# 開啟 QEMU,並運行 xv6
qemu-system-riscv64 -machine virt -bios none -kernel kernel/kernel -m 128M -smp 3 -nographic -global virtio-mmio.force-legacy=false -drive file=fs.i
mg,if=none,format=raw,id=x0 -device virtio-blk-device,drive=x0,bus=virtio-mmio-bus.0
-s -S
# 開啟 gdb, 並與 QEMU 連線
gdb-multiarch ./kernel/kernel
(gdb) target remote localhost:1234