misc: configurator: Config usb mediator devices in dropdown list

Support detecting connected usb devices in board_inspector and list them
in the usb mediator configuration menu.

Tracked-On: #7424
Signed-off-by: Calvin Zhang <calvinzhang.cool@gmail.com>
This commit is contained in:
Calvin Zhang 2022-05-06 15:19:15 +08:00 committed by acrnsi-robot
parent 2d66ba4d40
commit e36b615fe1
4 changed files with 49 additions and 11 deletions

View File

@ -0,0 +1,33 @@
# Copyright (C) 2022 Intel Corporation. All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
#
import os, re
from extractors.helpers import add_child, get_node
USB_DEVICES_PATH = "/sys/bus/usb/devices"
USB_DEVICES_REGEX = r"^\d-\d$" # only devices connecting to root hub
def extract(args, board_etree):
dev_regex = re.compile(USB_DEVICES_REGEX)
for dev in os.listdir(USB_DEVICES_PATH):
m = dev_regex.match(dev)
if m:
d = m.group(0)
devpath = os.path.join(USB_DEVICES_PATH, d)
with open(os.path.join(devpath, 'devnum'), 'r') as f:
devnum = f.read().strip()
with open(os.path.join(devpath, 'busnum'), 'r') as f:
busnum = f.read().strip()
cmd_out = os.popen('lsusb -s {b}:{d}'.format(b=busnum, d=devnum)).read()
desc = cmd_out.split(':', maxsplit=1)[1].strip('\n')
with open(devpath + '/port/firmware_node/path') as f:
acpi_path = f.read().strip()
usb_port_node = get_node(board_etree, f"//device[acpi_object='{acpi_path}']")
if usb_port_node is not None:
add_child(usb_port_node, "usb_device", location=d,
description=d + desc)

View File

@ -267,8 +267,9 @@ def generate_for_one_vm(board_etree, hv_scenario_etree, vm_scenario_etree, vm_id
script.add_virtual_device("uart", options="vuart_idx:{idx}") script.add_virtual_device("uart", options="vuart_idx:{idx}")
# Mediated PCI devices, including virtio # Mediated PCI devices, including virtio
for usb_xhci in eval_xpath_all(vm_scenario_etree, ".//usb_xhci[text() != '']/text()"): for usb_xhci in eval_xpath_all(vm_scenario_etree, ".//usb_xhci/usb_dev[text() != '']/text()"):
script.add_virtual_device("xhci", options=usb_xhci) bus_port = usb_xhci.split(' ')[0]
script.add_virtual_device("xhci", options=bus_port)
for virtio_input_etree in eval_xpath_all(vm_scenario_etree, ".//virtio_devices/input"): for virtio_input_etree in eval_xpath_all(vm_scenario_etree, ".//virtio_devices/input"):
backend_device_file = eval_xpath(virtio_input_etree, "./backend_device_file[text() != '']/text()") backend_device_file = eval_xpath(virtio_input_etree, "./backend_device_file[text() != '']/text()")

View File

@ -284,6 +284,18 @@ The size is a subset of the VM's total memory size specified on the Basic tab.</
</xs:sequence> </xs:sequence>
</xs:complexType> </xs:complexType>
<xs:complexType name="USBDevsConfiguration">
<xs:sequence>
<xs:element name="usb_dev" type="xs:string" minOccurs="0" maxOccurs="unbounded">
<xs:annotation acrn:title="USB device assignment"
acrn:options="//usb_device/@description" acrn:options-sorted-by="lambda s: s">
<xs:documentation>Select the USB devices you want to assign to this virtual machine.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="VirtioNetworkFrameworkType"> <xs:simpleType name="VirtioNetworkFrameworkType">
<xs:annotation> <xs:annotation>
<xs:documentation>A string with value: ``Kernel based (Virtual Host)`` or ``User space based (VBSU)``.</xs:documentation> <xs:documentation>A string with value: ``Kernel based (Virtual Host)`` or ``User space based (VBSU)``.</xs:documentation>

View File

@ -433,18 +433,10 @@ argument and memory.</xs:documentation>
<xs:documentation>Enable the ACRN Device Model to emulate COM1 as a User VM stdio I/O. Hypervisor global emulation will take priority over this VM setting.</xs:documentation> <xs:documentation>Enable the ACRN Device Model to emulate COM1 as a User VM stdio I/O. Hypervisor global emulation will take priority over this VM setting.</xs:documentation>
</xs:annotation> </xs:annotation>
</xs:element> </xs:element>
<xs:element name="usb_xhci" minOccurs="0"> <xs:element name="usb_xhci" type="USBDevsConfiguration" minOccurs="0">
<xs:annotation acrn:title="Virtual USB HCI" acrn:views="basic" acrn:applicable-vms="post-launched"> <xs:annotation acrn:title="Virtual USB HCI" acrn:views="basic" acrn:applicable-vms="post-launched">
<xs:documentation>Select the USB physical bus and port number that will be emulated by the ACRN Device Model for this VM. USB 3.0, 2.0, and 1.0 are supported.</xs:documentation> <xs:documentation>Select the USB physical bus and port number that will be emulated by the ACRN Device Model for this VM. USB 3.0, 2.0, and 1.0 are supported.</xs:documentation>
</xs:annotation> </xs:annotation>
<xs:simpleType>
<xs:annotation>
<xs:documentation>Input format: ``bus#-port#[:bus#-port#: ...]``, for example, ``1-2:2-4``.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:pattern value="([\d]+-[\d]+){0,1}(:[\d]+-[\d]+)*" />
</xs:restriction>
</xs:simpleType>
</xs:element> </xs:element>
<xs:element name="virtio_devices"> <xs:element name="virtio_devices">
<xs:annotation acrn:title="Virt-IO devices" acrn:views="basic" acrn:applicable-vms="post-launched"> <xs:annotation acrn:title="Virt-IO devices" acrn:views="basic" acrn:applicable-vms="post-launched">