Эмулировать USB-накопитель с переключателем только для чтения в qemuLinux

Anonymous
Эмулировать USB-накопитель с переключателем только для чтения в qemu

Сообщение Anonymous »

Мне нужно эмулировать1 USB-накопитель с переключателем только для чтения2 на виртуальной машине qemu Linux3.
Важная часть заключается в том, что во время эмуляции мне нужно имитировать действие на этом переключателе (переход от чтения/записи к режиму только для чтения и наоборот).
Мне также нужно будет прочитать то, что на нем написано, из хозяин, после виртуальная машина останавливается.
Вот что я нашел:
Я запускаю виртуальную машину с чем-то вроде

Код: Выделить всё

qemu-system-x86_64 -drive if=none,id=usbstick,format=raw,file=/path/to/file.raw\
-device nec-usb-xhci,id=xhci\
-device usb-storage,bus=xhci.0,drive=usbstick,removable=on\
-monitor unix:/tmp/qemu-socket,server,nowait\
...other options elided as irrelevant for the question...
Это работает хорошо, и если я добавлю к диску параметр read-only=on, то он действительно будет доступен только для чтения.
Теперь я могу подключиться к монитору qemu с помощью

Код: Выделить всё

socat -,echo=0,icanon=0 unix-connect:/tmp/qemu-socket
И введите

Код: Выделить всё

change usbstick /path/to/file.raw raw read-only
Это дает ошибку «Ошибка: блок-узел доступен только для чтения», и виртуальная машина по-прежнему видит USB-накопитель как для чтения/записи.
Я проверяю это, просматривая содержимое /sys/block/sda/ro, которое никогда не меняется.
Противоположный сценарий, который загружается в режиме только для чтения, а затем переключается на чтение-запись, не выдает ошибку, но ОС в виртуальной машине по-прежнему видит его только для чтения.
Есть идеи, чего мне не хватает?
Спасибо
1проект нуждается в эмуляции для тестирования
2ключ, который нужно эмулировать
3Это виртуальная машина nixos, запущенная nix, которая использует qemu под капотом

Подробнее здесь: https://stackoverflow.com/questions/797 ... ch-on-qemu

Вернуться в «Linux»