stdoutリダイレクトのqemuパラメータはどのように機能しますか?

stdoutリダイレクトのqemuパラメータはどのように機能しますか?

ゲストの出力がホストコンソールにリダイレクトされるように、次のパラメータを使用してQEMUを起動します。

-chardev stdio,id=virtiocon0
-device virtio-serial
-device virtconsole,chardev=virtiocon0

次の質問があります。

  1. これらの記号は何を意味しますか?
  2. ゲスト側とホスト側の両方にどのような種類のデバイスが作成されますか?
  3. 実際に読みたいホスト側のデバイスをどこで見つける必要がありますか?

ベストアンサー1

マンページから:

-chardev バックエンド,id=id [,mux=on|off] [,options]

バックエンドはnull、ソケット、udp、msmouse、vc、ringbuf、ファイル、パイプ、コンソール、シリアル、pty、stdio、点字、tty、パラレル、parport、spicevmcの1つです.スパイス港。特定のバックエンドによって適用されるオプションが決まります。

すべてのデバイスにはIDが必要です。IDは最大127文字の文字列にすることができます。これは、他のコマンドラインコマンドの中でデバイスを一意に識別するために使用されます。

特にstdioバックエンドに関して:

-chardev stdio ,id=id [,s​​ignal=on|off]

QEMUプロセスの標準入力と標準出力に接続します。

したがって、これはvirtiocon0chardevをqemuプロセスの標準入出力に接続します。

残りの2つは次のとおりです。

-devicedriver[,prop[=value][,...]]
デバイスドライバを追加します。 prop=value はドライバ属性を設定します。有効な属性はドライバーによって異なります。

最初のドライバは、virtio-serial単にホストとゲスト間の通信チャネルを生成します。これは次のドライバーに必要です。

最後は、virtconsoleゲスト仮想マシンにコンソールデバイスを作成し、それを以前に作成されたchardevに接続してから、デバイスをqemuのstdio / outに接続することです。

その後、ゲストはこのコンソールデバイスを他のttyのように使用できます(たとえば、呼び出しgettyなど)。

ゲストによって生成されたデバイスはカーネルとコンパイル方法によって異なり、Linuxでは通常/dev/hvc0です。

この場合、ホストにデバイスは作成されず、標準入力と標準出力のみが使用されます。 stdinから読み込み、stdoutに書き込みます。

また、stdinとstdoutを別のものにリダイレクトしたり、別のchardevバックエンドを使用したりすることもできます。ソケットやパイプを試してみてください。

おすすめ記事