Назад | Перейти на главную страницу

Почему для virtio-serial есть интерфейс сокета на хосте и интерфейс символьного устройства на гостевом компьютере?

Я пытаюсь установить канал связи между хостом и одной из его гостевых виртуальных машин, используя kvm в качестве гипервизора. Для этого я использую virtio-serial.

Чтобы создать виртуальную машину, я выполнил следующую команду:

qemu-system-x86_64 \
-m 2048 -name ubuntu \
-hda ubuntu_image \
-device virtio-serial \
-chardev socket,path=/tmp/foo,server,nowait,id=foo \
-device virtconsole,name=jobsfoo,chardev=foo,name=org.ubuntu.foo \

А затем для общения с гостем я использую:

socat /dev/hvc0 -

И на хосте:

socat /tmp/foo -

Я пришел к пониманию этого /tmp/foo это розетка и /dev/hvc0 устройство персонажа.

Почему существует симметричный интерфейс для связи: сокет на хосте и символьное устройство на гостевой системе?

У вас есть символьное устройство в гостевой системе, потому что Unix и Unix-подобные операционные системы представляют последовательные порты как символьные устройства, и делали это примерно столько же, сколько существует Unix, и вы явно запросили виртуальный последовательный порт в гостевой системе. Порт создается драйвером устройства ядра, поэтому он должен быть специальным символьным устройством.

У вас есть сокет на хосте, потому что вы его явно запросили. Предположительно вы хотите двустороннюю связь от какой-то программы на хосте с какой-то программой на гостевой машине, которая понимает последовательные порты. Другой конец этого сокета, конечно же, обрабатывается процессом qemu, выполняющим виртуальную машину. Вы также можете подключить это к pty для эмуляции последовательной консоли или к простому файлу, чтобы просто регистрировать все, что выходит из порта.