工業用PC上のソフト開発をqemuで行う.
工業用PCとはいっても,大部分はWindowsやLinuxが動くPCと同じなので,qemuやbochsといったPCエミュレータが使える.
ただし,膨大にシリアルポートやパラレルポートがあったり,IRQの割当が微妙にお茶目だったりすることがあるのが工業用PCの特徴でもある..
お茶目な構成の実ハードは,台数が足りなく,開発も遅れがちで,下流のソフト屋には納品直前まで届かないこともしばしば.
ハード屋さんの仕事を待っている時間があったら,qemuをハックして自衛しよう,というのが今回のネタ.引用するqemuのバージョンは,本家のsvnにある今日現在のHEADリビジョン.
PCハードのエミュレーションは,qemu/hw/pc.c をとっかかりとしてみていけばよい.
既にqemuがエミュレートしているハードウェアの構成を変えるのは非常に簡単.例えばパラレルポートなら,
static int parallel_io[MAX_PARALLEL_PORTS] = { 0x378, 0x278, 0x3bc }; static int parallel_irq[MAX_PARALLEL_PORTS] = { 7, 7, 7 };
なんていう感じで,説明の必要がないほど.シリアルポートも同様.
I/Oバスに繋がった特殊なデバイスを自前でエミュレートしなければならない場合,qemu/vl.c 辺りにある
/* size is the word size in byte */ int register_ioport_read(int start, int length, int size, IOPortReadFunc *func, void *opaque)
とか
/* size is the word size in byte */ int register_ioport_write(int start, int length, int size, IOPortWriteFunc *func, void *opaque)
とかを覗けば,何をすればよいのかは概ね想像がつくはず.