* [PATCH][hardknott 1/9] arm/fvp: add recipes for Ecosystem FVPs
@ 2021-06-17 12:51 Ross Burton
2021-06-17 12:51 ` [PATCH][hardknott 2/9] arm/fvp-base-a-aem: add Architecture Envelope Model FVP for Arm v8-A Ross Burton
` (7 more replies)
0 siblings, 8 replies; 9+ messages in thread
From: Ross Burton @ 2021-06-17 12:51 UTC (permalink / raw)
To: meta-arm
Add recipes for the SGI-575 and N1-Edge reference designs from the
Ecosystem FVP collection:
https://developer.arm.com/tools-and-software/open-source-software/arm-platforms-software/arm-ecosystem-fvps
These FVPs are free to download and use.
Change-Id: Ia645e4a7264f73ec42ee61ab2907a9bfdbe7c25d
Signed-off-by: Ross Burton <ross.burton@arm.com>
---
meta-arm/recipes-devtools/fvp/fvp-common.inc | 36 +++++++++++++++++++
.../recipes-devtools/fvp/fvp-ecosystem.inc | 25 +++++++++++++
meta-arm/recipes-devtools/fvp/fvp-n1-edge.bb | 7 ++++
meta-arm/recipes-devtools/fvp/fvp-sgi575.bb | 7 ++++
4 files changed, 75 insertions(+)
create mode 100644 meta-arm/recipes-devtools/fvp/fvp-common.inc
create mode 100644 meta-arm/recipes-devtools/fvp/fvp-ecosystem.inc
create mode 100644 meta-arm/recipes-devtools/fvp/fvp-n1-edge.bb
create mode 100644 meta-arm/recipes-devtools/fvp/fvp-sgi575.bb
diff --git a/meta-arm/recipes-devtools/fvp/fvp-common.inc b/meta-arm/recipes-devtools/fvp/fvp-common.inc
new file mode 100644
index 0000000..ec82251
--- /dev/null
+++ b/meta-arm/recipes-devtools/fvp/fvp-common.inc
@@ -0,0 +1,36 @@
+HOMEPAGE = "https://developer.arm.com/tools-and-software/simulation-models/fixed-virtual-platforms"
+
+# FVP has an End User License Agreement. Add Arm-FVP-EULA to your
+# LICENSE_FLAGS_WHITELIST if you agree to these terms.
+LICENSE_FLAGS = "Arm-FVP-EULA"
+
+LICENSE = "Proprietary & Apache-2.0 & Python-2.0 & GPL-3.0-with-GCC-exception & Zlib & NCSA & LGPLv2+ & MIT & BSD-3-Clause"
+
+COMPATIBLE_HOST = '(x86_64|i.86).*-linux'
+FVP_ARCH = "Linux64_GCC-6.4"
+
+# The directory the FVP is installed into
+FVPDIR = "${libdir}/fvp/${BPN}"
+
+# Used in do_install to create symlinks in $bindir to $FVPDIR
+fvp_link_binaries() {
+ for FVP in ${D}${FVPDIR}/models/${FVP_ARCH}/FVP_*; do
+ lnr $FVP ${D}${bindir}/$(basename $FVP)
+ done
+ # But not the .so files too
+ rm -f ${D}${bindir}/*.so
+}
+
+FILES_${PN} = "${bindir} ${FVPDIR}"
+
+# Prebuilt binaries are already stripped
+INSANE_SKIP_${PN} += "already-stripped"
+# FVP can optionally have a GUI, but we can use the host libraries in native/nativesdk
+INSANE_SKIP_${PN} += "file-rdeps"
+
+# FVP brings its own standard library so don't let it be used as a shlib provider
+PRIVATE_LIBS = "libgcc_s.so.1 libstdc++.so.6"
+
+INHIBIT_DEFAULT_DEPS = "1"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-arm/recipes-devtools/fvp/fvp-ecosystem.inc b/meta-arm/recipes-devtools/fvp/fvp-ecosystem.inc
new file mode 100644
index 0000000..a546315
--- /dev/null
+++ b/meta-arm/recipes-devtools/fvp/fvp-ecosystem.inc
@@ -0,0 +1,25 @@
+require fvp-common.inc
+
+# These need to be set
+MODEL ?= "unset"
+MODEL_CODE ?= "unset"
+PV ?= "unset"
+
+SUMMARY = "Arm Fixed Virtual Platform - ${MODEL} Ecosystem Reference Design"
+HOMEPAGE = "https://developer.arm.com/tools-and-software/open-source-software/arm-platforms-software/arm-ecosystem-fvps"
+
+SRC_URI = "https://developer.arm.com/-/media/Arm%20Developer%20Community/Downloads/OSS/FVP/${MODEL}/${MODEL_CODE}_${PV}.tgz;subdir=${BP}"
+
+LIC_FILES_CHKSUM = "file://license_terms/license_agreement.txt;md5=1a33828e132ba71861c11688dbb0bd16 \
+ file://license_terms/third_party_licenses.txt;md5=47473b1e04b70938cf0a7ffea8ea4cc3"
+
+do_install() {
+ mkdir --parents ${D}${FVPDIR} ${D}${bindir}
+
+ ${S}/${MODEL_CODE}.sh \
+ --i-agree-to-the-contained-eula \
+ --no-interactive \
+ --destination ${D}${FVPDIR}
+
+ fvp_link_binaries
+}
diff --git a/meta-arm/recipes-devtools/fvp/fvp-n1-edge.bb b/meta-arm/recipes-devtools/fvp/fvp-n1-edge.bb
new file mode 100644
index 0000000..edda411
--- /dev/null
+++ b/meta-arm/recipes-devtools/fvp/fvp-n1-edge.bb
@@ -0,0 +1,7 @@
+require fvp-ecosystem.inc
+
+MODEL = "Neoverse-N1"
+MODEL_CODE = "FVP_RD_N1_edge"
+PV = "11.12_43"
+
+SRC_URI[sha256sum] = "e428cc44db251202bf45ae68d40832d01efbc5d0f1323f1ce46237213dd4f0fa"
diff --git a/meta-arm/recipes-devtools/fvp/fvp-sgi575.bb b/meta-arm/recipes-devtools/fvp/fvp-sgi575.bb
new file mode 100644
index 0000000..2ad1d3a
--- /dev/null
+++ b/meta-arm/recipes-devtools/fvp/fvp-sgi575.bb
@@ -0,0 +1,7 @@
+require fvp-ecosystem.inc
+
+MODEL = "SGI-575"
+MODEL_CODE = "FVP_CSS_SGI-575"
+PV = "11.12_59"
+
+SRC_URI[sha256sum] = "86c7a16d83b0801278b4a3d05c8d42c4955ed22a0dbea3c583798fb971bc425c"
--
2.25.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH][hardknott 2/9] arm/fvp-base-a-aem: add Architecture Envelope Model FVP for Arm v8-A
2021-06-17 12:51 [PATCH][hardknott 1/9] arm/fvp: add recipes for Ecosystem FVPs Ross Burton
@ 2021-06-17 12:51 ` Ross Burton
2021-06-17 12:51 ` [PATCH][hardknott 3/9] arm/fvp-library: add recipe for the FVP Library Ross Burton
` (6 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: Ross Burton @ 2021-06-17 12:51 UTC (permalink / raw)
To: meta-arm
Add a recipe for the general purpose Armv-A Base RevC AEM FVP.
This FVP is behind a login-wall so the user has to download it themselves,
but the FVP is free to use.
Change-Id: I14d7b965a05ff9f405a2a12d4da2afd3dd2ecb87
Signed-off-by: Ross Burton <ross.burton@arm.com>
---
.../recipes-devtools/fvp/fvp-base-a-aem.bb | 26 +++++++++++++++++++
1 file changed, 26 insertions(+)
create mode 100644 meta-arm/recipes-devtools/fvp/fvp-base-a-aem.bb
diff --git a/meta-arm/recipes-devtools/fvp/fvp-base-a-aem.bb b/meta-arm/recipes-devtools/fvp/fvp-base-a-aem.bb
new file mode 100644
index 0000000..facf821
--- /dev/null
+++ b/meta-arm/recipes-devtools/fvp/fvp-base-a-aem.bb
@@ -0,0 +1,26 @@
+require fvp-common.inc
+
+SUMMARY = "Arm Fixed Virtual Platform - Armv-A Base RevC Architecture Envelope Model FVP"
+HOMEPAGE = "https://developer.arm.com/tools-and-software/simulation-models/fixed-virtual-platforms/arm-ecosystem-models"
+LIC_FILES_CHKSUM = "file://license_terms/license_agreement.txt;md5=1a33828e132ba71861c11688dbb0bd16 \
+ file://license_terms/third_party_licenses.txt;md5=b40ecbbbd3409d48263437b782df6df9"
+
+# This FVP cannot be downloaded directly, so download the Armv-A Base RevC AEM
+# FVP yourself from the homepage and set FVP_BASE_A_AEM_TARBALL_URI appropriately
+# (for example, file:///home/user/FVP_Base_RevC-2xAEMvA_11.14_21.tgz).
+FVP_BASE_A_AEM_TARBALL_URI ?= ""
+PV = "11.14_21"
+
+SRC_URI = "${FVP_BASE_A_AEM_TARBALL_URI};subdir=${BP}"
+python() {
+ if not d.getVar("FVP_BASE_A_AEM_TARBALL_URI"):
+ raise bb.parse.SkipRecipe("FVP_BASE_A_AEM_TARBALL_URI not set")
+}
+
+do_install() {
+ mkdir --parents ${D}${FVPDIR} ${D}${bindir}
+
+ cp --archive --no-preserve=ownership ${S}/Base_RevC_AEMvA_pkg/* ${D}${FVPDIR}/
+
+ fvp_link_binaries
+}
--
2.25.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH][hardknott 3/9] arm/fvp-library: add recipe for the FVP Library
2021-06-17 12:51 [PATCH][hardknott 1/9] arm/fvp: add recipes for Ecosystem FVPs Ross Burton
2021-06-17 12:51 ` [PATCH][hardknott 2/9] arm/fvp-base-a-aem: add Architecture Envelope Model FVP for Arm v8-A Ross Burton
@ 2021-06-17 12:51 ` Ross Burton
2021-06-17 12:51 ` [PATCH][hardknott 4/9] arm/fvpboot: add class to write FVP boot configuration Ross Burton
` (5 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: Ross Burton @ 2021-06-17 12:51 UTC (permalink / raw)
To: meta-arm
Add a recipe for the FVP Library:
https://developer.arm.com/tools-and-software/simulation-models/fixed-virtual-platforms
This is free to download but is behind a login-wall, and the FVPs are
license managed.
Change-Id: Ia0e7b1bfac54e06faf9d517d5b769acf9670724a
Signed-off-by: Ross Burton <ross.burton@arm.com>
---
meta-arm/recipes-devtools/fvp/fvp-library.bb | 22 ++++++++++++++++++++
1 file changed, 22 insertions(+)
create mode 100644 meta-arm/recipes-devtools/fvp/fvp-library.bb
diff --git a/meta-arm/recipes-devtools/fvp/fvp-library.bb b/meta-arm/recipes-devtools/fvp/fvp-library.bb
new file mode 100644
index 0000000..13bf778
--- /dev/null
+++ b/meta-arm/recipes-devtools/fvp/fvp-library.bb
@@ -0,0 +1,22 @@
+require fvp-ecosystem.inc
+
+MODEL = "Library"
+MODEL_CODE = "FVP_ARM_Std_Library"
+PV = "11.14_21"
+
+HOMEPAGE = "https://developer.arm.com/tools-and-software/simulation-models/fixed-virtual-platforms"
+
+LIC_FILES_CHKSUM = "file://license_terms/license_agreement.txt;md5=a50d186fffa51ed55599183aad911298 \
+ file://license_terms/third_party_licenses.txt;md5=b40ecbbbd3409d48263437b782df6df9"
+
+
+# The FVP Library tarball cannot be downloaded directly, so download the it
+# yourself from from the homepage and set FVP_LIBRARY_TARBALL_URI appropriately
+# (for example, "file:///home/user/FVP_ARM_Std_Library_11.14_21.tgz").
+FVP_LIBRARY_TARBALL_URI ?= ""
+
+SRC_URI = "${FVP_LIBRARY_TARBALL_URI};subdir=${BP}"
+python() {
+ if not d.getVar("FVP_LIBRARY_TARBALL_URI"):
+ raise bb.parse.SkipRecipe("FVP_LIBRARY_TARBALL_URI not set")
+}
--
2.25.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH][hardknott 4/9] arm/fvpboot: add class to write FVP boot configuration
2021-06-17 12:51 [PATCH][hardknott 1/9] arm/fvp: add recipes for Ecosystem FVPs Ross Burton
2021-06-17 12:51 ` [PATCH][hardknott 2/9] arm/fvp-base-a-aem: add Architecture Envelope Model FVP for Arm v8-A Ross Burton
2021-06-17 12:51 ` [PATCH][hardknott 3/9] arm/fvp-library: add recipe for the FVP Library Ross Burton
@ 2021-06-17 12:51 ` Ross Burton
2021-06-17 12:51 ` [PATCH][hardknott 5/9] scripts: add runfvp Ross Burton
` (4 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: Ross Burton @ 2021-06-17 12:51 UTC (permalink / raw)
To: meta-arm
The fvpboot class is used to write a machine-readable file that describes
how to boot a given machine image inside a FVP, similar to how qemuboot
writes files for runqemu.
BSPs should set the FVP_* variables as appropriate in their machine
configuration, but let the user opt-in to adding fvpboot to IMAGE_CLASSES.
Change-Id: I2d1cd86ec4affc1d688a293987890d6a89124d94
Signed-off-by: Ross Burton <ross.burton@arm.com>
---
meta-arm/classes/fvpboot.bbclass | 80 ++++++++++++++++++++++++++++++++
1 file changed, 80 insertions(+)
create mode 100644 meta-arm/classes/fvpboot.bbclass
diff --git a/meta-arm/classes/fvpboot.bbclass b/meta-arm/classes/fvpboot.bbclass
new file mode 100644
index 0000000..18a9d68
--- /dev/null
+++ b/meta-arm/classes/fvpboot.bbclass
@@ -0,0 +1,80 @@
+# Image class to write .fvpconf files for use with runfvp. If this is desired
+# then add fvpboot to IMAGE_CLASSES, and set the variables below in your machine
+# configuration as appropriate.
+
+# Name of recipe providing FVP executable. If unset then the executable must be installed on the host.
+FVP_PROVIDER ?= ""
+# Name of FVP executable to run
+FVP_EXE ?= ""
+# Flags for --parameter/-C
+FVP_CONFIG ?= ""
+# Flags for --data
+FVP_DATA ?= ""
+# Flags for --application
+FVP_APPLICATIONS ?= ""
+# Flags to name serial terminals. Flag name is the terminal id (such as
+# terminal_0), value is a human-readable name. If the name is not set
+# then runfvp will hide the terminal.
+FVP_TERMINALS ?= ""
+# What terminal should be considered the primary console
+FVP_CONSOLE ?= ""
+# Arbitrary extra arguments
+FVP_EXTRA_ARGS ?= ""
+
+EXTRA_IMAGEDEPENDS += "${FVP_PROVIDER}"
+
+inherit image-artifact-names
+
+addtask do_write_fvpboot_conf after do_rootfs before do_image
+python do_write_fvpboot_conf() {
+ # Note that currently this JSON file is in development and the format may
+ # change at any point, so it should always be used with a matching runfvp.
+
+ import json, shlex
+
+ if not d.getVar("FVP_EXE"):
+ return
+
+ conffile = os.path.join(d.getVar("IMGDEPLOYDIR"), d.getVar("IMAGE_NAME") + ".fvpconf")
+ conffile_link = os.path.join(d.getVar("IMGDEPLOYDIR"), d.getVar("IMAGE_LINK_NAME") + ".fvpconf")
+
+ data = {}
+ provider = d.getVar("FVP_PROVIDER")
+ if provider:
+ data["provider"] = provider
+ data["fvp-bindir"] = os.path.join(d.getVar("COMPONENTS_DIR"),
+ d.getVar("BUILD_ARCH"),
+ provider,
+ "usr", "bin")
+
+ def getFlags(varname):
+ flags = d.getVarFlags(varname)
+ # For unexplained reasons, getVarFlags() returns None if there are no flags
+ if flags is None:
+ return {}
+ # For other reasons, you can't pass expand=True
+ return {key: d.expand(value) for key, value in flags.items()}
+
+ data["exe"] = d.getVar("FVP_EXE")
+ data["parameters"] = getFlags("FVP_CONFIG")
+ data["data"] = shlex.split(d.getVar("FVP_DATA") or "")
+ data["applications"] = getFlags("FVP_APPLICATIONS")
+ data["console"] = d.getVar("FVP_CONSOLE")
+ data["terminals"] = getFlags("FVP_TERMINALS")
+ data["args"] = shlex.split(d.getVar("FVP_EXTRA_ARGS") or "")
+
+ os.makedirs(os.path.dirname(conffile), exist_ok=True)
+ with open(conffile, "wt") as f:
+ json.dump(data, f)
+
+ if conffile_link != conffile:
+ if os.path.lexists(conffile_link):
+ os.remove(conffile_link)
+ os.symlink(os.path.basename(conffile), conffile_link)
+}
+
+def fvpboot_vars(d):
+ build_vars = ['DEPLOY_DIR_IMAGE', 'IMAGE_NAME', 'IMAGE_LINK_NAME',
+ 'COMPONENTS_DIR', 'BUILD_ARCH']
+ return build_vars + [k for k in d.keys() if k.startswith('FVP_')]
+do_write_fvpboot_conf[vardeps] += "${@' '.join(fvpboot_vars(d))}"
--
2.25.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH][hardknott 5/9] scripts: add runfvp
2021-06-17 12:51 [PATCH][hardknott 1/9] arm/fvp: add recipes for Ecosystem FVPs Ross Burton
` (2 preceding siblings ...)
2021-06-17 12:51 ` [PATCH][hardknott 4/9] arm/fvpboot: add class to write FVP boot configuration Ross Burton
@ 2021-06-17 12:51 ` Ross Burton
2021-06-17 12:51 ` [PATCH][hardknott 6/9] runfvp: exit with the return code of the FVP binary Ross Burton
` (3 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: Ross Burton @ 2021-06-17 12:51 UTC (permalink / raw)
To: meta-arm
runfvp is a script that reads existing .fvpconf files (as written by
fvpboot.bbclass) and executes the FVP binary appropriately.
By default the behaviour is the same as running a FVP by hand, but by
passing --console the first serial port is connected to stdin/stdout.
Change-Id: Ibd26867c09e8692be4c02a7ea13571dcfe36db9b
Signed-off-by: Ross Burton <ross.burton@arm.com>
---
scripts/runfvp | 160 +++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 160 insertions(+)
create mode 100755 scripts/runfvp
diff --git a/scripts/runfvp b/scripts/runfvp
new file mode 100755
index 0000000..d0e97d0
--- /dev/null
+++ b/scripts/runfvp
@@ -0,0 +1,160 @@
+#! /usr/bin/env python3
+
+import json
+import os
+import sys
+import subprocess
+import pathlib
+
+import logging
+logger = logging.getLogger("RunFVP")
+
+# TODO: option to switch between telnet and netcat
+connect_command = "telnet localhost %port"
+
+terminal_map = {
+ "tmux": f"tmux new-window -n \"%title\" \"{connect_command}\"",
+ "xterm": f"xterm -title \"%title\" -e {connect_command}",
+ "none": ""
+ # TODO more terminals
+}
+
+def get_image_directory(machine=None):
+ """
+ Get the DEPLOY_DIR_IMAGE for the specified machine
+ (or the configured machine if not set).
+ """
+ import bb.tinfoil
+
+ if machine:
+ os.environ["MACHINE"] = machine
+
+ with bb.tinfoil.Tinfoil() as tinfoil:
+ tinfoil.prepare(config_only=True)
+ image_dir = tinfoil.config_data.getVar("DEPLOY_DIR_IMAGE")
+ logger.debug(f"Got DEPLOY_DIR_IMAGE {image_dir}")
+ return pathlib.Path(image_dir)
+
+
+def runfvp(args):
+ import argparse
+
+ parser = argparse.ArgumentParser(description="Run images in a FVP")
+ parser.add_argument("config", nargs="?", help="Machine name or path to .fvpconf file")
+ group = parser.add_mutually_exclusive_group()
+ group.add_argument("-t", "--terminals", choices=terminal_map.keys(), default="xterm", help="Automatically start terminals")
+ group.add_argument("-c", "--console", action="store_true", help="Attach the first uart to stdin/stdout")
+ parser.add_argument("-C", "--parameter", action="append", default=[], help="Extra configuration parameters for FVP")
+ parser.add_argument("--verbose", action="store_true", help="Output verbose logging")
+ # TODO option for telnet vs netcat
+
+ args = parser.parse_args()
+ logging.basicConfig(level=args.verbose and logging.DEBUG or logging.WARNING)
+ logger.debug(f"Parsed arguments are {vars(args)}")
+
+ # If we're hooking up the console, don't start any terminals
+ if args.console:
+ args.terminals = "none"
+
+ if args.config and os.path.exists(args.config):
+ config_file = args.config
+ else:
+ image_dir = get_image_directory(args.config)
+ # All .fvpconf configuration files
+ configs = image_dir.glob("*.fvpconf")
+ # Just the files
+ configs = [p for p in configs if p.is_file() and not p.is_symlink()]
+ if not configs:
+ print(f"Cannot find any .fvpconf in {image_dir}")
+ sys.exit(1)
+ # Sorted by modification time
+ configs = sorted(configs, key=lambda p: p.stat().st_mtime)
+ config_file = configs[-1]
+
+ logger.debug(f"Loading {config_file}")
+ with open(config_file) as f:
+ config = json.load(f)
+
+ # Ensure that all expected keys are present
+ def sanitise(key, value):
+ if key not in config or config[key] is None:
+ config[key] = value
+ sanitise("fvp-bindir", "")
+ sanitise("exe", "")
+ sanitise("parameters", {})
+ sanitise("data", {})
+ sanitise("applications", {})
+ sanitise("terminals", {})
+ sanitise("args", [])
+ sanitise("console", "")
+
+ if not config["exe"]:
+ logger.error("Required value FVP_EXE not set in machine configuration")
+ sys.exit(1)
+
+ cli = []
+ if config["fvp-bindir"]:
+ cli.append(os.path.join(config["fvp-bindir"], config["exe"]))
+ else:
+ cli.append(config["exe"])
+
+ for param, value in config["parameters"].items():
+ cli.extend(["--parameter", f"{param}={value}"])
+
+ for value in config["data"]:
+ cli.extend(["--data", value])
+
+ for param, value in config["applications"].items():
+ cli.extend(["--application", f"{param}={value}"])
+
+ for terminal, name in config["terminals"].items():
+ # If terminals are enabled and this terminal has been named
+ if args.terminals != "none" and name:
+ # TODO if raw mode
+ # cli.extend(["--parameter", f"{terminal}.mode=raw"])
+ # TODO put name into terminal title
+ cli.extend(["--parameter", f"{terminal}.terminal_command={terminal_map[args.terminals]}"])
+ else:
+ # Disable terminal
+ cli.extend(["--parameter", f"{terminal}.start_telnet=0"])
+
+ cli.extend(config["args"])
+
+ # Finally add the user's extra arguments
+ for param in args.parameter:
+ cli.extend(["--parameter", param])
+
+ logger.debug(f"Constructed FVP call: {cli}")
+ if args.console:
+ expected_terminal = config["console"]
+ if not expected_terminal:
+ logger.error("--console used but FVP_CONSOLE not set in machine configuration")
+ sys.exit(1)
+
+ fvp_process = subprocess.Popen(cli, bufsize=1, universal_newlines=True, stdin=subprocess.DEVNULL, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+
+ import selectors, re
+ selector = selectors.DefaultSelector()
+ selector.register(fvp_process.stdout, selectors.EVENT_READ)
+ output = ""
+ looking = True
+ while fvp_process.poll() is None:
+ # TODO some sort of timeout for 'input never appeared'
+ events = selector.select(timeout=10)
+ for key, mask in events:
+ line = key.fileobj.readline()
+ output += line
+ if looking:
+ m = re.match(fr"^{expected_terminal}: Listening.+port ([0-9]+)$", line)
+ if m:
+ port = m.group(1)
+ subprocess.run(["telnet", "localhost", port])
+ looking = False
+ if fvp_process.returncode:
+ logger.error(f"{fvp_process.args[0]} quit with code {fvp_process.returncode}:")
+ logger.error(output)
+ else:
+ subprocess.run(cli)
+
+if __name__ == "__main__":
+ runfvp(sys.argv)
--
2.25.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH][hardknott 6/9] runfvp: exit with the return code of the FVP binary
2021-06-17 12:51 [PATCH][hardknott 1/9] arm/fvp: add recipes for Ecosystem FVPs Ross Burton
` (3 preceding siblings ...)
2021-06-17 12:51 ` [PATCH][hardknott 5/9] scripts: add runfvp Ross Burton
@ 2021-06-17 12:51 ` Ross Burton
2021-06-17 12:51 ` [PATCH][hardknott 7/9] runfvp: pass arbitrary options after -- to " Ross Burton
` (2 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: Ross Burton @ 2021-06-17 12:51 UTC (permalink / raw)
To: meta-arm
From: Ross Burton <ross@burtonini.com>
Change-Id: If79e31e61110161c9a13dd512b0146d1d515d77a
Signed-off-by: Ross Burton <ross.burton@arm.com>
Signed-off-by: Jon Mason <jon.mason@arm.com>
---
scripts/runfvp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/scripts/runfvp b/scripts/runfvp
index d0e97d0..4ef0bfc 100755
--- a/scripts/runfvp
+++ b/scripts/runfvp
@@ -154,7 +154,7 @@ def runfvp(args):
logger.error(f"{fvp_process.args[0]} quit with code {fvp_process.returncode}:")
logger.error(output)
else:
- subprocess.run(cli)
+ sys.exit(subprocess.run(cli).returncode)
if __name__ == "__main__":
runfvp(sys.argv)
--
2.25.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH][hardknott 7/9] runfvp: pass arbitrary options after -- to the FVP binary
2021-06-17 12:51 [PATCH][hardknott 1/9] arm/fvp: add recipes for Ecosystem FVPs Ross Burton
` (4 preceding siblings ...)
2021-06-17 12:51 ` [PATCH][hardknott 6/9] runfvp: exit with the return code of the FVP binary Ross Burton
@ 2021-06-17 12:51 ` Ross Burton
2021-06-17 12:51 ` [PATCH][hardknott 8/9] runfvp: drop --parameter, users can use -- --parameter Ross Burton
2021-06-17 12:51 ` [PATCH][hardknott 9/9] arm-bsp/fvp-base: set FVP_ variables Ross Burton
7 siblings, 0 replies; 9+ messages in thread
From: Ross Burton @ 2021-06-17 12:51 UTC (permalink / raw)
To: meta-arm
From: Ross Burton <ross@burtonini.com>
To allow passing arbitrary options to the FVP binary, split the passed
options on --. Anything before the separator is handled by runfvp,
anything afterwards is passed as-is to the FVP binary.
Change-Id: I686b2fb79d217e26988753be7bd067c638d69eac
Signed-off-by: Ross Burton <ross.burton@arm.com>
Signed-off-by: Jon Mason <jon.mason@arm.com>
---
scripts/runfvp | 16 ++++++++++++++--
1 file changed, 14 insertions(+), 2 deletions(-)
diff --git a/scripts/runfvp b/scripts/runfvp
index 4ef0bfc..4761270 100755
--- a/scripts/runfvp
+++ b/scripts/runfvp
@@ -46,9 +46,18 @@ def runfvp(args):
group.add_argument("-c", "--console", action="store_true", help="Attach the first uart to stdin/stdout")
parser.add_argument("-C", "--parameter", action="append", default=[], help="Extra configuration parameters for FVP")
parser.add_argument("--verbose", action="store_true", help="Output verbose logging")
+ parser.usage = f"{parser.format_usage().strip()} -- [ arguments passed to FVP ]"
# TODO option for telnet vs netcat
- args = parser.parse_args()
+ try:
+ i = sys.argv.index("--")
+ arguments = sys.argv[1:i]
+ fvp_args = sys.argv[i+1:]
+ except ValueError:
+ arguments = sys.argv[1:]
+ fvp_args = []
+
+ args = parser.parse_args(args=arguments)
logging.basicConfig(level=args.verbose and logging.DEBUG or logging.WARNING)
logger.debug(f"Parsed arguments are {vars(args)}")
@@ -120,10 +129,13 @@ def runfvp(args):
cli.extend(config["args"])
- # Finally add the user's extra arguments
+ # Add any explicit --parameter calls
for param in args.parameter:
cli.extend(["--parameter", param])
+ # Finally add the user's extra arguments
+ cli.extend(fvp_args)
+
logger.debug(f"Constructed FVP call: {cli}")
if args.console:
expected_terminal = config["console"]
--
2.25.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH][hardknott 8/9] runfvp: drop --parameter, users can use -- --parameter
2021-06-17 12:51 [PATCH][hardknott 1/9] arm/fvp: add recipes for Ecosystem FVPs Ross Burton
` (5 preceding siblings ...)
2021-06-17 12:51 ` [PATCH][hardknott 7/9] runfvp: pass arbitrary options after -- to " Ross Burton
@ 2021-06-17 12:51 ` Ross Burton
2021-06-17 12:51 ` [PATCH][hardknott 9/9] arm-bsp/fvp-base: set FVP_ variables Ross Burton
7 siblings, 0 replies; 9+ messages in thread
From: Ross Burton @ 2021-06-17 12:51 UTC (permalink / raw)
To: meta-arm
From: Ross Burton <ross@burtonini.com>
Now that arbitrary parameters can be passed to the FVP binary, runfvp
doesn't need to handle --parameter itself.
Anyone using runfvp --parameter should simply use runfvp -- --parameter.
Change-Id: I8a79200fe927c253308731e7e0cb228e53cd989a
Signed-off-by: Ross Burton <ross.burton@arm.com>
Signed-off-by: Jon Mason <jon.mason@arm.com>
---
scripts/runfvp | 5 -----
1 file changed, 5 deletions(-)
diff --git a/scripts/runfvp b/scripts/runfvp
index 4761270..be04768 100755
--- a/scripts/runfvp
+++ b/scripts/runfvp
@@ -44,7 +44,6 @@ def runfvp(args):
group = parser.add_mutually_exclusive_group()
group.add_argument("-t", "--terminals", choices=terminal_map.keys(), default="xterm", help="Automatically start terminals")
group.add_argument("-c", "--console", action="store_true", help="Attach the first uart to stdin/stdout")
- parser.add_argument("-C", "--parameter", action="append", default=[], help="Extra configuration parameters for FVP")
parser.add_argument("--verbose", action="store_true", help="Output verbose logging")
parser.usage = f"{parser.format_usage().strip()} -- [ arguments passed to FVP ]"
# TODO option for telnet vs netcat
@@ -129,10 +128,6 @@ def runfvp(args):
cli.extend(config["args"])
- # Add any explicit --parameter calls
- for param in args.parameter:
- cli.extend(["--parameter", param])
-
# Finally add the user's extra arguments
cli.extend(fvp_args)
--
2.25.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH][hardknott 9/9] arm-bsp/fvp-base: set FVP_ variables
2021-06-17 12:51 [PATCH][hardknott 1/9] arm/fvp: add recipes for Ecosystem FVPs Ross Burton
` (6 preceding siblings ...)
2021-06-17 12:51 ` [PATCH][hardknott 8/9] runfvp: drop --parameter, users can use -- --parameter Ross Burton
@ 2021-06-17 12:51 ` Ross Burton
7 siblings, 0 replies; 9+ messages in thread
From: Ross Burton @ 2021-06-17 12:51 UTC (permalink / raw)
To: meta-arm
So that a fvp-base image can be tested easily, set the relevant FVP_*
variables.
After setting IMAGE_CLASSES += "fvpboot" in local.conf, this will show
the firmware start and Linux boot:
$ MACHINE=fvp-base bitbake core-image-base
$ runfvp fvp-base --console
Change-Id: Id1bd6cea57958117103e53ab9f78a58ce92b6a2e
Signed-off-by: Ross Burton <ross.burton@arm.com>
---
meta-arm-bsp/conf/machine/fvp-base.conf | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/meta-arm-bsp/conf/machine/fvp-base.conf b/meta-arm-bsp/conf/machine/fvp-base.conf
index 4bccdb6..41163c9 100644
--- a/meta-arm-bsp/conf/machine/fvp-base.conf
+++ b/meta-arm-bsp/conf/machine/fvp-base.conf
@@ -15,3 +15,17 @@ UBOOT_MACHINE = "vexpress_aemv8a_semi_defconfig"
KERNEL_IMAGETYPE = "Image"
KERNEL_DEVICETREE = "arm/fvp-base-gicv3-psci-custom.dtb"
+
+FVP_PROVIDER ?= "fvp-base-a-aem-native"
+FVP_EXE ?= "FVP_Base_RevC-2xAEMvA"
+FVP_CONFIG[cache_state_modelled] ?= "0"
+FVP_CONFIG[bp.secureflashloader.fname] ?= "${DEPLOY_DIR_IMAGE}/bl1-fvp.bin"
+FVP_CONFIG[bp.flashloader0.fname] ?= "${DEPLOY_DIR_IMAGE}/fip-fvp.bin"
+FVP_CONFIG[bp.virtioblockdevice.image_path] ?= "${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.wic"
+FVP_DATA ?= "cluster0.cpu0=${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}@0x80080000 \
+ cluster0.cpu0=${DEPLOY_DIR_IMAGE}/fvp-base-gicv3-psci-custom.dtb@0x83000000"
+FVP_CONSOLE ?= "terminal_0"
+FVP_TERMINALS[bp.terminal_0] ?= "Console"
+FVP_TERMINALS[bp.terminal_1] ?= ""
+FVP_TERMINALS[bp.terminal_2] ?= ""
+FVP_TERMINALS[bp.terminal_3] ?= ""
--
2.25.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
end of thread, other threads:[~2021-06-17 12:51 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-06-17 12:51 [PATCH][hardknott 1/9] arm/fvp: add recipes for Ecosystem FVPs Ross Burton
2021-06-17 12:51 ` [PATCH][hardknott 2/9] arm/fvp-base-a-aem: add Architecture Envelope Model FVP for Arm v8-A Ross Burton
2021-06-17 12:51 ` [PATCH][hardknott 3/9] arm/fvp-library: add recipe for the FVP Library Ross Burton
2021-06-17 12:51 ` [PATCH][hardknott 4/9] arm/fvpboot: add class to write FVP boot configuration Ross Burton
2021-06-17 12:51 ` [PATCH][hardknott 5/9] scripts: add runfvp Ross Burton
2021-06-17 12:51 ` [PATCH][hardknott 6/9] runfvp: exit with the return code of the FVP binary Ross Burton
2021-06-17 12:51 ` [PATCH][hardknott 7/9] runfvp: pass arbitrary options after -- to " Ross Burton
2021-06-17 12:51 ` [PATCH][hardknott 8/9] runfvp: drop --parameter, users can use -- --parameter Ross Burton
2021-06-17 12:51 ` [PATCH][hardknott 9/9] arm-bsp/fvp-base: set FVP_ variables Ross Burton
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).