-serial unix:/path/to/some/file
引数の使用に関するドキュメントがどこにもあまり見つからないようですqemu-system-XXXX
ので、ここで誰かがこの点について説明してくれることを期待しています。具体的には、ホスト上のこのソケットにデータを送信し、QEMU ゲスト側でそれを受信する適切な方法が知りたいです。
アップデート: テストとして、RHEL 8 ホストと Solaris 8 ゲストを使用しています。LawrenceC の提案に従って、引数を追加しました-serial udp::xxxx
。また、UDP ポート XXXX に接続して何かを書き込む C プログラムも作成しました。ただし、 を介して RHEL 8 側に書き込まれたバイトが表示されませんnc -u -l -p xxx
。何が足りないのでしょうか?
どうやら私はこのアプローチを根本的に誤解していたようで、QEMU ゲストでポートが開くと考えていましたが、これは単にゲストからのシリアル ポート データをホストのローカル UDP ポートに変換するだけです。
答え1
仮想シリアルポートをターミナルプログラムで対話的に使用しようとしていますか?そうであれば、minicom
シリアルポートデバイスではなくソケットと対話できるようです。参考::
Serial port setup
A - Serial device
/dev/tty1 or /dev/ttyS1 for most people. [...]
To use a UNIX socket for communication the device name
must be prefixed with "unix#" following by the full path
and the filename of the socket. Minicom will then try to
connect to this socket as a client. As long as it cannot
connect to the socket it stays 'offline'. As soon as the
connection establishes, minicom goes 'online'. If the
server closes the socket, minicom switches to 'offline'
again.
プログラムを使用して仮想シリアル ポートにデータを送信しようとしている場合は、udp オプションを試してから、netcat を使用できます。
単純な読み取り専用コンソールだけが必要な場合は、次のよう
-serial udp::4555
にQEMU を起動して、netcat または nc を使用できます。QEMU がそのポートに何かを書き込むたびに、netconsole セッションに表示されます。nc
nc -u -l -p 4555
QEMUの仮想シリアルポートをUNIXソケットに接続する必要がある場合は、socat
推奨されている方法を試してください。ここ。
答え2
のQEmu-KVM ノート このセクションを含む Unixソケットに基づくインタラクション ソケットを使用するためのすべてのオプションを再開します。
Unixソケットに基づくインタラクション
QEmu 仮想マシンは通常、QEmu ウィンドウを使用したグラフィカル モード、またはシリアル コンソールを標準入出力にリダイレクトしたコンソール モード (-nographic オプション) のいずれかで使用されます。3 番目の選択肢は、Unix ソケットを使用してゲストと通信することです。これは、次の 2 つの QEmu オプションで実現できます。
-monitor unix:monitor.sock,server,nowait -serial unix:console.sock,server,nowait
ゲスト マシンが Linux を実行している場合、仮想シリアル ポートはデバイス ttyS0 を通じて利用できます。次のカーネル コマンド ライン パラメータを使用して、初期カーネル メッセージを表示するコンソールとして使用できます。
console=ttyS0,38400n8 earlyprint=serial,ttyS0,38400n8
ゲストマシンが systemd を実行している場合は、次のコマンドを使用してシリアルポートにログインシェルを自動的に生成することができます。
systemctl enable [email protected]
次のことが可能になります:
たとえば次のようにして QEmu モニター コンソールに接続します。
# Use cfmakeraw to make TAB work and isig=1 to allow using Ctrl+C socat STDIO,cfmakeraw,isig=1 UNIX:monitor.sock # socat<1.7.3.0 does not support cfmakeraw. Use raw instead socat STDIO,raw,echo=0,isig=1 UNIX:monitor.sock
たとえば次のようにして QEmu ゲスト コンソールに接続します。
socat STDIO,cfmakeraw UNIX:console.sock # or, with socat<1.7.3.0 socat STDIO,raw,echo=0 UNIX:console.sock