config_tools: extract virtio device input basic information

Add a new extractor 70-device-classes.py which extracts virtio device
input basic information such as: name and phys.

An example:
<device_classes>
  <inputs>
    <input>
      <name>Power Button</name>
      <phys>LNXPWRBN/button/input0</phys>
    </input>
  <inputs>
</device_classes>

Tracked-On: #6690
Signed-off-by: Kunhui-Li <kunhuix.li@intel.com>
This commit is contained in:
Kunhui-Li 2022-03-24 23:57:11 +08:00 committed by acrnsi-robot
parent 8c46c2306f
commit e47765d8e5
2 changed files with 43 additions and 0 deletions

View File

@ -102,6 +102,7 @@ def main(board_name, board_xml, args):
root_node.append(lxml.etree.Element("memory"))
root_node.append(lxml.etree.Element("ioapics"))
root_node.append(lxml.etree.Element("devices"))
root_node.append(lxml.etree.Element("device-classes"))
extractors_path = os.path.join(script_dir, "extractors")
extractors = [f for f in os.listdir(extractors_path) if f[:2].isdigit()]

View File

@ -0,0 +1,42 @@
# Copyright (C) 2022 Intel Corporation.
#
# SPDX-License-Identifier: BSD-3-Clause
#
import re, os
import logging
from extractors.helpers import add_child, get_node
SYS_DEVICES_CLASS_PATH = "/sys/class/input/"
def get_input_ids():
input_ids = list()
root_regex = re.compile("input([0-9]+)")
for root in filter(lambda x: x.startswith("input"), os.listdir(SYS_DEVICES_CLASS_PATH)):
m = root_regex.match(root)
if m:
input_ids.append(int(m.group(1)))
return sorted(input_ids)
def extract_topology(device_classes_node):
inputs_node = add_child(device_classes_node, "inputs", None)
input_ids = get_input_ids()
for id in input_ids:
input_node = add_child(inputs_node, "input", None)
try:
with open("/sys/class/input/input{}/name".format(id), "r") as f:
res = f.read().strip()
add_child(input_node, "name", res)
except Exception as e:
logging.warning(f"Failed to read the data of /sys/class/input/input{id}/name: {e}")
try:
with open("/sys/class/input/input{}/phys".format(id), "r") as f:
res = f.read().strip()
add_child(input_node, "phys", res)
except Exception as e:
logging.warning(f"Failed to read the data of /sys/class/input/input{id}/phys: {e}")
def extract(args, board_etree):
device_classes_node = get_node(board_etree, "//device-classes")
extract_topology(device_classes_node)