***本記事にはプロモーションが含まれています。***
QEMUの中では、次のようにシリアルに関するデータが渡されています。
vl.cで、
serial_hds[i] = qemu_chr_open(serial_devices[i]);
serial_hdsに、CharDriverState *chrが入る。
pc.cで、
serial_init( , , , serial_hds[i]);
で、シリアルに渡され、
serial.cで、
SerialState s->chr = chr;
として保存。
qemu_chr_add_read_handler(chr, serial_can_reveive, serial_receive1, s);
として、割り込みハンドラに渡される。
割り込みハンドラの登録と、データの送受信の関数など作り、とりあえずシリアルは動くようになりました。
ただ、Win2kゲスト/WinXPホストのHyperTerminal同士で通信したとき、通信パラメータのRTS/CTS制御を有効にすると、ゲストからホストに文字が送れないのです。ハードウェア制御がなしならばいいのですが。
QEMUのシリアルのエミュレーションに問題があるのか、使っているComEmulDrvという仮想COMポートに問題があるのかわからない…。
もっと細かく見ないといけないのかな。