QEMUの起動オプションを調べてみる

自作OS RISC-V

前回の記事では、HinaOSをQEMUで実際に動かしてみました。

今回は、HinaOSのMakefileがQEMUをどのように実行しているのかを調べて、実際にプログラムを実行する際の目安とします。

HinaOSは、『自作OSで学ぶマイクロカーネルの設計と実装』(秀和システム、ISBN: 978-4-7980-6871-8)で紹介されている教育向けマイクロカーネルOSです。実際の本は以下の画像のリンク先から購入できます。とても良い本なので是非。

実行時のコマンドを確認する

-nオプションをつけて、makeすると、実行せずに実行時のコマンドを確認できます。

make -n run

すると大量のコマンドが表示されます。例えば最初はbuildディレクトリを作り、その後、main.c, prntk.c, …とたくさんのファイルをコンパイルし、最後に、リンクしてelfを生成していることがわかります。生成したのちに、最後の最後に実行されるQEMUコマンドは以下です。(実際にはない改行を付け足しています)

qemu-system-riscv32 -smp 1 -nographic -serial mon:stdio \
 --no-reboot -m 128 -machine virt,aclint=on \
 -bios none -global virtio-mmio.force-legacy=true \
 -drive file=build/hinafs.img,if=none,format=raw,id=drive0 \
 -device virtio-blk-device,drive=drive0,bus=virtio-mmio-bus.0 \
 -device virtio-net-device,netdev=net0,bus=virtio-mmio-bus.1 \
 -object filter-dump,id=fiter0,netdev=net0,file=virtio-net.pcap \
 -netdev user,id=net0 -kernel build/hinaos.elf

各オプションについて見ていきます

これら、オプションはQEMUのdocsの他、helpコマンドでこんな感じで見ることが出来ます。

$ qemu-system-riscv32 --help | grep netdev
-netdev user,id=str[,ipv4=on|off][,net=addr[/mask]][,host=addr]

また、各プロパティも見れます。

$ qemu-system-riscv32 -netdev help
Available netdev backend types:
socket
stream
dgram
hubport
tap
user
l2tpv3
bridge
vhost-user
vhost-vdpa

それぞれのプロパティを詳しく見るには、こうやります

$ qemu-system-riscv32 -object filter-dump,help
filter-dump options:
  file=<string>
  insert=<string>
  maxlen=<uint32>
  netdev=<string>
  position=<string>
  queue=<NetFilterDirection>
  status=<string>

まとめ

自分のプログラムをQEMU上で動かす際の方法を知るための準備として、HinaOSがQEMUでどのように起動されているかをオプションから調べてみました。仮想ストレージや、イーサネットはしばらく使うことはないかもしれませんが、かなり勉強になりました。


© 2023 Yuto Nakamura   •  Theme  Moonwalk