ふふーん

一緒にやりたくなったのよ!あなたと、調合を!

QMPを使う

いつも忘れるのでQMPの使い方のメモ。

ドキュメントはこのへん。

ソースツリーの中のドキュメントが前はqmp-commands.hxだったけど docs/qmp-commands.txtになって、今はqapi-schema.jsonになっているっぽい。 見つけるのに苦労した。

qemu起動するときに-qmp tcp:localhost:4444,server,nowaitとかオプションつけると ローカルホストの4444ポートで待ち受けるので適当にncとかでつなぐ。

$ qemu-system-x86_64 -enable-kvm -smp 1 -m 1024 \
    -qmp tcp:localhost:4444,server,nowait \
    -cdrom dfly-x86_64-4.8.0_REL.iso
$ nc localhost 4444
{"QMP": {"version": {"qemu": {"micro": 2, "minor": 6, "major": 2}, "package": " (qemu-2.6.2-8.fc24)"}, "capabilities": []}}

-> {"execute": "qmp_capabilities"}
<- {"return": {}}

->の行が入力。<-がQEMUからのレスポンス。

device_addでデバイスの追加、netdev_addでネットワークデバイスの追加とかできる。 drive_addはないっぽい(QEMUのコンソールからはできるんだけど)。

-> {"execute": "netdev_add", "arguments": {"type": "user", "id": "netdev0"}}
<- {"return": {}}
-> {"execute": "device_add", "arguments": {"driver": "e1000", "netdev": "netdev0", "mac": "52:54:00:bb:bb:bb"}}
<- {"return": {}}

screendumpで画面のスクリーンショットとったりsend-keyでキー入力できたりもする。

-> {"execute": "screendump", "arguments": {"filename": "ss.ppm"}}
<- {"return": {}}
-> {"execute": "send-key", "arguments": {"keys": [{"type": "qcode", "data": "a"}]}}
<- {"return": {}}

おわり。