Como esses parâmetros do qemu para redirecionamento de stdout funcionam?

1

Estou usando os seguintes parâmetros para iniciar o QEMU para que a saída do convidado seja redirecionada para o console do host:

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

Eu tenho as seguintes perguntas:

  1. O que cada um desses sinalizadores significa?
  2. Que tipo de dispositivos são criados nos lados do convidado e do host?
  3. Onde devo procurar o dispositivo no lado do host (eu realmente quero ler a partir dele)?
por syntagma 01.09.2016 / 15:48

1 resposta

1

Na página de manual:

-chardev backend ,id=id [,mux=on|off] [,options]

Backend is one of: null, socket, udp, msmouse, vc, ringbuf, file, pipe, console, serial, pty, stdio, braille, tty, parallel, parport, spicevmc. spiceport. The specific backend will determine the applicable options.

All devices must have an id, which can be any string up to 127 characters long. It is used to uniquely identify this device in other command line directives.

E sobre o backend stdio em particular:

-chardev stdio ,id=id [,signal=on|off]

Connect to standard input and standard output of the QEMU process.

Portanto, este conecta o chardev virtiocon0 com o processo qemu 'stdin / out.

Os outros dois são:

-device driver[,prop[=value][,...]]
Add device driver. prop=value sets driver properties. Valid properties depend on the driver.

O primeiro driver, virtio-serial , simplesmente cria um canal de comunicação entre o host e o convidado. Isso é necessário para o próximo driver.

O último, virtconsole cria um dispositivo de console no convidado, anexado ao chardev criado antes, que foi anexado ao stdio / out do qemu.

O convidado pode usar esse dispositivo de console como qualquer outro tty (por exemplo, chamar getty , etc.).

O dispositivo criado no guest dependerá do kernel e como ele foi compilado, no linux normalmente é / dev / hvc0.

Não há dispositivo criado no host nesse caso, ele simplesmente usa stdin e stdout. Leia a partir dele no stdin e escreva na stdout.

Você também pode redirecionar stdin e stdout para outra coisa ou usar um backend chardev diferente. Tente soquete ou cano.

    
por 01.09.2016 / 19:06

Tags