結局 QEMU を -O0 でビルドし直した。 が無くて快適。
id:kvm さんにアドバイスを頂き、PFN は物理メモリインデックスだと分かった。
ユーザーランドから virtio を使いたいので リニアアドレス → 物理アドレスへの変換システムコールが必要だったので追加。
おおよそ仕組みが理解できたと思う。理解が正しければ virtio-console の使い方は
- device リセット
- output queue(番号は1) を select
- PFN を指定(ここに書き込む)
- NOTIFY で実際に書き込みを指示
となる。
現状は 2 でつまっていて、VIRTIO_PCI_QUEUE_SEL が正しく QEMU に伝わっていないようだ。謎。