Freebox Server (Ultra V9/ Pop V8/ Delta V7 / Revolution V6 / Mini 4K)

  • Status Closed
  • Percent Complete
    100%
  • Task Type Anomalie
  • Category Services locaux → VM
  • Assigned To No-one
  • Operating System Tous
  • Severity Low
  • Priority Very Low
  • Reported Version 4.8.9
  • Due in Version Undecided
  • Due Date Undecided
  • Votes
  • Private
Attached to Project: Freebox Server (Ultra V9/ Pop V8/ Delta V7 / Revolution V6 / Mini 4K)
Opened by dan_73 - 15/05/2024
Last edited by mmakassikis - 10/06/2024

FS#39465 - VMs et USB

Bonjour

J’utilise les VMs sur le serveur Delta et je viens de constater que l’on peut pas utiliser simultanément les 2 ports USB (A ou C) sur 2 VMs distinctes et démarrées.
Pour chaque VM on peut associer le ou les ports USB qui seront utilisés : aucun, a, c ou a + c.
Or si je crée 2 VMs en espérant utiliser l’USB A sur la première et l’USB C sur la seconde, je viens de découvrir qu’on ne peut pas démarrer les deux en même temps. Un message d’erreur indique que l’USB est déjà utilisé.
A quoi bon avoir le choix si la sélection n’est pas séparée pour chaque VM ?
C’est bien dommage ça oblige à arrêter l’une ou l’autre alors que les ports sont disponibles et surtout inutilisés.
Y-a-t-il moyen de contourner ou d’y remédier ?
Merci

Closed by  mmakassikis
10.06.2024 13:08
Reason for closing:  Impossible à faire

Bonjour

Alors sincèrement, vu le nombre de tickets d'évolutions (fondées) qui traînent sur ce forum sans aucune réponse de FREE, malheureusement je doute que FREE vous réponde ou commente / argumente votre demande. Je trouve ça malheureux

C'est pourquoi je vais essayer de le faire de la manière la plus pertinente possible afin que tout ceux qui se posent cette questions ait une réponse.

Aussi, je ne travail pas pour Free ou le groupe Iliad Telecom, les informations présentes ici proviennent de mon analyse personnelle et n'engagent que moi.


En effet, vous avez raison.
Quand on essaye de démarrer 2 VM chacune avec un port USB différent, ça ne fonctionne pas et la box retourne :


{
  "msg": "Impossible de démarrer cette VM : Une autre VM utilise déjà l’USB",
  "success": false,
  "error_code": "usb_in_use"
}

Alors j'ai regardé la doc développeur présente dans FreeboxOS en cliquant sur le logo Free qui ouvre le menu puis en allant dans la section 'développer'.

Dans la section :
API List > Virtual Machines > VM API

en cherchant le code d'erreur "usb_in_use" on ne trouve pas grand chose, alors j'ai fais une recherche sur l'instruction de l'API qui permet d'assigner les ports USB à telle ou telle VM : "bind_usb_ports"

Et là, la doc est claire, je cite :


bind_usb_ports[] array of enum
List of ports that should be bound to this VM. Only one VM can use USB at given time, whether is uses only one or all USB ports. The list of system USB ports is available in VmSystemInfo. For example: “usb-external-type-a”, “usb-external-type-c”.


Ce n'est clairement pas prévu, et c'est documenté…

Afin de comprendre pourquoi, je vous invite à regarder cette vidéo sur youtube :
https://www.youtube.com/watch?v=t0GSFu0ESD8

À la minute 21'22 vous constaterez que le contrôleur USB3 de la delta est un chipset Texas Instrument de type 'HUB' unique TUSB8020B et gérant les 2 ports USB3, le typeA et le typeC (cf datasheet de Texas Instrument ici : https://www.ti.com/document-viewer/tusb8020b/datasheet

Réaliser du passthru sur ce contrôleur depuis une VM impose d'obtenir "l'accès exclusif" au chipset comme vous pouvez le voir sur le schéma de la partie 1 (Features) de la datasheet ou seul 1 canal existe pour communiquer entre l'ordinateur et le chipset (ici, l'ordinateur représente soit la BOX au quotidien, soit une VM dans le cas ou on passe le contrôleur TUSB8020B à une VM)

Par contre, dommage que la box n'ait pas plus de ports USB car le hub du chipset peut gérer 8 connecteurs USB comme le montre

lsusb -v 


fait sur le hub dans une VM :

lsusb -v -s 002:001

Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               3.00
  bDeviceClass            9 Hub
  bDeviceSubClass         0 
  bDeviceProtocol         3 
  bMaxPacketSize0         9
  idVendor           0x1d6b Linux Foundation
  idProduct          0x0003 3.0 root hub
  bcdDevice            6.01
  iManufacturer           3 Linux 6.1.0-18-arm64 xhci-hcd
  iProduct                2 xHCI Host Controller
  iSerial                 1 0000:00:09.0
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x001f
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0xe0
      Self Powered
      Remote Wakeup
    MaxPower                0mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         9 Hub
      bInterfaceSubClass      0 
      bInterfaceProtocol      0 Full speed (or root) hub
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0004  1x 4 bytes
        bInterval              12
        bMaxBurst               0
Hub Descriptor:
  bLength              12
  bDescriptorType      42
  nNbrPorts             8
  wHubCharacteristic 0x000a
    No power switching (usb 1.0)
    Per-port overcurrent protection
  bPwrOn2PwrGood       50 * 2 milli seconds
  bHubContrCurrent      0 milli Ampere
  bHubDecLat          0.0 micro seconds
  wHubDelay             0 nano seconds
  DeviceRemovable    0x00 0x00
 Hub Port Status:
   Port 1: 0000.02a0 5Gbps power Rx.Detect
   Port 2: 0000.02a0 5Gbps power Rx.Detect
   Port 3: 0000.02a0 5Gbps power Rx.Detect
   Port 4: 0000.02a0 5Gbps power Rx.Detect
   Port 5: 0000.02a0 5Gbps power Rx.Detect
   Port 6: 0000.02a0 5Gbps power Rx.Detect
   Port 7: 0000.02a0 5Gbps power Rx.Detect
   Port 8: 0000.02a0 5Gbps power Rx.Detect
Binary Object Store Descriptor:
  bLength                 5
  bDescriptorType        15
  wTotalLength       0x000f
  bNumDeviceCaps          1
  SuperSpeed USB Device Capability:
    bLength                10
    bDescriptorType        16
    bDevCapabilityType      3
    bmAttributes         0x00
    wSpeedsSupported   0x0008
      Device can operate at SuperSpeed (5Gbps)
    bFunctionalitySupport   1
      Lowest fully-functional device speed is Full Speed (12Mbps)
    bU1DevExitLat           0 micro seconds
    bU2DevExitLat           0 micro seconds
Device Status:     0x0001
  Self Powered

Au niveau du bus PCI Express de la VM, Le périphérique USB QEMU monté sur le bus PCIE à l'intérieur de la VM est en réalité un binding sur les ports USB physiques, et quand on dump le hub comme ci-dessus, on retrouve bien les capabilities présentes sur la datasheet du chipset TUSB8020B. En temps qu'hyperviseur de type 2, QEMU "emule le device" bien qu'en réalité QEMU bind le chipset TUSB8020B au niveau hardware ce qui impose l'accès exclusif à ce chipset depuis le kernel de la VM.

Le point "8.2 Functional Block Diagram" de la datasheet montre que le HUB USB3 est unique et n'a qu'un seul canal de contrôle ce qui rend compliqué voir impossible de pouvoir adresser les 2 ports séparément depuis 2 bus PCIE différents (lire depuis 2 VM)

Donc en terme d'évolutions, il semble compliqué (lire impossible) au niveau firmware de de donner l'accès en passthru à 2 instances différentes (2 VM) sur le même contrôleur et particulièrement sur le chipset Texas Instrument TUSB8020B.

Pour faire ce que vous demandez, je pense qu'il faudrait ajouter un second contrôleur TUSB8020B sur la motherboard de la Freebox Delta afin de pouvoir passer ce second contrôleur à une seconde VM.

PS : Le contrôleur HD3220 de Texas Instrument également présent sur la carte mère de la freebox Delta juste derrière le port USB-typeC ne gère que l'aspect "typeC" et la norme USB-typeC pour le port USB-C (genre des truc spécifiques comme les 15 watts en 'USB Power Delivery', le sens du câble, etc…)

Cordialement
nbanba

Bonjour Nbanba et un grand merci d'avoir pris le temps de me répondre avec autant de détails.

Je vais donc oublier la possibilité d'utiliser ces ports USB en simultané.

Au vu de votre réponse et ne pensant pas en avoir d'autres, je vais fermer cette demande.

Cordialement

Admin

Bonjour,

L'analyse de nbanba est correcte

Loading...

Available keyboard shortcuts

Tasklist

Task Details

Task Editing