web-dev-qa-db-ja.com

KVMホストからlibvirtを使用してゲストにUSBハブを渡す

Linuxサーバーに次のUSBデバイスがあります。

# lsusb -t
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/2p, 480M
    |__ Port 1: Dev 2, If 0, Class=hub, Driver=hub/6p, 480M
        |__ Port 2: Dev 3, If 0, Class=HID, Driver=usbfs, 1.5M
        |__ Port 3: Dev 4, If 0, Class=hub, Driver=hub/4p, 480M
            |__ Port 1: Dev 8, If 0, Class=print, Driver=usbfs, 12M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/2p, 480M
    |__ Port 1: Dev 2, If 0, Class=hub, Driver=hub/6p, 480M

USBハブ全体(Dev 4)をWindowsに渡したいXPゲスト。この場合、ハブに接続され、ハブから削除されたデバイスは、ゲストによって自動的に処理されます(右?))。

virsh attach-deviceで次のコードを試してみました。

<hostdev mode='subsystem' type='usb' managed='yes'>
 <source>
  <address type='usb' bus='0x002' port='1.3' />
 </source>
</hostdev>

しかしそれはうまくいきませんでした:

error: Failed to attach device from attach_hub.xml
error: internal error usb address needs device id

何が悪いのですか?

3
stenio

私はこのスレッドが数年前のものであることを知っていますが、この正確なトピックについて数日分の作業を行っており、質問が私の答えの一部を使用できると感じています。

FirstLibvirtドメイン形式のドキュメント に従って、次のスニペットは正しい<hostdev>構文の概要を示します:

...
<devices>
  <hostdev mode='subsystem' type='usb'>
    <source startupPolicy='optional'>
      <vendor id='0x1234'/>
      <product id='0xbeef'/>
    </source>
    <boot order='2'/>
  </hostdev>
</devices>
...

エラーの理由は、USBの<vendor>タグと<product>タグがないためです<source>

2番目、Ubuntu 16.04以降(私のような)を実行している場合、上記を使用すると、上記のXMLデバイス形式のUSBパススルーメッセージが成功します。 virsh attach-deviceホットプラグ。ただし、デバイスはVMに接続されません。これはAppArmorのせいです。 別のスレッドこのAppArmor Libvirt構成 にリンクして、USBパススルーの問題を解決するためのコメントを見つけました。問題を解決するために機能したことを確認できます。

関連するAppArmorスニペット:

ソフトウェアプログラムがUSBデバイスに正しくアクセスするには、qemuのapparmor抽象化を変更する必要があります。編集/etc/apparmor.d/abstractions/libvirt-qemu行を追加:

# this lets qemu read all USB device information and might be considered a security risk
/run/udev/data/* r,

3番目、他の回答で参照されている「USBハブ」は、ホストマシンのスコープではなく、VMのスコープのハブです。同じLibvirtドキュメントから:

ハブ要素には、デバイスを特定のコントローラーに関連付けることができるtype = 'usb'のオプションのサブ要素があります[...]

多くのデバイスには、ゲストに提示される仮想バス上のデバイスが配置される場所を説明するオプションのサブ要素があります。

これが誰かを助けることを願っています:)

2
maff1989

ハブのxml: https://libvirt.org/formatdomain.html#elementsHub

例:

  <hub type='usb'>
     <address type='usb' bus='0' port='1'/>
  </hub>

https://www.redhat.com/archives/libvir-list/2011-August/msg00816.html

2
wenjianhn

まだ誰かがそれを探しているなら、フォームを使ってください:

<address type='usb' bus='0' device='1'/>

デバイスエントリは、lsusb -tによって出力される「Dev」エントリに対応します

0
Wes Janzen