User Tools

Site Tools


doc:appunti:linux:sa:qemu_usb_passthrough

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
doc:appunti:linux:sa:qemu_usb_passthrough [2022/11/03 12:26] – [Aggiungere la periferica successivamente] niccolodoc:appunti:linux:sa:qemu_usb_passthrough [2022/11/03 12:49] – [Assegnare i permessi] niccolo
Line 3: Line 3:
 Come passare completamente la gestione di una periferica USB da un sistema virtualizzante (host) **QEMU** (GNU/Linux con KVM) ad un sistema virtualizzato (guest) **Windows 10**. Procedura sperimentata su Debian GNU/Linux 11 Bullseye. Come passare completamente la gestione di una periferica USB da un sistema virtualizzante (host) **QEMU** (GNU/Linux con KVM) ad un sistema virtualizzato (guest) **Windows 10**. Procedura sperimentata su Debian GNU/Linux 11 Bullseye.
  
-Quando si avvia l'emulatore **qemu-system-x86_64** si deve specificare quale periferica USB verrà gestita all'emulatore stesso. È possibile identificare la periferica in tre modi diversi:+Il programma emulatore **qemu-system-x86_64** deve sapere quale periferica USB deve essere collegata alla macchina guest. È possibile identificare la periferica in tre modi diversi:
  
   * Identificazione con **vendorid** e **productid**. Ogni periferica USB ha un identificativo produttore/prodotto che dovrebbe essere univoco. Il sistema operativo GNU/Linux mostra tali codici con il comando **lsusb**.   * Identificazione con **vendorid** e **productid**. Ogni periferica USB ha un identificativo produttore/prodotto che dovrebbe essere univoco. Il sistema operativo GNU/Linux mostra tali codici con il comando **lsusb**.
Line 38: Line 38:
   * **Bus 01** - Il bus USB è sempre il numero **1**.   * **Bus 01** - Il bus USB è sempre il numero **1**.
   * **Port 1.1** - La porta ha un identificativo gerarchico con il punto utilzzato come separatore: abbiamo l'hub numero **1** seguito dal numero della porta **1**.   * **Port 1.1** - La porta ha un identificativo gerarchico con il punto utilzzato come separatore: abbiamo l'hub numero **1** seguito dal numero della porta **1**.
 +
 +==== Assegnare i permessi ====
 +
 +È possibile eseguire il programma ''qemu-system-x86_64'' da utente non privilegiato, ma l'emulatore dovrà avere pieno accesso alla periferica USB di cui si desidera il passthrough a Windows. Dopo aver identificato **hostbus** e **hostaddr** assegnati dal kernel alla periferica, l'utente root potrà assegnare i permessi necessari. Ad esempio con:
 +
 +<code>
 +chmod 0666 /dev/bus/usb/001/026
 +</code>
 +
 +È possibile configurare il sistema in modo tale che una determinata periferica riceva gli opportuni permessi ad ogni connessione. Ad esempio si potrebbe volere che la periferica sia in lettura/scrittura per gli utenti che appartengono al gruppo **plugdev** (in Debian è il gruppo degli utenti autorizzati a montare e smontare i dispostivi rimuovibili). Per ottenere questo risultato si crea un file ad esempio **/etc/udev/rules.d/99-flash-card-reader.rules** con il seguente contenuto:
 +
 +<file>
 +SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="05e3", ATTR{idProduct}=="0723", GROUP="plugdev", MODE="0660"
 +</file>
 +
 +Per forzare il sistema **udev** a rileggere i file di configurazione si esegue:
 +
 +<code>
 +udevadm control --reload-rules && udevadm trigger
 +</code>
 +
 +Alla successiva connessione della periferica si può verificare che abbia ricevuto i giusti permessi.
  
 ==== Aggiungere la periferica all'avvio di QEMU ==== ==== Aggiungere la periferica all'avvio di QEMU ====
Line 79: Line 101:
  
 **ATTENZIONE**! Se QEMU non ha identificato correttamente il tipo della periferica (//USB Storage// in questo caso), è possibile che manchino i permessi di lettura/scrittura sulla periferica stessa. **ATTENZIONE**! Se QEMU non ha identificato correttamente il tipo della periferica (//USB Storage// in questo caso), è possibile che manchino i permessi di lettura/scrittura sulla periferica stessa.
 +
 +A questo punto la periferica può essere aggiunta con un comando del tipo:
 +
 +<code>
 +(qemu) device_add usb-host,vendorid=0x05e3,productid=0x0723
 +</code>
 +
 +Immediatamente il **Gestione dispositivi** di Windows dovrebbe riconoscere la nuova periferica.
  
 ===== Web References ===== ===== Web References =====
doc/appunti/linux/sa/qemu_usb_passthrough.txt · Last modified: 2022/11/03 12:49 by niccolo