これから実装した機能毎に分けてプログラムの説明をします。 なお、PCIデバイスのベンダID/デバイスIDは適当なもの (0x1234/ 0x1) を使用しています。 また、QEMU仮想デバイス上でprintf を使うとそのままコンソール上に出力されます。 ここでは、仮想デバイスからのprintfには##, デバイスドライバのprintkには**を 先頭で付けるように適当に関数をラップしています。 QEMU仮想デバイスをQEMUに登録する QEMU自体はC言語で書かれていますが、構造体を利用したオブジェクト指向の 書き方 (QOM : QEMU Objet Model) によってハードウェア等のオブジェクトが記述されています。 これについては include/qom/object.h の説明が参考になります。 あるオブジェクトには対応するオブジェクトクラスが ただ1つ存在し(クラスもQOMで