Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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