board-inspector: reorganize the scripts

This patch reorganize the files of the board inspector as follows.

1. Rename the directory name from `target` to `board_inspector`, in order to
   align with the name used in ACRN documentation.
2. Move the scripts that generate the current board XML into the `legacy`
   sub-directory. The legacy nodes will be removed after transitioning to the
   new board XML schema completely,
3. Add the main script `cli.py` which is the command line interface of the board
   inspector.

v1 -> v2:
 - Rename `run.py` to `cli.py`.

Tracked-On: #5922
Signed-off-by: Junjie Mao <junjie.mao@intel.com>
This commit is contained in:
Junjie Mao 2021-04-21 08:56:32 +08:00 committed by wenlingz
parent 9c79e2ebdc
commit bd4ddbd31d
21 changed files with 61 additions and 11 deletions

View File

@ -1,9 +1,9 @@
board_parser.py will collect all board related info and then generate a board info file for acrn-config host tool usage. board_parser.py will collect all board related info and then generate a board info file for acrn-config host tool usage.
usage: python3 board_parser.py <board_name> [--out board_info_file] usage: python3 run.py <board_name> [--out board_info_file]
board_name : the name of board that run ACRN hypervisor, like apl-up2/nuc7i7dnb. It will be used as name of the board configurations folder which created by acrn-config host tool. board_name : the name of board that run ACRN hypervisor, like apl-up2/nuc7i7dnb. It will be used as name of the board configurations folder which created by acrn-config host tool.
board_info_file : (optional) the name of board info file. if it is not specified, a name of <board_name>.xml will be generated under ./out/ folder by default. board_info_file : (optional) the name of board info file. if it is not specified, a name of <board_name>.xml will be generated under the current working directory by default.
Please run this script under native Linux environment with root privilege. Please run this script under native Linux environment with root privilege.

View File

@ -8,6 +8,7 @@ import sys
from acpiparser.apic import APIC from acpiparser.apic import APIC
from acpiparser.asf import ASF from acpiparser.asf import ASF
from acpiparser.dmar import DMAR from acpiparser.dmar import DMAR
from acpiparser.dsdt import DSDT
from acpiparser.facp import FACP from acpiparser.facp import FACP
from acpiparser.rtct import RTCT from acpiparser.rtct import RTCT
@ -25,6 +26,7 @@ def make_parser(signature):
parse_apic = make_parser('APIC') parse_apic = make_parser('APIC')
parse_asf = make_parser('ASF!') parse_asf = make_parser('ASF!')
parse_dsdt = make_parser('DSDT')
parse_dmar = make_parser('DMAR') parse_dmar = make_parser('DMAR')
parse_facp = make_parser('FACP') parse_facp = make_parser('FACP')
parse_rtct = make_parser('RTCT') parse_rtct = make_parser('RTCT')

View File

@ -5,8 +5,8 @@
import ctypes import ctypes
import acpiparser.cdata as cdata import lib.cdata as cdata
import acpiparser.unpack as unpack import lib.unpack as unpack
class TableHeader(cdata.Struct): class TableHeader(cdata.Struct):
_pack_ = 1 _pack_ = 1

View File

@ -6,8 +6,8 @@
import ctypes import ctypes
import copy import copy
import acpiparser.cdata as cdata import lib.cdata as cdata
import acpiparser.unpack as unpack import lib.unpack as unpack
from acpiparser._utils import TableHeader from acpiparser._utils import TableHeader
class APICSubtable(cdata.Struct): class APICSubtable(cdata.Struct):

View File

@ -6,7 +6,7 @@
import ctypes import ctypes
import copy import copy
import acpiparser.cdata as cdata import lib.cdata as cdata
from acpiparser._utils import TableHeader from acpiparser._utils import TableHeader
class ASFSubtable(cdata.Struct): class ASFSubtable(cdata.Struct):

View File

@ -6,7 +6,7 @@
import ctypes import ctypes
import copy import copy
import acpiparser.cdata as cdata import lib.cdata as cdata
from acpiparser._utils import TableHeader from acpiparser._utils import TableHeader
class DMARSubtable(cdata.Struct): class DMARSubtable(cdata.Struct):

View File

@ -6,8 +6,8 @@
import ctypes import ctypes
import copy import copy
import acpiparser.cdata as cdata import lib.cdata as cdata
import acpiparser.unpack as unpack import lib.unpack as unpack
from acpiparser._utils import TableHeader, GAS from acpiparser._utils import TableHeader, GAS
_preferred_pm_profile = { _preferred_pm_profile = {

View File

@ -6,7 +6,7 @@
import ctypes import ctypes
import copy import copy
import acpiparser.cdata as cdata import lib.cdata as cdata
from acpiparser._utils import TableHeader from acpiparser._utils import TableHeader
class RTCTSubtable(cdata.Struct): class RTCTSubtable(cdata.Struct):

View File

@ -0,0 +1,48 @@
#!/usr/bin/env python3
#
# Copyright (C) 2021 Intel Corporation. All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
#
import sys, os
import logging
import subprocess
import lxml.etree
import argparse
from importlib import import_module
script_dir = os.path.dirname(os.path.realpath(__file__))
sys.path.append(os.path.join(script_dir))
def main(board_name, board_xml):
try:
# First invoke the legacy board parser to create the board XML ...
legacy_parser = os.path.join(script_dir, "legacy", "board_parser.py")
env = { "PYTHONPATH": script_dir }
subprocess.run([sys.executable, legacy_parser, args.board_name, "--out", board_xml], check=True, env=env)
# ... then load the created board XML and append it with additional data by invoking the extractors.
board_etree = lxml.etree.parse(board_xml)
# Clear the whitespaces between adjacent children under the root node
board_etree.getroot().text = None
for elem in board_etree.getroot():
elem.tail = None
# Finally overwrite the output with the updated XML
board_etree.write(board_xml, pretty_print=True)
except subprocess.CalledProcessError as e:
print(e)
sys.exit(1)
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO)
parser = argparse.ArgumentParser()
parser.add_argument("board_name", help="the name of the board that runs the ACRN hypervisor")
parser.add_argument("--out", help="the name of board info file")
args = parser.parse_args()
board_xml = args.out if args.out else f"{args.board_name}.xml"
main(args.board_name, board_xml)