1.4. xv6の起動
QEMUを利用してxv6を起動します。Makefileの中にQEMUのパラメータ等を指定したターゲット(qemu)が用意されているので、これを指定してmakeコマンドを実行します。
$ make qemu
まずユーザランドのプログラムのビルドと、それらを格納したディスクイメージ「fs.img」の作成が行われます。
gcc -Wno-unknown-attributes -I. -o mkfs/mkfs mkfs/mkfs.c
riscv64-linux-gnu-gcc -Wall -Werror -Wno-unknown-attributes -O -fno-omit-frame-pointer -ggdb -gdwarf-2 -march=rv64gc -std=gnu99 -MD -mcmodel=medany -ffreestanding -fno-common -nostdlib -fno-builtin-strncpy -fno-builtin-strncmp -fno-builtin-strlen -fno-builtin-memset -fno-builtin-memmove -fno-builtin-memcmp -fno-builtin-log -fno-builtin-bzero -fno-builtin-strchr -fno-builtin-exit -fno-builtin-malloc -fno-builtin-putc -fno-builtin-free -fno-builtin-memcpy -Wno-main -fno-builtin-printf -fno-builtin-fprintf -fno-builtin-vprintf -I. -fno-stack-protector -fno-pie -no-pie -c -o user/ulib.o user/ulib.c
perl user/usys.pl > user/usys.S
...
nmeta 47 (boot, super, log blocks 31, inode blocks 13, bitmap blocks 1) blocks 1953 total 2000
balloc: first 940 blocks have been allocated
balloc: write bitmap block at sector 46
続けてCLI版の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.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
$
Note
推奨環境のUbuntuでは、
qemu-syste-miscのパッケージがインストールされていないとqemu-system-riscv64が見つからずエラーとなります。apt installで該当パッケージをインストール後、あらためてmakeコマンドでビルドを実行してください。
ログイン認証はなく、そのままコンソールでシェルが起動します。xv6のシェルは最低限の機能しか備えていないため、TABキーによる入力補完はできません。lsコマンドを実行すると実行可能なバイナリ等が確認できます。
$ ls
. 1 1 1024
.. 1 1 1024
README 2 2 2441
cat 2 3 35440
echo 2 4 34360
forktest 2 5 17336
grep 2 6 42800
init 2 7 34816
kill 2 8 34288
ln 2 9 34104
ls 2 10 41568
mkdir 2 11 34352
rm 2 12 34328
sh 2 13 56184
stressfs 2 14 35208
usertests 2 15 186584
grind 2 16 50576
wc 2 17 36384
zombie 2 18 33712
logstress 2 19 36256
forphan 2 20 35096
dorphan 2 21 34544
sync 2 22 33784
console 3 23 0