Как эти параметры qemu для перенаправления stdout работают?

Я использую следующие параметры для запуска QEMU, чтобы выход из гостевой системы был перенаправлен на консоль хоста:

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

У меня есть следующие вопросы:

  1. Что означают каждый из этих флагов?
  2. Какие устройства создаются как на стороне гостя, так и на стороне хоста?
  3. Где я должен искать устройство на стороне хоста (я действительно хочу его прочитать)?

One Solution collect form web for “Как эти параметры qemu для перенаправления stdout работают?”

С manpage:

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

Backend является одним из: null, socket, udp, msmouse, vc, ringbuf, file, pipe, console, serial, pty, stdio, braille, tty, parallel, parport, spicevmc. spiceport. Конкретный бэкэнд определит применимые параметры.

Все устройства должны иметь идентификатор, который может содержать любую строку длиной до 127 символов. Он используется для уникальной идентификации этого устройства в других директивах командной строки.

И, в частности, о бэкэнде stdio:

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

Соединитесь со стандартным входом и стандартным выходом процесса QEMU.

Таким образом, этот соединяет шардеевский virtiocon0 с процессом qemu 'stdin / out.

Остальные два:

-device driver [, prop [= value] [, …]]
Добавьте драйвер устройства. prop = value устанавливает свойства драйвера. Действительные свойства зависят от драйвера.

Первый драйвер, virtio-serial просто создает канал связи между хостом и гостем. Это необходимо для следующего драйвера.

Последний, virtconsole создает консольное устройство для гостя, прикрепленное к ранее созданному chardev, которое было прикреплено к stdio / out qemu.

Затем гость может использовать это консольное устройство, как и любое другое tty (например, вызов getty на нем и т. Д.).

Устройство, созданное на гостевом компьютере, будет зависеть от ядра и того, как оно было скомпилировано, в Linux это обычно / dev / hvc0.

В этом случае на хосте нет устройства, которое просто использует stdin и stdout. Читайте на нем на stdin и пишите ему на stdout.

Вы также можете перенаправить stdin и stdout на что-то другое или использовать другой chardev сервер. Попробуйте сокет или трубу.

  • Вызовите фоновый процесс обратно на stdout
  • Перенаправить все вывод сценария bash (изнутри скрипта) в два файла: один append, one rewrite; но отбрасывать вывод на консоль
  • Предотвращение генерации вывода ssh-keyscan
  • Как сортировать файлы отдельно без слияния?
  • Чтение данных из канала в течение определенного времени (в секундах)
  • Перенаправить bash stdout + stderr в один файл и stderr в другой файл
  • Командная строка 'buffer'
  • Программа, которая может буферизовать stdin или файл
  • Перенаправление стандартного вывода и стандартная ошибка для одного файла
  • Как я могу вывести stdout и stderr и записать их в файл?
  • неблокирующая / многопоточная кошка
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.