QEMUのモニタの使い方
モニタを起動
$ qemu-system-riscv32 --monitor stdio
quit
QEMUを終了する
code:qemu
(qemu) quit
info registers
レジスタを一覧する
code:qemu
(qemu) info registers
pc 8000b04c
mhartid 00000000
mstatus 80006000
mstatush 00000000
mip 00000080
mie 00000008
mideleg 00000222
medeleg 0000b109
mtvec 80000518
stvec 00000000
mepc 80005b76
sepc 00000000
mcause 00000002
scause 00000000
mtval 00000000
stval 00000000
x0/zero 00000000 x1/ra 8000b02c x2/sp 80012e00 x3/gp 00000000
x4/tp 80013000 x5/t0 80005c16 x6/t1 00000000 x7/t2 00001000
x8/s0 80012e70 x9/s1 8000f2b0 x10/a0 80010070 x11/a1 0000000d
x12/a2 00000001 x13/a3 00000000 x14/a4 00000000 x15/a5 00000000
x16/a6 00000000 x17/a7 00000000 x18/s2 80012e10 x19/s3 00000000
x20/s4 00000000 x21/s5 00000000 x22/s6 00000009 x23/s7 8000e015
x24/s8 0000002d x25/s9 00000000 x26/s10 00000000 x27/s11 00000030
x28/t3 00000000 x29/t4 00000063 x30/t5 000000e4 x31/t6 00000000
f0/ft0 ffffffff00000000 f1/ft1 ffffffff00000000 f2/ft2 ffffffff00000000 f3/ft3 ffffffff00000000
f4/ft4 ffffffff00000000 f5/ft5 ffffffff00000000 f6/ft6 ffffffff00000000 f7/ft7 ffffffff00000000
f8/fs0 ffffffff00000000 f9/fs1 ffffffff00000000 f10/fa0 ffffffff00000000 f11/fa1 ffffffff00000000
f12/fa2 ffffffff00000000 f13/fa3 ffffffff00000000 f14/fa4 ffffffff00000000 f15/fa5 ffffffff00000000
f16/fa6 ffffffff00000000 f17/fa7 ffffffff00000000 f18/fs2 ffffffff00000000 f19/fs3 ffffffff00000000
f20/fs4 ffffffff00000000 f21/fs5 ffffffff00000000 f22/fs6 ffffffff00000000 f23/fs7 ffffffff00000000
f24/fs8 ffffffff00000000 f25/fs9 ffffffff00000000 f26/fs10 ffffffff00000000 f27/fs11 ffffffff00000000
f28/ft8 ffffffff00000000 f29/ft9 ffffffff00000000 f30/ft10 ffffffff00000000 f31/ft11 ffffffff00000000
(qemu)
xp /fmt addr
物理メモリをダンプ。
0x80001000番地に「0x4649」が、0x80001004番地に「0x5963」がセットされていることが確認できる。
https://gyazo.com/9f713fad391991da955e973bd5810e66
xpコマンドの引数は以下のとおり。フォーマットは省略できる。
code:qemu
xp /フォーマット アドレス
(例) 0x80001000番地を始点として16進数表記で2ワード分(= 8バイト)表示
code:qemu
(qemu) xp /2x 0x80001000
0000000080001000: 0x00004649 0x00005963
info roms
ROM一覧を表示
(qemu) info roms
addr=0000000000001000 size=0x000028 mem=rom name="mrom.reset"
addr=0000000000001028 size=0x000018 mem=rom name="mrom.finfo"
addr=0000000080000000 size=0x011688 mem=ram name="phdr #0: /usr/local/Cellar/qemu/5.2.0_1/bin/../share/qemu/opensbi-riscv32-generic-fw_dynamic.elf" addr=0000000087e00000 size=0x100000 mem=ram name="fdt"
(qemu)
リセットベクタとかがセットされてる
これはなにもの? → /usr/local/Cellar/qemu/5.2.0_1/bin/../share/qemu/opensbi-riscv32-generic-fw_dynamic.elf
OpenSBIというブートローダみたい
ROMはどうやってマウントされるの?
これ? → -option-rom rom load a file, rom, into the option ROM space
-nographic時に使えるコマンド
ctrl-a h
ヘルプ
ctrl-a x
QEMUを終了
ctrl-a c
コンソールとモニタを切り替える
参考
モニタの使い方
-nographic 時に使えるコマンド