Как запустить qemu с -nographic и -monitor, но при этом иметь возможность отправить гостю Ctrl+C и выйти с помощью Ctrl+A X?

avatar
Ciro Santilli 新疆再教育营六四事件法轮功郝海东
8 апреля 2018 в 10:34
14932
1
4

Я только что узнал, что если вы запускаете QEMU с -monitor telnet::45454,server,nowait -nographic, то Ctrl-C убивает виртуальную машину QEMU вместо того, чтобы генерировать SIGINT для гостя: Как передать Ctrl-C гостю при запуске qemu с -нографический? | Обмен стеками Unix и Linux

Однако я не хочу удалять -monitor, потому что это удобно для автоматизации команд мониторинга, например. это позволяет мне создать вспомогательный скрипт, который делает:

echo 'savevm my_snap_id' |  telnet localhost 45454

Есть ли способ, чтобы мои Ctrl-C и -monitor работали с -nographic?

Полная команда QEMU:

qemu-system-x86_64 -append 'root=/dev/vda console=ttyS0' -kernel 'bzImage' -drive file='rootfs.ext2.qcow2,if=virtio,format=qcow2' -nographic -monitor telnet::45454,server,nowait

В QEMU 2.10.1, Ubuntu 17.10, полная команда QEMU:

./x86_64-softmmu/qemu-system-x86_64 \
-append "root=/dev/sda console=ttyS0 nokaslr printk.time=y" \
-drive file="${dir}/out/x86_64/buildroot/images/rootfs.ext2.qcow2,format=qcow2" \
-kernel "${dir}/out/x86_64/buildroot/images/bzImage" \
-nographic \

Если я добавлю:

-chardev stdio,id=s1,signal=off \
-serial none -device isa-serial,chardev=s1

затем Ctrl+C начинает работать как нужно, но Ctrl+A X не работает для выхода из QEMU, что иногда раздражает: я могу использовать telnet до quit, но это требует больше ввода/автоматизации.

http://lists.nongnu.org/archive/html/qemu-discuss/2018-04/msg00006.html

Источник
ivan_pozdeev
10 апреля 2018 в 01:32
0

Вам нужно каким-то образом отправить эти ключи на альтернативное мониторное устройство.

Ciro Santilli 新疆再教育营六四事件法轮功郝海东
10 апреля 2018 в 01:36
0

@ivan_pozdeev какое альтернативное устройство монитора, как его использовать?

ivan_pozdeev
10 апреля 2018 в 01:37
0

qemu.weilnetz.de/doc/qemu-doc.html

Ciro Santilli 新疆再教育营六四事件法轮功郝海东
10 апреля 2018 в 01:39
0

@ivan_pozdeev извините, я не могу найти там "альтернативный монитор"

ivan_pozdeev
10 апреля 2018 в 01:44
0

Опция -monitor имеет значение по умолчанию, описанное в документе. Под «альтернативным устройством» я имел в виду устройство, которое вы указываете qemu использовать вместо устройства по умолчанию.

Ответы (1)

avatar
Ciro Santilli 新疆再教育营六四事件法轮功郝海东
10 апреля 2018 в 10:20
10

Добавить -serial mon:stdio и удалить другие -serial параметры

Следующее удовлетворяет всем моим требованиям:

./x86_64-softmmu/qemu-system-x86_64 \
  -append 'root=/dev/vda nopat nokaslr norandmaps printk.devkmsg=on printk.time=y console=ttyS0' \
  -drive file="${dir}/out/x86_64/buildroot/images/rootfs.ext2.qcow2,if=virtio,format=qcow2" \
  -kernel "${dir}/out/x86_64/buildroot/images/bzImage" \
  -nographic \
  -monitor telnet::45454,server,nowait \
  -serial mon:stdio

Или для aarch64:

./aarch64-softmmu/qemu-system-aarch64 \
  -M virt \
  -append 'root=/dev/vda nokaslr norandmaps printk.devkmsg=on printk.time=y' \
  -cpu cortex-a57 \
  -drive file="${dir}/out/aarch64/buildroot/images/rootfs.ext2.qcow2,if=virtio,format=qcow2" \
  -kernel "${dir}/out/aarch64/buildroot/images/Image" \
  -monitor telnet::45454,server,nowait \
  -nographic \
  -serial mon:stdio \

Протестировано на QEMU 9d2a09063922757ec3640d93f6b35921ab95b1c2 (сообщение v2.12.0-rc2).