From 1182468549db32eb4219892c4539b3d8a3187276 Mon Sep 17 00:00:00 2001 From: Fabian Blatz Date: Thu, 19 Sep 2024 16:26:45 +0200 Subject: [PATCH 01/10] [nrf fromtree] west: commands: runners: canopen: add download-buffer-size option Adds a --download-buffer-size option to the canopen runner to allow specifying the buffer size of the SDO download. Signed-off-by: Fabian Blatz (cherry picked from commit 11c83c80fc86f7a82e0857c997422d97fecf976b) Signed-off-by: Tomasz Chyrowicz --- .../west_commands/runners/canopen_program.py | 21 +++++++++++-------- .../tests/test_canopen_program.py | 9 ++++++-- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/scripts/west_commands/runners/canopen_program.py b/scripts/west_commands/runners/canopen_program.py index c51f07891a2..2fb8ba42b01 100644 --- a/scripts/west_commands/runners/canopen_program.py +++ b/scripts/west_commands/runners/canopen_program.py @@ -24,10 +24,7 @@ DEFAULT_PROGRAM_NUMBER = 1 # Program download buffer size in bytes -PROGRAM_DOWNLOAD_BUFFER_SIZE = 1024 - -# Program download chunk size in bytes -PROGRAM_DOWNLOAD_CHUNK_SIZE = PROGRAM_DOWNLOAD_BUFFER_SIZE // 2 +DEFAULT_PROGRAM_DOWNLOAD_BUFFER_SIZE = 1024 # Default timeouts and retries DEFAULT_TIMEOUT = 10.0 # seconds @@ -58,7 +55,7 @@ def __init__(self, cfg, dev_id, can_context=DEFAULT_CAN_CONTEXT, program_number=DEFAULT_PROGRAM_NUMBER, confirm=True, confirm_only=True, timeout=DEFAULT_TIMEOUT, sdo_retries=DEFAULT_SDO_RETRIES, sdo_timeout=DEFAULT_SDO_TIMEOUT, - block_transfer=False): + download_buffer_size=DEFAULT_PROGRAM_DOWNLOAD_BUFFER_SIZE, block_transfer=False): if MISSING_REQUIREMENTS: raise RuntimeError('one or more Python dependencies were missing; ' "see the getting started guide for details on " @@ -76,7 +73,9 @@ def __init__(self, cfg, dev_id, can_context=DEFAULT_CAN_CONTEXT, program_number=program_number, sdo_retries=sdo_retries, sdo_timeout=sdo_timeout, - block_transfer=block_transfer) + download_buffer_size=download_buffer_size, + block_transfer=block_transfer, + ) @classmethod def name(cls): @@ -113,6 +112,8 @@ def do_add_parser(cls, parser): parser.add_argument('--sdo-timeout', type=float, default=DEFAULT_SDO_TIMEOUT, help=f'''CANopen SDO response timeout in seconds (default: {DEFAULT_SDO_TIMEOUT})''') + parser.add_argument('--download-buffer-size', type=int, default=DEFAULT_PROGRAM_DOWNLOAD_BUFFER_SIZE, + help=f'Program download buffer size in bytes (default: {DEFAULT_PROGRAM_DOWNLOAD_BUFFER_SIZE})') parser.add_argument('--block-transfer', default=False, action='store_true', help='Use SDO block transfers (experimental, default: no)') @@ -128,6 +129,7 @@ def do_create(cls, cfg, args): timeout=args.timeout, sdo_retries=args.sdo_retries, sdo_timeout=args.sdo_timeout, + download_buffer_size=args.download_buffer_size, block_transfer=args.block_transfer) def do_run(self, command, **kwargs): @@ -188,7 +190,7 @@ class CANopenProgramDownloader(object): def __init__(self, logger, node_id, can_context=DEFAULT_CAN_CONTEXT, program_number=DEFAULT_PROGRAM_NUMBER, sdo_retries=DEFAULT_SDO_RETRIES, sdo_timeout=DEFAULT_SDO_TIMEOUT, - block_transfer=False): + download_buffer_size=DEFAULT_PROGRAM_DOWNLOAD_BUFFER_SIZE, block_transfer=False): super(CANopenProgramDownloader, self).__init__() self.logger = logger self.node_id = node_id @@ -201,6 +203,7 @@ def __init__(self, logger, node_id, can_context=DEFAULT_CAN_CONTEXT, self.ctrl_sdo = self.node.sdo[H1F51_PROGRAM_CTRL][self.program_number] self.swid_sdo = self.node.sdo[H1F56_PROGRAM_SWID][self.program_number] self.flash_sdo = self.node.sdo[H1F57_FLASH_STATUS][self.program_number] + self.download_buffer_size = download_buffer_size self.node.sdo.MAX_RETRIES = sdo_retries self.node.sdo.RESPONSE_TIMEOUT = sdo_timeout @@ -276,12 +279,12 @@ def download(self, bin_file): try: size = os.path.getsize(bin_file) infile = open(bin_file, 'rb') - outfile = self.data_sdo.open('wb', buffering=PROGRAM_DOWNLOAD_BUFFER_SIZE, + outfile = self.data_sdo.open('wb', buffering=self.download_buffer_size, size=size, block_transfer=self.block_transfer) progress = Bar('%(percent)d%%', max=size, suffix='%(index)d/%(max)dB') while True: - chunk = infile.read(PROGRAM_DOWNLOAD_CHUNK_SIZE) + chunk = infile.read(self.download_buffer_size // 2) if not chunk: break outfile.write(chunk) diff --git a/scripts/west_commands/tests/test_canopen_program.py b/scripts/west_commands/tests/test_canopen_program.py index 934b4ca919c..39aed2d34f4 100644 --- a/scripts/west_commands/tests/test_canopen_program.py +++ b/scripts/west_commands/tests/test_canopen_program.py @@ -22,7 +22,7 @@ # Test cases # -TEST_CASES = [(n, x, p, c, o, t, r, s, b) +TEST_CASES = [(n, x, p, c, o, t, r, s, d, b) for n in range(1, 3) for x in (None, TEST_ALT_CONTEXT) for p in range(1, 3) @@ -31,6 +31,7 @@ for t in range(1, 3) for r in range(1, 3) for s in range(1, 3) + for d in [256, 1024] for b in range(False, True)] os_path_isfile = os.path.isfile @@ -44,7 +45,7 @@ def os_path_isfile_patch(filename): @patch('runners.canopen_program.CANopenProgramDownloader') def test_canopen_program_create(cpd, test_case, runner_config): '''Test CANopen runner created from command line parameters.''' - node_id, context, program_number, confirm, confirm_only, timeout, sdo_retries, sdo_timeout, block_transfer = test_case + node_id, context, program_number, confirm, confirm_only, timeout, sdo_retries, sdo_timeout, download_buffer_size, block_transfer = test_case args = ['--node-id', str(node_id)] if context is not None: @@ -61,6 +62,8 @@ def test_canopen_program_create(cpd, test_case, runner_config): args.extend(['--sdo-retries', str(sdo_retries)]) if sdo_timeout: args.extend(['--sdo-timeout', str(sdo_timeout)]) + if download_buffer_size: + args.extend(['--download-buffer-size', str(download_buffer_size)]) if block_transfer: args.append('--block_transfer') @@ -84,6 +87,7 @@ def test_canopen_program_create(cpd, test_case, runner_config): program_number=program_number, sdo_retries=sdo_retries, sdo_timeout=sdo_timeout, + download_buffer_size=download_buffer_size, block_transfer=block_transfer) else: assert cpd.call_args == call(node_id=node_id, @@ -92,6 +96,7 @@ def test_canopen_program_create(cpd, test_case, runner_config): program_number=program_number, sdo_retries=sdo_retries, sdo_timeout=sdo_timeout, + download_buffer_size=download_buffer_size, block_transfer=block_transfer) mock.connect.assert_called_once() From 2fcde5faed4a8ff89706f70f9d35fcf18c8305fb Mon Sep 17 00:00:00 2001 From: Adam Dunkels Date: Wed, 11 Sep 2024 15:42:53 +0100 Subject: [PATCH 02/10] [nrf fromtree] runners: jlink: add support for J-Link tunnels This adds support for J-Link tunnels, which run on top of an IP network and therefore uses the -IP option. J-Link tunnels are identified by a tunnel: prefix instead of a bare IP address. This change checks for the presence of such a prefix, and choses the -IP transport option if the tunnel prefix is found. This has been tested with J-Link Remote Server v7.98g and the SEGGER tunnel option. Signed-off-by: Adam Dunkels (cherry picked from commit 221199e15b85a070b3d81709eee3d533c9f99967) Signed-off-by: Tomasz Chyrowicz --- scripts/west_commands/runners/jlink.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/scripts/west_commands/runners/jlink.py b/scripts/west_commands/runners/jlink.py index af4a0fe8787..ce500490349 100644 --- a/scripts/west_commands/runners/jlink.py +++ b/scripts/west_commands/runners/jlink.py @@ -36,6 +36,9 @@ def is_ip(ip): return False return True +def is_tunnel(tunnel): + return tunnel.startswith("tunnel:") + class ToggleAction(argparse.Action): def __call__(self, parser, args, ignored, option): @@ -247,7 +250,7 @@ def do_run(self, command, **kwargs): server_cmd = ([self.gdbserver] + ['-select', - ('ip' if is_ip(self.dev_id) else 'usb') + + ('ip' if (is_ip(self.dev_id) or is_tunnel(self.dev_id)) else 'usb') + (f'={self.dev_id}' if self.dev_id else ''), '-port', str(self.gdb_port), '-if', self.iface, @@ -404,7 +407,7 @@ def flash(self, **kwargs): loader_details = "?" + self.loader cmd = ([self.commander] + - (['-IP', f'{self.dev_id}'] if is_ip(self.dev_id) else (['-USB', f'{self.dev_id}'] if self.dev_id else [])) + + (['-IP', f'{self.dev_id}'] if (is_ip(self.dev_id) or is_tunnel(self.dev_id)) else (['-USB', f'{self.dev_id}'] if self.dev_id else [])) + (['-nogui', '1'] if self.supports_nogui else []) + ['-if', self.iface, '-speed', self.speed, From 8be5a6065e2a25335bc11390019666f1baae0438 Mon Sep 17 00:00:00 2001 From: Yves Vandervennet Date: Mon, 28 Oct 2024 16:09:36 -0400 Subject: [PATCH 03/10] [nrf fromtree] west: linkserver: change the default port number for semihost LinkServer manages port numbers for gdb and semihost as separate linear sequences when invoked to debug multi-core applications, e.g the gdb-server instance for cpu0 will have the default GDB port 3333 and the next gdb-server instance will be assigned the port 3334. The latter will conflict with the default port for semihost which is 3334. This patch changes the default port for semihost to 8888. Port numbers can be changed when invoking the linkserver runner. Signed-off-by: Yves Vandervennet (cherry picked from commit 7b29b66bd5ff3370409444b36865c9fea7450dfe) Signed-off-by: Tomasz Chyrowicz --- scripts/west_commands/runners/linkserver.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/west_commands/runners/linkserver.py b/scripts/west_commands/runners/linkserver.py index 886e855bb43..60eaafce0ab 100644 --- a/scripts/west_commands/runners/linkserver.py +++ b/scripts/west_commands/runners/linkserver.py @@ -18,7 +18,7 @@ DEFAULT_LINKSERVER_EXE = 'Linkserver.exe' if sys.platform == 'win32' else 'LinkServer' DEFAULT_LINKSERVER_GDB_PORT = 3333 -DEFAULT_LINKSERVER_SEMIHOST_PORT = 3334 +DEFAULT_LINKSERVER_SEMIHOST_PORT = 8888 class LinkServerBinaryRunner(ZephyrBinaryRunner): '''Runner front-end for NXP Linkserver''' @@ -95,6 +95,7 @@ def do_add_parser(cls, parser): @classmethod def do_create(cls, cfg, args): + print("RUNNER - gdb_port = " + str(args.gdb_port) + ", semih port = " + str(args.semihost_port)) return LinkServerBinaryRunner(cfg, args.device, args.core, linkserver=args.linkserver, dt_flash=args.dt_flash, From c31a74baf5cbae7829e7efb7811b6382df8afbce Mon Sep 17 00:00:00 2001 From: Pieter De Gendt Date: Wed, 20 Nov 2024 19:39:56 +0100 Subject: [PATCH 04/10] [nrf fromtree] scripts: west_commands: runners: Remove obsolete pylint ignores These ignores were added with an older version of pylint and are either removed or ignored by default. Signed-off-by: Pieter De Gendt (cherry picked from commit aae018be873236a136264c8b65de1397c58cbeb5) Signed-off-by: Tomasz Chyrowicz --- scripts/west_commands/runners/intel_cyclonev.py | 1 - scripts/west_commands/runners/uf2.py | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/scripts/west_commands/runners/intel_cyclonev.py b/scripts/west_commands/runners/intel_cyclonev.py index c14e20b967f..764ebd7420b 100644 --- a/scripts/west_commands/runners/intel_cyclonev.py +++ b/scripts/west_commands/runners/intel_cyclonev.py @@ -174,7 +174,6 @@ def print_gdbserver_message(self): self.logger.info('OpenOCD GDB server running on port ' f'{self.gdb_port}{thread_msg}') - # pylint: disable=R0201 def to_num(self, number): dev_match = re.search(r"^\d*\+dev", number) dev_version = not dev_match is None diff --git a/scripts/west_commands/runners/uf2.py b/scripts/west_commands/runners/uf2.py index 87db248c7bf..0db4f0b9b44 100644 --- a/scripts/west_commands/runners/uf2.py +++ b/scripts/west_commands/runners/uf2.py @@ -10,7 +10,7 @@ from runners.core import ZephyrBinaryRunner, RunnerCaps try: - import psutil # pylint: disable=unused-import + import psutil MISSING_PSUTIL = False except ImportError: # This can happen when building the documentation for the From b3b921983315eb41e9da1db4c7822d61e59d1e9a Mon Sep 17 00:00:00 2001 From: Pieter De Gendt Date: Wed, 20 Nov 2024 19:45:12 +0100 Subject: [PATCH 05/10] [nrf fromtree] scripts: west_commands: runners: Fix pylint unbound issues Variables are possibly unbound, initialize to None. Signed-off-by: Pieter De Gendt (cherry picked from commit 25be1501abb11eefa223575c7c148e51adaeccc9) Signed-off-by: Tomasz Chyrowicz --- scripts/west_commands/runners/intel_cyclonev.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scripts/west_commands/runners/intel_cyclonev.py b/scripts/west_commands/runners/intel_cyclonev.py index 764ebd7420b..490beca4da8 100644 --- a/scripts/west_commands/runners/intel_cyclonev.py +++ b/scripts/west_commands/runners/intel_cyclonev.py @@ -34,6 +34,10 @@ def __init__(self, cfg, pre_init=None, reset_halt_cmd=DEFAULT_OPENOCD_RESET_HALT support = path.join(cfg.board_dir, 'support') + gdb_commands = None + gdb_commands2 = None + gdb_commands_deb = None + if not config: default = path.join(support, 'openocd.cfg') default2 = path.join(support, 'download_all.gdb') From a0e2c85e26b77df9aa6d206c1673cefced1fc8b0 Mon Sep 17 00:00:00 2001 From: Pieter De Gendt Date: Wed, 20 Nov 2024 12:12:27 +0100 Subject: [PATCH 06/10] [nrf fromtree] scripts: west_commands: runners: Fix f-string-missing-placeholders (F541) Constant strings should not be f-strings. See https://docs.astral.sh/ruff/rules/f-string-missing-placeholders/ Signed-off-by: Pieter De Gendt (cherry picked from commit 7f72dd3a0f338206a8112d7deca89f0f19be2461) Signed-off-by: Tomasz Chyrowicz --- scripts/west_commands/runners/linkserver.py | 2 +- scripts/west_commands/runners/nrfutil.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/west_commands/runners/linkserver.py b/scripts/west_commands/runners/linkserver.py index 60eaafce0ab..8179adc1e60 100644 --- a/scripts/west_commands/runners/linkserver.py +++ b/scripts/west_commands/runners/linkserver.py @@ -90,7 +90,7 @@ def do_add_parser(cls, parser): {DEFAULT_LINKSERVER_EXE}''') # user may need to override settings. parser.add_argument('--override', required=False, action='append', - help=f'''configuration overrides as defined bylinkserver. Example: /device/memory/0/location=0xcafecafe''') + help='''configuration overrides as defined bylinkserver. Example: /device/memory/0/location=0xcafecafe''') @classmethod def do_create(cls, cfg, args): diff --git a/scripts/west_commands/runners/nrfutil.py b/scripts/west_commands/runners/nrfutil.py index ec1328e4edc..584c5e78349 100644 --- a/scripts/west_commands/runners/nrfutil.py +++ b/scripts/west_commands/runners/nrfutil.py @@ -97,7 +97,7 @@ def _exec_batch(self): indent=4) + '\n' hex_dir = Path(self.hex_).parent - json_file = os.fspath(hex_dir / f'generated_nrfutil_batch.json') + json_file = os.fspath(hex_dir / 'generated_nrfutil_batch.json') with open(json_file, "w") as f: f.write(batch) From d3e09db03ace436629112b4dd3221a9733a6c5ce Mon Sep 17 00:00:00 2001 From: Pieter De Gendt Date: Wed, 20 Nov 2024 15:35:46 +0100 Subject: [PATCH 07/10] [nrf fromtree] scripts: west_commands: runners: Fix bare except (E722 & B904) Catch explicit exceptions and pass them them to the ValueError See https://docs.astral.sh/ruff/rules/bare-except/ https://docs.astral.sh/ruff/rules/raise-without-from-inside-except/ Signed-off-by: Pieter De Gendt (cherry picked from commit f7902bc817d7e3e7655602bc44f0dccc6e09d394) Signed-off-by: Tomasz Chyrowicz --- .../west_commands/runners/canopen_program.py | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/scripts/west_commands/runners/canopen_program.py b/scripts/west_commands/runners/canopen_program.py index 2fb8ba42b01..667a5d3adbb 100644 --- a/scripts/west_commands/runners/canopen_program.py +++ b/scripts/west_commands/runners/canopen_program.py @@ -214,8 +214,8 @@ def connect(self): '''Connect to CAN network''' try: self.network.connect(context=self.can_context) - except: - raise ValueError('Unable to connect to CAN network') + except Exception as err: + raise ValueError('Unable to connect to CAN network') from err def disconnect(self): '''Disconnect from CAN network''' @@ -226,15 +226,15 @@ def enter_pre_operational(self): self.logger.info("Entering pre-operational mode") try: self.node.nmt.state = 'PRE-OPERATIONAL' - except: - raise ValueError('Failed to enter pre-operational mode') + except Exception as err: + raise ValueError('Failed to enter pre-operational mode') from err def _ctrl_program(self, cmd): '''Write program control command to CANopen object dictionary (0x1f51)''' try: self.ctrl_sdo.raw = cmd - except: - raise ValueError('Unable to write control command 0x{:02x}'.format(cmd)) + except Exception as err: + raise ValueError('Unable to write control command 0x{:02x}'.format(cmd)) from err def stop_program(self): '''Write stop control command to CANopen object dictionary (0x1f51)''' @@ -260,8 +260,8 @@ def swid(self): '''Read software identification from CANopen object dictionary (0x1f56)''' try: swid = self.swid_sdo.raw - except: - raise ValueError('Failed to read software identification') + except Exception as err: + raise ValueError('Failed to read software identification') from err self.logger.info('Program software identification: 0x{:08x}'.format(swid)) return swid @@ -269,8 +269,8 @@ def flash_status(self): '''Read flash status identification''' try: status = self.flash_sdo.raw - except: - raise ValueError('Failed to read flash status identification') + except Exception as err: + raise ValueError('Failed to read flash status identification') from err return status def download(self, bin_file): @@ -289,8 +289,8 @@ def download(self, bin_file): break outfile.write(chunk) progress.next(n=len(chunk)) - except: - raise ValueError('Failed to download program') + except Exception as err: + raise ValueError('Failed to download program') from err finally: progress.finish() infile.close() @@ -301,8 +301,8 @@ def wait_for_bootup(self, timeout=DEFAULT_TIMEOUT): self.logger.info('Waiting for boot-up message...') try: self.node.nmt.wait_for_bootup(timeout=timeout) - except: - raise ValueError('Timeout waiting for boot-up message') + except Exception as err: + raise ValueError('Timeout waiting for boot-up message') from err def wait_for_flash_status_ok(self, timeout=DEFAULT_TIMEOUT): '''Wait for flash status ok''' From 3db5f1629b64a2b3ae4c952c3b676748b62f2bdc Mon Sep 17 00:00:00 2001 From: Pieter De Gendt Date: Wed, 20 Nov 2024 16:05:28 +0100 Subject: [PATCH 08/10] [nrf fromtree] scripts: west_commands: runners: Fix f-string (UP032) Replace .format() calls with f-strings. See https://docs.astral.sh/ruff/rules/f-string/ Signed-off-by: Pieter De Gendt (cherry picked from commit 775db0e63a547ceabbf55d44f5f651901e1c36a7) Signed-off-by: Tomasz Chyrowicz --- scripts/west_commands/runners/__init__.py | 2 +- .../west_commands/runners/blackmagicprobe.py | 20 ++++++++----------- .../west_commands/runners/canopen_program.py | 10 +++++----- scripts/west_commands/runners/core.py | 5 ++--- scripts/west_commands/runners/dfu.py | 6 +++--- scripts/west_commands/runners/esp32.py | 3 +-- .../west_commands/runners/intel_cyclonev.py | 10 +++++----- scripts/west_commands/runners/jlink.py | 7 +++---- scripts/west_commands/runners/linkserver.py | 5 ++--- scripts/west_commands/runners/mdb.py | 6 +++--- scripts/west_commands/runners/native.py | 5 ++--- scripts/west_commands/runners/nios2.py | 7 +++---- scripts/west_commands/runners/nrf_common.py | 9 ++++----- scripts/west_commands/runners/nsim.py | 6 +++--- scripts/west_commands/runners/pyocd.py | 18 +++++++---------- .../west_commands/runners/silabs_commander.py | 2 +- scripts/west_commands/runners/stm32flash.py | 14 ++++++------- scripts/west_commands/runners/teensy.py | 4 ++-- 18 files changed, 62 insertions(+), 77 deletions(-) diff --git a/scripts/west_commands/runners/__init__.py b/scripts/west_commands/runners/__init__.py index 6d5539905e3..3af86e74828 100644 --- a/scripts/west_commands/runners/__init__.py +++ b/scripts/west_commands/runners/__init__.py @@ -71,6 +71,6 @@ def get_runner_cls(runner): for cls in ZephyrBinaryRunner.get_runners(): if cls.name() == runner: return cls - raise ValueError('unknown runner "{}"'.format(runner)) + raise ValueError(f'unknown runner "{runner}"') __all__ = ['ZephyrBinaryRunner', 'get_runner_cls'] diff --git a/scripts/west_commands/runners/blackmagicprobe.py b/scripts/west_commands/runners/blackmagicprobe.py index 1c2c8fa0d6a..0ffdd58a9b9 100644 --- a/scripts/west_commands/runners/blackmagicprobe.py +++ b/scripts/west_commands/runners/blackmagicprobe.py @@ -170,12 +170,11 @@ def bmp_flash(self, command, **kwargs): command = (self.gdb + ['-ex', "set confirm off", - '-ex', "target extended-remote {}".format( - self.gdb_serial)] + + '-ex', f"target extended-remote {self.gdb_serial}"] + self.connect_rst_enable_arg + ['-ex', "monitor swdp_scan", '-ex', "attach 1", - '-ex', "load {}".format(flash_file), + '-ex', f"load {flash_file}", '-ex', "kill", '-ex', "quit", '-silent']) @@ -192,20 +191,18 @@ def bmp_attach(self, command, **kwargs): if self.elf_file is None: command = (self.gdb + ['-ex', "set confirm off", - '-ex', "target extended-remote {}".format( - self.gdb_serial)] + + '-ex', f"target extended-remote {self.gdb_serial}"] + self.connect_rst_disable_arg + ['-ex', "monitor swdp_scan", '-ex', "attach 1"]) else: command = (self.gdb + ['-ex', "set confirm off", - '-ex', "target extended-remote {}".format( - self.gdb_serial)] + + '-ex', f"target extended-remote {self.gdb_serial}"] + self.connect_rst_disable_arg + ['-ex', "monitor swdp_scan", '-ex', "attach 1", - '-ex', "file {}".format(self.elf_file)]) + '-ex', f"file {self.elf_file}"]) self.check_call_ignore_sigint(command) def bmp_debug(self, command, **kwargs): @@ -213,13 +210,12 @@ def bmp_debug(self, command, **kwargs): raise ValueError('Cannot debug; elf file is missing') command = (self.gdb + ['-ex', "set confirm off", - '-ex', "target extended-remote {}".format( - self.gdb_serial)] + + '-ex', f"target extended-remote {self.gdb_serial}"] + self.connect_rst_enable_arg + ['-ex', "monitor swdp_scan", '-ex', "attach 1", - '-ex', "file {}".format(self.elf_file), - '-ex', "load {}".format(self.elf_file)]) + '-ex', f"file {self.elf_file}", + '-ex', f"load {self.elf_file}"]) self.check_call_ignore_sigint(command) def do_run(self, command, **kwargs): diff --git a/scripts/west_commands/runners/canopen_program.py b/scripts/west_commands/runners/canopen_program.py index 667a5d3adbb..5b4c055fa8b 100644 --- a/scripts/west_commands/runners/canopen_program.py +++ b/scripts/west_commands/runners/canopen_program.py @@ -151,8 +151,8 @@ def flash(self, **kwargs): if status == 0: self.downloader.swid() else: - self.logger.warning('Flash status 0x{:02x}, ' - 'skipping software identification'.format(status)) + self.logger.warning(f'Flash status 0x{status:02x}, ' + 'skipping software identification') self.downloader.enter_pre_operational() @@ -172,7 +172,7 @@ def flash(self, **kwargs): status = self.downloader.wait_for_flash_status_ok(self.timeout) if status != 0: raise ValueError('Program download failed: ' - 'flash status 0x{:02x}'.format(status)) + f'flash status 0x{status:02x}') self.downloader.swid() self.downloader.start_program() @@ -234,7 +234,7 @@ def _ctrl_program(self, cmd): try: self.ctrl_sdo.raw = cmd except Exception as err: - raise ValueError('Unable to write control command 0x{:02x}'.format(cmd)) from err + raise ValueError(f'Unable to write control command 0x{cmd:02x}') from err def stop_program(self): '''Write stop control command to CANopen object dictionary (0x1f51)''' @@ -262,7 +262,7 @@ def swid(self): swid = self.swid_sdo.raw except Exception as err: raise ValueError('Failed to read software identification') from err - self.logger.info('Program software identification: 0x{:08x}'.format(swid)) + self.logger.info(f'Program software identification: 0x{swid:08x}') return swid def flash_status(self): diff --git a/scripts/west_commands/runners/core.py b/scripts/west_commands/runners/core.py index d216dffcd18..6126cb6a398 100644 --- a/scripts/west_commands/runners/core.py +++ b/scripts/west_commands/runners/core.py @@ -482,7 +482,7 @@ def __init__(self, cfg: RunnerConfig): self.cfg = cfg '''RunnerConfig for this instance.''' - self.logger = logging.getLogger('runners.{}'.format(self.name())) + self.logger = logging.getLogger(f'runners.{self.name()}') '''logging.Logger for this instance.''' @staticmethod @@ -701,8 +701,7 @@ def run(self, command: str, **kwargs): This is the main entry point to this runner.''' caps = self.capabilities() if command not in caps.commands: - raise ValueError('runner {} does not implement command {}'.format( - self.name(), command)) + raise ValueError(f'runner {self.name()} does not implement command {command}') self.do_run(command, **kwargs) @abc.abstractmethod diff --git a/scripts/west_commands/runners/dfu.py b/scripts/west_commands/runners/dfu.py index 875780e4802..1a02ff4b839 100644 --- a/scripts/west_commands/runners/dfu.py +++ b/scripts/west_commands/runners/dfu.py @@ -25,11 +25,11 @@ def __init__(self, cfg, dev_id, alt, img, exe='dfu-util', self.dev_id = dev_id # Used only for error checking in do_run self.alt = alt self.img = img - self.cmd = [exe, '-d,{}'.format(dev_id)] + self.cmd = [exe, f'-d,{dev_id}'] try: - self.list_pattern = ', alt={},'.format(int(self.alt)) + self.list_pattern = f', alt={int(self.alt)},' except ValueError: - self.list_pattern = ', name="{}",'.format(self.alt) + self.list_pattern = f', name="{self.alt}",' if dfuse_config is None: self.dfuse = False diff --git a/scripts/west_commands/runners/esp32.py b/scripts/west_commands/runners/esp32.py index 8a0d5c8ae75..ce323ab256e 100644 --- a/scripts/west_commands/runners/esp32.py +++ b/scripts/west_commands/runners/esp32.py @@ -132,6 +132,5 @@ def do_run(self, command, **kwargs): else: cmd_flash.extend([self.app_address, self.app_bin]) - self.logger.info("Flashing esp32 chip on {} ({}bps)". - format(self.device, self.baud)) + self.logger.info(f"Flashing esp32 chip on {self.device} ({self.baud}bps)") self.check_call(cmd_flash) diff --git a/scripts/west_commands/runners/intel_cyclonev.py b/scripts/west_commands/runners/intel_cyclonev.py index 490beca4da8..c1e08f6de9e 100644 --- a/scripts/west_commands/runners/intel_cyclonev.py +++ b/scripts/west_commands/runners/intel_cyclonev.py @@ -243,10 +243,10 @@ def do_flash_elf(self, **kwargs): pre_init_cmd) temp_str = '--cd=' + os.environ.get('ZEPHYR_BASE') #Go to Zephyr base Dir gdb_cmd = (self.gdb_cmd + self.tui_arg + - [temp_str,'-ex', 'target extended-remote localhost:{}'.format(self.gdb_port) , '-batch']) #Execute First Script in Zephyr Base Dir + [temp_str,'-ex', f'target extended-remote localhost:{self.gdb_port}' , '-batch']) #Execute First Script in Zephyr Base Dir gdb_cmd2 = (self.gdb_cmd + self.tui_arg + - ['-ex', 'target extended-remote localhost:{}'.format(self.gdb_port) , '-batch']) #Execute Second Script in Build Dir + ['-ex', f'target extended-remote localhost:{self.gdb_port}' , '-batch']) #Execute Second Script in Build Dir echo = ['echo'] if self.gdb_init is not None: for i in self.gdb_init: @@ -298,16 +298,16 @@ def do_attach_debug(self, command, **kwargs): pre_init_cmd) gdb_attach = (self.gdb_cmd + self.tui_arg + - ['-ex', 'target extended-remote :{}'.format(self.gdb_port), + ['-ex', f'target extended-remote :{self.gdb_port}', self.elf_name, '-q']) temp_str = '--cd=' + os.environ.get('ZEPHYR_BASE') #Go to Zephyr base Dir gdb_cmd = (self.gdb_cmd + self.tui_arg + - [temp_str,'-ex', 'target extended-remote localhost:{}'.format(self.gdb_port) , '-batch']) #Execute First Script in Zephyr Base Dir + [temp_str,'-ex', f'target extended-remote localhost:{self.gdb_port}' , '-batch']) #Execute First Script in Zephyr Base Dir gdb_cmd2 = (self.gdb_cmd + self.tui_arg + - ['-ex', 'target extended-remote :{}'.format(self.gdb_port) , '-batch']) #Execute Second Script in Build Dir + ['-ex', f'target extended-remote :{self.gdb_port}' , '-batch']) #Execute Second Script in Build Dir if self.gdb_init is not None: diff --git a/scripts/west_commands/runners/jlink.py b/scripts/west_commands/runners/jlink.py index ce500490349..3d5727991e2 100644 --- a/scripts/west_commands/runners/jlink.py +++ b/scripts/west_commands/runners/jlink.py @@ -125,8 +125,7 @@ def do_add_parser(cls, parser): help='custom gdb host, defaults to the empty string ' 'and runs a gdb server') parser.add_argument('--gdb-port', default=DEFAULT_JLINK_GDB_PORT, - help='pyocd gdb port, defaults to {}'.format( - DEFAULT_JLINK_GDB_PORT)) + help=f'pyocd gdb port, defaults to {DEFAULT_JLINK_GDB_PORT}') parser.add_argument('--commander', default=DEFAULT_JLINK_EXE, help=f'''J-Link Commander, default is {DEFAULT_JLINK_EXE}''') @@ -307,7 +306,7 @@ def do_run(self, command, **kwargs): client_cmd = (self.gdb_cmd + self.tui_arg + [elf_name] + - ['-ex', 'target remote {}:{}'.format(self.gdb_host, self.gdb_port)]) + ['-ex', f'target remote {self.gdb_host}:{self.gdb_port}']) if command == 'debug': client_cmd += ['-ex', 'monitor halt', '-ex', 'monitor reset', @@ -416,7 +415,7 @@ def flash(self, **kwargs): (['-nogui', '1'] if self.supports_nogui else []) + self.tool_opt) - self.logger.info('Flashing file: {}'.format(flash_file)) + self.logger.info(f'Flashing file: {flash_file}') kwargs = {} if not self.logger.isEnabledFor(logging.DEBUG): kwargs['stdout'] = subprocess.DEVNULL diff --git a/scripts/west_commands/runners/linkserver.py b/scripts/west_commands/runners/linkserver.py index 8179adc1e60..9ffcdf63605 100644 --- a/scripts/west_commands/runners/linkserver.py +++ b/scripts/west_commands/runners/linkserver.py @@ -78,8 +78,7 @@ def do_add_parser(cls, parser): help='if given, GDB uses -tui') parser.add_argument('--gdb-port', default=DEFAULT_LINKSERVER_GDB_PORT, - help='gdb port to open, defaults to {}'.format( - DEFAULT_LINKSERVER_GDB_PORT)) + help=f'gdb port to open, defaults to {DEFAULT_LINKSERVER_GDB_PORT}') parser.add_argument('--semihost-port', default=DEFAULT_LINKSERVER_SEMIHOST_PORT, help='semihost port to open, defaults to the empty string ' @@ -147,7 +146,7 @@ def do_run(self, command, **kwargs): gdb_cmd = ([self.gdb_cmd] + self.tui_arg + [self.elf_name] + - ['-ex', 'target remote {}:{}'.format(self.gdb_host, self.gdb_port)]) + ['-ex', f'target remote {self.gdb_host}:{self.gdb_port}']) if command == 'debug': gdb_cmd += [ '-ex', 'load', '-ex', 'monitor reset'] diff --git a/scripts/west_commands/runners/mdb.py b/scripts/west_commands/runners/mdb.py index 6dbffa30dbd..bef14effbdd 100644 --- a/scripts/west_commands/runners/mdb.py +++ b/scripts/west_commands/runners/mdb.py @@ -68,7 +68,7 @@ def mdb_do_run(mdb_runner, command): if mdb_runner.dig_device: mdb_target += [mdb_runner.dig_device] else: # \todo: add support of other debuggers - raise ValueError('unsupported jtag adapter {}'.format(mdb_runner.jtag)) + raise ValueError(f'unsupported jtag adapter {mdb_runner.jtag}') if command == 'flash': if is_flash_cmd_need_exit_immediately(mdb_runner): @@ -85,7 +85,7 @@ def mdb_do_run(mdb_runner, command): elif 1 < mdb_runner.cores <= 12: mdb_multifiles = '-multifiles=' for i in range(mdb_runner.cores): - mdb_sub_cmd = [commander] + ['-pset={}'.format(i + 1), '-psetname=core{}'.format(i)] + mdb_sub_cmd = [commander] + [f'-pset={i + 1}', f'-psetname=core{i}'] # -prop=download=2 is used for SMP application debug, only the 1st core # will download the shared image. if i > 0: mdb_sub_cmd += ['-prop=download=2'] @@ -100,7 +100,7 @@ def mdb_do_run(mdb_runner, command): mdb_cmd = [commander] + [mdb_multifiles] + mdb_run else: - raise ValueError('unsupported cores {}'.format(mdb_runner.cores)) + raise ValueError(f'unsupported cores {mdb_runner.cores}') mdb_runner.call(mdb_cmd, cwd=mdb_runner.build_dir) diff --git a/scripts/west_commands/runners/native.py b/scripts/west_commands/runners/native.py index 2cbcf60d3ab..c2cd414f012 100644 --- a/scripts/west_commands/runners/native.py +++ b/scripts/west_commands/runners/native.py @@ -43,8 +43,7 @@ def do_add_parser(cls, parser: argparse.ArgumentParser): parser.add_argument('--tui', default=False, action='store_true', help='if given, GDB uses -tui') parser.add_argument('--gdb-port', default=DEFAULT_GDB_PORT, - help='gdb port, defaults to {}'.format( - DEFAULT_GDB_PORT)) + help=f'gdb port, defaults to {DEFAULT_GDB_PORT}') @classmethod def do_create(cls, cfg: RunnerConfig, args: argparse.Namespace) -> ZephyrBinaryRunner: @@ -76,6 +75,6 @@ def do_debug(self, **kwargs): self.check_call(cmd) def do_debugserver(self, **kwargs): - cmd = (['gdbserver', ':{}'.format(self.gdb_port), self.cfg.exe_file]) + cmd = (['gdbserver', f':{self.gdb_port}', self.cfg.exe_file]) self.check_call(cmd) diff --git a/scripts/west_commands/runners/nios2.py b/scripts/west_commands/runners/nios2.py index aface007b31..4d84a775ec5 100644 --- a/scripts/west_commands/runners/nios2.py +++ b/scripts/west_commands/runners/nios2.py @@ -62,7 +62,7 @@ def flash(self, **kwargs): raise ValueError('Cannot flash; --cpu-sof not given.') self.ensure_output('hex') - self.logger.info('Flashing file: {}'.format(self.hex_name)) + self.logger.info(f'Flashing file: {self.hex_name}') cmd = [self.quartus_py, '--sof', self.cpu_sof, '--kernel', self.hex_name] @@ -70,8 +70,7 @@ def flash(self, **kwargs): self.check_call(cmd) def print_gdbserver_message(self, gdb_port): - self.logger.info('Nios II GDB server running on port {}'. - format(gdb_port)) + self.logger.info(f'Nios II GDB server running on port {gdb_port}') def debug_debugserver(self, command, **kwargs): # Per comments in the shell script, the NIOSII GDB server @@ -100,7 +99,7 @@ def debug_debugserver(self, command, **kwargs): gdb_cmd = (self.gdb_cmd + self.tui_arg + [self.elf_name, - '-ex', 'target remote :{}'.format(gdb_port)]) + '-ex', f'target remote :{gdb_port}']) self.require(gdb_cmd[0]) self.print_gdbserver_message(gdb_port) diff --git a/scripts/west_commands/runners/nrf_common.py b/scripts/west_commands/runners/nrf_common.py index 1f4942972df..37c0a0ab502 100644 --- a/scripts/west_commands/runners/nrf_common.py +++ b/scripts/west_commands/runners/nrf_common.py @@ -129,7 +129,7 @@ def get_board_snr(self, glob): elif len(snrs) == 1: board_snr = snrs[0] self.verify_snr(board_snr) - print("Using board {}".format(board_snr)) + print(f"Using board {board_snr}") return board_snr elif not sys.stdin.isatty(): raise RuntimeError( @@ -142,10 +142,9 @@ def get_board_snr(self, glob): print('There are multiple boards connected{}.'.format( f" matching '{glob}'" if glob != "*" else "")) for i, snr in enumerate(snrs, 1): - print('{}. {}'.format(i, snr)) + print(f'{i}. {snr}') - p = 'Please select one with desired serial number (1-{}): '.format( - len(snrs)) + p = f'Please select one with desired serial number (1-{len(snrs)}): ' while True: try: value = input(p) @@ -251,7 +250,7 @@ def recover_target(self): def program_hex(self): # Get the command use to actually program self.hex_. - self.logger.info('Flashing file: {}'.format(self.hex_)) + self.logger.info(f'Flashing file: {self.hex_}') # What type of erase/core arguments should we pass to the tool? core = None diff --git a/scripts/west_commands/runners/nsim.py b/scripts/west_commands/runners/nsim.py index 94bd09c3dac..5ed17839203 100644 --- a/scripts/west_commands/runners/nsim.py +++ b/scripts/west_commands/runners/nsim.py @@ -83,10 +83,10 @@ def do_debug(self, **kwargs): config = kwargs['nsim-cfg'] server_cmd = (self.nsim_cmd + ['-gdb', - '-port={}'.format(self.gdb_port), + f'-port={self.gdb_port}', '-propsfile', config]) gdb_cmd = (self.gdb_cmd + - ['-ex', 'target remote :{}'.format(self.gdb_port), + ['-ex', f'target remote :{self.gdb_port}', '-ex', 'load', self.cfg.elf_file]) self.require(gdb_cmd[0]) @@ -96,7 +96,7 @@ def debugserver(self, **kwargs): config = kwargs['nsim-cfg'] cmd = (self.nsim_cmd + - ['-gdb', '-port={}'.format(self.gdb_port), + ['-gdb', f'-port={self.gdb_port}', '-propsfile', config]) self.check_call(cmd) diff --git a/scripts/west_commands/runners/pyocd.py b/scripts/west_commands/runners/pyocd.py index 40519c6f2c1..653276bd69b 100644 --- a/scripts/west_commands/runners/pyocd.py +++ b/scripts/west_commands/runners/pyocd.py @@ -100,11 +100,9 @@ def do_add_parser(cls, parser): parser.add_argument('--frequency', help='SWD clock frequency in Hz') parser.add_argument('--gdb-port', default=DEFAULT_PYOCD_GDB_PORT, - help='pyocd gdb port, defaults to {}'.format( - DEFAULT_PYOCD_GDB_PORT)) + help=f'pyocd gdb port, defaults to {DEFAULT_PYOCD_GDB_PORT}') parser.add_argument('--telnet-port', default=DEFAULT_PYOCD_TELNET_PORT, - help='pyocd telnet port, defaults to {}'.format( - DEFAULT_PYOCD_TELNET_PORT)) + help=f'pyocd telnet port, defaults to {DEFAULT_PYOCD_TELNET_PORT}') parser.add_argument('--tui', default=False, action='store_true', help='if given, GDB uses -tui') parser.add_argument('--board-id', dest='dev_id', @@ -132,7 +130,7 @@ def do_create(cls, cfg, args): daparg = os.environ.get('PYOCD_DAPARG') if not ret.daparg_args and daparg: ret.logger.warning('PYOCD_DAPARG is deprecated; use --daparg') - ret.logger.debug('--daparg={} via PYOCD_DAPARG'.format(daparg)) + ret.logger.debug(f'--daparg={daparg} via PYOCD_DAPARG') ret.daparg_args = ['-da', daparg] return ret @@ -161,8 +159,7 @@ def flash(self, **kwargs): fname = self.elf_name else: raise ValueError( - 'Cannot flash; no hex ({}), bin ({}) or elf ({}) files found. '.format( - self.hex_name, self.bin_name, self.elf_name)) + f'Cannot flash; no hex ({self.hex_name}), bin ({self.bin_name}) or elf ({self.elf_name}) files found. ') erase_method = 'chip' if self.erase else 'sector' @@ -179,12 +176,11 @@ def flash(self, **kwargs): self.flash_extra + [fname]) - self.logger.info('Flashing file: {}'.format(fname)) + self.logger.info(f'Flashing file: {fname}') self.check_call(cmd) def log_gdbserver_message(self): - self.logger.info('pyOCD GDB server running on port {}'. - format(self.gdb_port)) + self.logger.info(f'pyOCD GDB server running on port {self.gdb_port}') def debug_debugserver(self, command, **kwargs): server_cmd = ([self.pyocd] + @@ -207,7 +203,7 @@ def debug_debugserver(self, command, **kwargs): client_cmd = (self.gdb_cmd + self.tui_args + [self.elf_name] + - ['-ex', 'target remote :{}'.format(self.gdb_port)]) + ['-ex', f'target remote :{self.gdb_port}']) if command == 'debug': client_cmd += ['-ex', 'monitor halt', '-ex', 'monitor reset', diff --git a/scripts/west_commands/runners/silabs_commander.py b/scripts/west_commands/runners/silabs_commander.py index b5c74631626..e9df0d83104 100644 --- a/scripts/west_commands/runners/silabs_commander.py +++ b/scripts/west_commands/runners/silabs_commander.py @@ -123,5 +123,5 @@ def do_run(self, command, **kwargs): args = [self.commander, 'flash'] + opts + self.tool_opt + flash_args - self.logger.info('Flashing file: {}'.format(flash_file)) + self.logger.info(f'Flashing file: {flash_file}') self.check_call(args) diff --git a/scripts/west_commands/runners/stm32flash.py b/scripts/west_commands/runners/stm32flash.py index 5aa544d4b2a..027ab445f9b 100644 --- a/scripts/west_commands/runners/stm32flash.py +++ b/scripts/west_commands/runners/stm32flash.py @@ -98,19 +98,19 @@ def do_run(self, command, **kwargs): if action == 'info': # show device information and exit - msg_text = "get device info from {}".format(self.device) + msg_text = f"get device info from {self.device}" elif action == 'erase': # erase flash #size_aligned = (int(bin_size) >> 12) + 1 << 12 size_aligned = (int(bin_size) & 0xfffff000) + 4096 - msg_text = "erase {} bit starting at {}".format(size_aligned, self.start_addr) + msg_text = f"erase {size_aligned} bit starting at {self.start_addr}" cmd_flash.extend([ '-S', str(self.start_addr) + ":" + str(size_aligned), '-o']) elif action == 'start': # start execution - msg_text = "start code execution at {}".format(self.exec_addr) + msg_text = f"start code execution at {self.exec_addr}" if self.exec_addr: if self.exec_addr == 0 or self.exec_addr.lower() == '0x0': msg_text += " (flash start)" @@ -121,7 +121,7 @@ def do_run(self, command, **kwargs): elif action == 'write': # flash binary file - msg_text = "write {} bytes starting at {}".format(bin_size, self.start_addr) + msg_text = f"write {bin_size} bytes starting at {self.start_addr}" cmd_flash.extend([ '-S', str(self.start_addr) + ":" + str(bin_size), '-w', bin_name]) @@ -139,11 +139,11 @@ def do_run(self, command, **kwargs): cmd_flash.extend(['-v']) else: - msg_text = "invalid action \'{}\' passed!".format(action) - self.logger.error('Invalid action \'{}\' passed!'.format(action)) + msg_text = f"invalid action \'{action}\' passed!" + self.logger.error(f'Invalid action \'{action}\' passed!') return -1 cmd_flash.extend([self.device]) self.logger.info("Board: " + msg_text) self.check_call(cmd_flash) - self.logger.info('Board: finished \'{}\' .'.format(action)) + self.logger.info(f'Board: finished \'{action}\' .') diff --git a/scripts/west_commands/runners/teensy.py b/scripts/west_commands/runners/teensy.py index a0854f619b2..e43ea3ced2c 100644 --- a/scripts/west_commands/runners/teensy.py +++ b/scripts/west_commands/runners/teensy.py @@ -47,13 +47,13 @@ def flash(self): fname = self.hex_name else: raise ValueError( - 'Cannot flash; no hex ({}) file found. '.format(self.hex_name)) + f'Cannot flash; no hex ({self.hex_name}) file found. ') cmd = ([self.teensy_loader] + self.mcu_args + [fname]) - self.logger.info('Flashing file: {}'.format(fname)) + self.logger.info(f'Flashing file: {fname}') try: self.check_output(cmd) From 6036a54172e7d4c1d98da4a18476d640fe11fae1 Mon Sep 17 00:00:00 2001 From: Pieter De Gendt Date: Wed, 20 Nov 2024 16:54:12 +0100 Subject: [PATCH 09/10] [nrf fromtree] scripts: west_commands: runners: Fix line-too-long (E501) Wrap long lines to max 100 characters. See https://docs.astral.sh/ruff/rules/line-too-long/ Signed-off-by: Pieter De Gendt (cherry picked from commit 336c7dadac30ac41773aa86e01d43e05ccd036c2) Signed-off-by: Tomasz Chyrowicz --- scripts/west_commands/runners/bossac.py | 4 +- .../west_commands/runners/canopen_program.py | 6 +- scripts/west_commands/runners/core.py | 21 ++++--- scripts/west_commands/runners/ezflashcli.py | 4 +- scripts/west_commands/runners/intel_adsp.py | 3 +- .../west_commands/runners/intel_cyclonev.py | 16 +++-- scripts/west_commands/runners/jlink.py | 58 +++++++++++-------- scripts/west_commands/runners/linkserver.py | 13 +++-- scripts/west_commands/runners/mdb.py | 11 ++-- scripts/west_commands/runners/nrf_common.py | 41 ++++++++++--- scripts/west_commands/runners/openocd.py | 3 +- scripts/west_commands/runners/pyocd.py | 3 +- scripts/west_commands/runners/renode-robot.py | 3 +- scripts/west_commands/runners/renode.py | 3 +- .../west_commands/runners/silabs_commander.py | 3 +- scripts/west_commands/runners/spi_burn.py | 21 +++++-- .../runners/stm32cubeprogrammer.py | 5 +- 17 files changed, 148 insertions(+), 70 deletions(-) diff --git a/scripts/west_commands/runners/bossac.py b/scripts/west_commands/runners/bossac.py index fcbd6fdf92b..ad456d9b49d 100644 --- a/scripts/west_commands/runners/bossac.py +++ b/scripts/west_commands/runners/bossac.py @@ -151,7 +151,9 @@ def get_image_offset(self, supports_offset): def is_gnu_coreutils_stty(self): try: - result = subprocess.run(['stty', '--version'], capture_output=True, text=True, check=True) + result = subprocess.run( + ['stty', '--version'], capture_output=True, text=True, check=True + ) return 'coreutils' in result.stdout except subprocess.CalledProcessError: return False diff --git a/scripts/west_commands/runners/canopen_program.py b/scripts/west_commands/runners/canopen_program.py index 5b4c055fa8b..e55aec968da 100644 --- a/scripts/west_commands/runners/canopen_program.py +++ b/scripts/west_commands/runners/canopen_program.py @@ -112,8 +112,10 @@ def do_add_parser(cls, parser): parser.add_argument('--sdo-timeout', type=float, default=DEFAULT_SDO_TIMEOUT, help=f'''CANopen SDO response timeout in seconds (default: {DEFAULT_SDO_TIMEOUT})''') - parser.add_argument('--download-buffer-size', type=int, default=DEFAULT_PROGRAM_DOWNLOAD_BUFFER_SIZE, - help=f'Program download buffer size in bytes (default: {DEFAULT_PROGRAM_DOWNLOAD_BUFFER_SIZE})') + parser.add_argument('--download-buffer-size', type=int, + default=DEFAULT_PROGRAM_DOWNLOAD_BUFFER_SIZE, + help=f'''Program download buffer size in bytes + (default: {DEFAULT_PROGRAM_DOWNLOAD_BUFFER_SIZE})''') parser.add_argument('--block-transfer', default=False, action='store_true', help='Use SDO block transfers (experimental, default: no)') diff --git a/scripts/west_commands/runners/core.py b/scripts/west_commands/runners/core.py index 6126cb6a398..81838f95fdc 100644 --- a/scripts/west_commands/runners/core.py +++ b/scripts/west_commands/runners/core.py @@ -577,16 +577,22 @@ def add_parser(cls, parser): else: parser.add_argument('--elf-file', metavar='FILE', - action=(partial(depr_action, cls=cls, replacement='-f/--file') if caps.file else None), - help='path to zephyr.elf' if not caps.file else 'Deprecated, use -f/--file instead.') + action=(partial(depr_action, cls=cls, + replacement='-f/--file') if caps.file else None), + help='path to zephyr.elf' + if not caps.file else 'Deprecated, use -f/--file instead.') parser.add_argument('--hex-file', metavar='FILE', - action=(partial(depr_action, cls=cls, replacement='-f/--file') if caps.file else None), - help='path to zephyr.hex' if not caps.file else 'Deprecated, use -f/--file instead.') + action=(partial(depr_action, cls=cls, + replacement='-f/--file') if caps.file else None), + help='path to zephyr.hex' + if not caps.file else 'Deprecated, use -f/--file instead.') parser.add_argument('--bin-file', metavar='FILE', - action=(partial(depr_action, cls=cls, replacement='-f/--file') if caps.file else None), - help='path to zephyr.bin' if not caps.file else 'Deprecated, use -f/--file instead.') + action=(partial(depr_action, cls=cls, + replacement='-f/--file') if caps.file else None), + help='path to zephyr.bin' + if not caps.file else 'Deprecated, use -f/--file instead.') parser.add_argument('--erase', '--no-erase', nargs=0, action=_ToggleAction, @@ -612,7 +618,8 @@ def add_parser(cls, parser): if caps.rtt: parser.add_argument('--rtt-address', dest='rtt_address', type=lambda x: int(x, 0), - help="address of RTT control block. If not supplied, it will be autodetected if possible") + help="""address of RTT control block. If not supplied, + it will be autodetected if possible""") else: parser.add_argument('--rtt-address', help=argparse.SUPPRESS) diff --git a/scripts/west_commands/runners/ezflashcli.py b/scripts/west_commands/runners/ezflashcli.py index ca3c226dbbf..39b68ab80e7 100644 --- a/scripts/west_commands/runners/ezflashcli.py +++ b/scripts/west_commands/runners/ezflashcli.py @@ -84,7 +84,9 @@ def program_bin(self): self.check_call([self.tool] + options + ["image_flash", self.bin_]) else: load_offset = self.build_conf['CONFIG_FLASH_LOAD_OFFSET'] - self.check_call([self.tool] + options + ["write_flash", f'0x{load_offset:x}', self.bin_]) + self.check_call( + [self.tool] + options + ["write_flash", f'0x{load_offset:x}', self.bin_] + ) def reset_device(self): self.logger.info("Resetting...") diff --git a/scripts/west_commands/runners/intel_adsp.py b/scripts/west_commands/runners/intel_adsp.py index 24552c8f61c..5690f49c594 100644 --- a/scripts/west_commands/runners/intel_adsp.py +++ b/scripts/west_commands/runners/intel_adsp.py @@ -60,7 +60,8 @@ def do_add_parser(cls, parser): for old_sign_param in [ '--rimage-tool', '--config-dir', '--default-key', '--key']: parser.add_argument(old_sign_param, action=SignParamError, - help='do not use, "west sign" is now called from CMake, see "west sign -h"') + help='''do not use, "west sign" is now called from CMake, + see "west sign -h"''') @classmethod def tool_opt_help(cls) -> str: diff --git a/scripts/west_commands/runners/intel_cyclonev.py b/scripts/west_commands/runners/intel_cyclonev.py index c1e08f6de9e..e33c190202e 100644 --- a/scripts/west_commands/runners/intel_cyclonev.py +++ b/scripts/west_commands/runners/intel_cyclonev.py @@ -107,7 +107,8 @@ def do_add_parser(cls, parser): help='''if given, override default config file; may be given multiple times''') parser.add_argument('--serial', default="", - help='if given, selects FTDI instance by its serial number, defaults to empty') + help='''if given, selects FTDI instance by its serial number, + defaults to empty''') parser.add_argument('--use-elf', default=False, action='store_true', help='if given, Elf file will be used for loading instead of HEX image') # Options for flashing: @@ -242,11 +243,12 @@ def do_flash_elf(self, **kwargs): server_cmd = (self.openocd_cmd + self.serial + self.cfg_cmd + #added mevalver pre_init_cmd) temp_str = '--cd=' + os.environ.get('ZEPHYR_BASE') #Go to Zephyr base Dir + # Execute First Script in Zephyr Base Dir gdb_cmd = (self.gdb_cmd + self.tui_arg + - [temp_str,'-ex', f'target extended-remote localhost:{self.gdb_port}' , '-batch']) #Execute First Script in Zephyr Base Dir - + [temp_str,'-ex', f'target extended-remote localhost:{self.gdb_port}' , '-batch']) + # Execute Second Script in Build Dir gdb_cmd2 = (self.gdb_cmd + self.tui_arg + - ['-ex', f'target extended-remote localhost:{self.gdb_port}' , '-batch']) #Execute Second Script in Build Dir + ['-ex', f'target extended-remote localhost:{self.gdb_port}' , '-batch']) echo = ['echo'] if self.gdb_init is not None: for i in self.gdb_init: @@ -303,11 +305,13 @@ def do_attach_debug(self, command, **kwargs): temp_str = '--cd=' + os.environ.get('ZEPHYR_BASE') #Go to Zephyr base Dir + # Execute First Script in Zephyr Base Dir gdb_cmd = (self.gdb_cmd + self.tui_arg + - [temp_str,'-ex', f'target extended-remote localhost:{self.gdb_port}' , '-batch']) #Execute First Script in Zephyr Base Dir + [temp_str,'-ex', f'target extended-remote localhost:{self.gdb_port}' , '-batch']) + # Execute Second Script in Build Dir gdb_cmd2 = (self.gdb_cmd + self.tui_arg + - ['-ex', f'target extended-remote :{self.gdb_port}' , '-batch']) #Execute Second Script in Build Dir + ['-ex', f'target extended-remote :{self.gdb_port}' , '-batch']) if self.gdb_init is not None: diff --git a/scripts/west_commands/runners/jlink.py b/scripts/west_commands/runners/jlink.py index 3d5727991e2..535e2bec2b5 100644 --- a/scripts/west_commands/runners/jlink.py +++ b/scripts/west_commands/runners/jlink.py @@ -247,21 +247,25 @@ def do_run(self, command, **kwargs): 'RTOSPlugin_Zephyr') big_endian = self.build_conf.getboolean('CONFIG_BIG_ENDIAN') - server_cmd = ([self.gdbserver] + - ['-select', - ('ip' if (is_ip(self.dev_id) or is_tunnel(self.dev_id)) else 'usb') + - (f'={self.dev_id}' if self.dev_id else ''), - '-port', str(self.gdb_port), - '-if', self.iface, - '-speed', self.speed, - '-device', self.device, - '-silent', - '-endian', 'big' if big_endian else 'little', - '-singlerun'] + - (['-nogui'] if self.supports_nogui else []) + - (['-rtos', plugin_dir] if rtos else []) + - ['-rtttelnetport', str(self.rtt_port)] + - self.tool_opt) + server_cmd = ( + [self.gdbserver] + + [ + '-select', + ('ip' if (is_ip(self.dev_id) or is_tunnel(self.dev_id)) else 'usb') + + (f'={self.dev_id}' if self.dev_id else ''), + ] + + ['-port', str(self.gdb_port)] + + ['-if', self.iface] + + ['-speed', self.speed] + + ['-device', self.device] + + ['-silent'] + + ['-endian' 'big' if big_endian else 'little'] + + ['-singlerun'] + + (['-nogui'] if self.supports_nogui else []) + + (['-rtos', plugin_dir] if rtos else []) + + ['-rtttelnetport', str(self.rtt_port)] + + self.tool_opt + ) if command == 'flash': self.flash(**kwargs) @@ -405,15 +409,21 @@ def flash(self, **kwargs): if self.supports_loader and self.loader: loader_details = "?" + self.loader - cmd = ([self.commander] + - (['-IP', f'{self.dev_id}'] if (is_ip(self.dev_id) or is_tunnel(self.dev_id)) else (['-USB', f'{self.dev_id}'] if self.dev_id else [])) + - (['-nogui', '1'] if self.supports_nogui else []) + - ['-if', self.iface, - '-speed', self.speed, - '-device', self.device + loader_details, - '-CommanderScript', fname] + - (['-nogui', '1'] if self.supports_nogui else []) + - self.tool_opt) + cmd = ( + [self.commander] + + ( + ['-IP', f'{self.dev_id}'] + if (is_ip(self.dev_id) or is_tunnel(self.dev_id)) + else (['-USB', f'{self.dev_id}'] if self.dev_id else []) + ) + + (['-nogui', '1'] if self.supports_nogui else []) + + ['-if', self.iface] + + ['-speed', self.speed] + + ['-device', self.device + loader_details] + + ['-CommanderScript', fname] + + (['-nogui', '1'] if self.supports_nogui else []) + + self.tool_opt + ) self.logger.info(f'Flashing file: {flash_file}') kwargs = {} diff --git a/scripts/west_commands/runners/linkserver.py b/scripts/west_commands/runners/linkserver.py index 9ffcdf63605..9d038157803 100644 --- a/scripts/west_commands/runners/linkserver.py +++ b/scripts/west_commands/runners/linkserver.py @@ -89,12 +89,13 @@ def do_add_parser(cls, parser): {DEFAULT_LINKSERVER_EXE}''') # user may need to override settings. parser.add_argument('--override', required=False, action='append', - help='''configuration overrides as defined bylinkserver. Example: /device/memory/0/location=0xcafecafe''') + help='''configuration overrides as defined bylinkserver. + Example: /device/memory/0/location=0xcafecafe''') @classmethod def do_create(cls, cfg, args): - print("RUNNER - gdb_port = " + str(args.gdb_port) + ", semih port = " + str(args.semihost_port)) + print(f"RUNNER - gdb_port = {args.gdb_port}, semih port = {args.semihost_port}") return LinkServerBinaryRunner(cfg, args.device, args.core, linkserver=args.linkserver, dt_flash=args.dt_flash, @@ -180,8 +181,12 @@ def _build_override_cli(self): return override_cli def flash(self, **kwargs): - - linkserver_cmd = ([self.linkserver, "flash"] + ["--probe", str(self.probe)] + self.override_cli + [self.device]) + linkserver_cmd = ( + [self.linkserver, "flash"] + + ["--probe", str(self.probe)] + + self.override_cli + + [self.device] + ) self.logger.debug(f'LinkServer cmd: + {linkserver_cmd}') if self.erase: diff --git a/scripts/west_commands/runners/mdb.py b/scripts/west_commands/runners/mdb.py index bef14effbdd..412e457df2e 100644 --- a/scripts/west_commands/runners/mdb.py +++ b/scripts/west_commands/runners/mdb.py @@ -36,11 +36,14 @@ def is_flash_cmd_need_exit_immediately(mdb_runner): def smp_core_order(mdb_runner, id): if is_simulation_run(mdb_runner): - # for simulation targets we start cores in direct order (core 0 first, core 1 second, etc...) - # otherwise we face mismatch arcnum (code ID) with ARConnect ID and core ID in instruction traces + # for simulation targets we start cores in direct order + # (core 0 first, core 1 second, etc...) + # otherwise we face mismatch arcnum (code ID) with ARConnect ID + # and core ID in instruction traces return id else: - # for HW targets we want to start the primary core last, to avoid ARConnect initialization interfere + # for HW targets we want to start the primary core last, + # to avoid ARConnect initialization interfere # with secondary cores startup - so we reverse start order return mdb_runner.cores - 1 - id @@ -91,7 +94,7 @@ def mdb_do_run(mdb_runner, command): if i > 0: mdb_sub_cmd += ['-prop=download=2'] mdb_sub_cmd += mdb_basic_options + mdb_target + [mdb_runner.elf_name] mdb_runner.check_call(mdb_sub_cmd, cwd=mdb_runner.build_dir) - mdb_multifiles += ('core{}' if i == 0 else ',core{}').format(smp_core_order(mdb_runner, i)) + mdb_multifiles += f'{"" if i == 0 else ","}core{smp_core_order(mdb_runner, i)}' # to enable multi-core aware mode for use with the MetaWare debugger, # need to set the NSIM_MULTICORE environment variable to a non-zero value diff --git a/scripts/west_commands/runners/nrf_common.py b/scripts/west_commands/runners/nrf_common.py index 37c0a0ab502..cc04ebcbb90 100644 --- a/scripts/west_commands/runners/nrf_common.py +++ b/scripts/west_commands/runners/nrf_common.py @@ -278,8 +278,11 @@ def program_hex(self): # Manage SUIT artifacts. # This logic should be executed only once per build. - # Use sysbuild board qualifiers to select the context, with which the artifacts will be programmed. - if self.build_conf.get('CONFIG_BOARD_QUALIFIERS') == self.sysbuild_conf.get('SB_CONFIG_BOARD_QUALIFIERS'): + # Use sysbuild board qualifiers to select the context, + # with which the artifacts will be programmed. + if self.build_conf.get('CONFIG_BOARD_QUALIFIERS') == self.sysbuild_conf.get( + 'SB_CONFIG_BOARD_QUALIFIERS' + ): mpi_hex_dir = Path(os.path.join(self.cfg.build_dir, 'zephyr')) # Handle Manifest Provisioning Information @@ -287,17 +290,37 @@ def program_hex(self): app_mpi_hex_file = os.fspath( mpi_hex_dir / self.build_conf.get('CONFIG_SUIT_MPI_APP_AREA_PATH')) rad_mpi_hex_file = os.fspath( - mpi_hex_dir / self.build_conf.get('CONFIG_SUIT_MPI_RAD_AREA_PATH')) - self.op_program(app_mpi_hex_file, 'ERASE_NONE', None, defer=True, core='NRFDL_DEVICE_CORE_APPLICATION') - self.op_program(rad_mpi_hex_file, 'ERASE_NONE', None, defer=True, core='NRFDL_DEVICE_CORE_NETWORK') + mpi_hex_dir / self.build_conf.get('CONFIG_SUIT_MPI_RAD_AREA_PATH') + ) + self.op_program( + app_mpi_hex_file, + 'ERASE_NONE', + None, + defer=True, + core='NRFDL_DEVICE_CORE_APPLICATION', + ) + self.op_program( + rad_mpi_hex_file, + 'ERASE_NONE', + None, + defer=True, + core='NRFDL_DEVICE_CORE_NETWORK', + ) # Handle SUIT root manifest if application manifests are not used. - # If an application firmware is built, the root envelope is merged with other application manifests - # as well as the output HEX file. + # If an application firmware is built, the root envelope is merged + # with other application manifests as well as the output HEX file. if not cpuapp and self.sysbuild_conf.get('SB_CONFIG_SUIT_ENVELOPE'): app_root_envelope_hex_file = os.fspath( - mpi_hex_dir / 'suit_installed_envelopes_application_merged.hex') - self.op_program(app_root_envelope_hex_file, 'ERASE_NONE', None, defer=True, core='NRFDL_DEVICE_CORE_APPLICATION') + mpi_hex_dir / 'suit_installed_envelopes_application_merged.hex' + ) + self.op_program( + app_root_envelope_hex_file, + 'ERASE_NONE', + None, + defer=True, + core='NRFDL_DEVICE_CORE_APPLICATION', + ) if cpuapp: core = 'NRFDL_DEVICE_CORE_APPLICATION' diff --git a/scripts/west_commands/runners/openocd.py b/scripts/west_commands/runners/openocd.py index 2569371ff9b..5789cf579a5 100644 --- a/scripts/west_commands/runners/openocd.py +++ b/scripts/west_commands/runners/openocd.py @@ -117,7 +117,8 @@ def do_add_parser(cls, parser): help='''if given, override default config file; may be given multiple times''') parser.add_argument('--serial', default="", - help='if given, selects FTDI instance by its serial number, defaults to empty') + help='''if given, selects FTDI instance by its serial number, + defaults to empty''') parser.add_argument('--use-elf', default=False, action='store_true', help='if given, Elf file will be used for loading instead of HEX image') # Options for flashing: diff --git a/scripts/west_commands/runners/pyocd.py b/scripts/west_commands/runners/pyocd.py index 653276bd69b..d3e3b4d8b8a 100644 --- a/scripts/west_commands/runners/pyocd.py +++ b/scripts/west_commands/runners/pyocd.py @@ -159,7 +159,8 @@ def flash(self, **kwargs): fname = self.elf_name else: raise ValueError( - f'Cannot flash; no hex ({self.hex_name}), bin ({self.bin_name}) or elf ({self.elf_name}) files found. ') + f'Cannot flash; no hex ({self.hex_name}), bin ({self.bin_name}) ' + f'or elf ({self.elf_name}) files found. ') erase_method = 'chip' if self.erase else 'sector' diff --git a/scripts/west_commands/runners/renode-robot.py b/scripts/west_commands/runners/renode-robot.py index 68fe453b8ac..ff80a2289e7 100644 --- a/scripts/west_commands/runners/renode-robot.py +++ b/scripts/west_commands/runners/renode-robot.py @@ -59,5 +59,6 @@ def run_test(self, **kwargs): for suite in self.testsuite: cmd.append(suite) else: - self.logger.error("No Robot testsuite passed to renode-test! Use the `--testsuite` argument to provide one.") + self.logger.error("No Robot testsuite passed to renode-test! " + "Use the `--testsuite` argument to provide one.") subprocess.run(cmd, check=True) diff --git a/scripts/west_commands/runners/renode.py b/scripts/west_commands/runners/renode.py index 8937199420c..598912d8a19 100644 --- a/scripts/west_commands/runners/renode.py +++ b/scripts/west_commands/runners/renode.py @@ -30,7 +30,8 @@ def do_add_parser(cls, parser): parser.add_argument('--renode-arg', metavar='ARG', action='append', - help='additional argument passed to Renode; `--help` will print all possible arguments') + help='''additional argument passed to Renode; + `--help` will print all possible arguments''') parser.add_argument('--renode-command', metavar='COMMAND', action='append', diff --git a/scripts/west_commands/runners/silabs_commander.py b/scripts/west_commands/runners/silabs_commander.py index e9df0d83104..5d0bdd96c1c 100644 --- a/scripts/west_commands/runners/silabs_commander.py +++ b/scripts/west_commands/runners/silabs_commander.py @@ -119,7 +119,8 @@ def do_run(self, command, **kwargs): flash_file = self.bin_name flash_args = ['--binary', '--address', f'0x{flash_addr:x}', flash_file] else: - raise ValueError(f'Cannot flash; no hex ({self.hex_name}) or bin ({self.bin_name}) files found.') + raise ValueError(f'Cannot flash; no hex ({self.hex_name}) or ' + f'bin ({self.bin_name}) files found.') args = [self.commander, 'flash'] + opts + self.tool_opt + flash_args diff --git a/scripts/west_commands/runners/spi_burn.py b/scripts/west_commands/runners/spi_burn.py index 265d1cd29bc..07253710dbb 100644 --- a/scripts/west_commands/runners/spi_burn.py +++ b/scripts/west_commands/runners/spi_burn.py @@ -39,7 +39,8 @@ def do_add_parser(cls, parser): help='ICEman connection establishing timeout in seconds') parser.add_argument('--telink-tools-path', help='path to Telink flash tools') parser.add_argument('--gdb-port', default='1111', help='Port to connect for gdb-client') - parser.add_argument('--gdb-ex', default='', nargs='?', help='Additional gdb commands to run') + parser.add_argument('--gdb-ex', default='', nargs='?', + help='Additional gdb commands to run') @classmethod def do_create(cls, cfg, args): @@ -48,18 +49,23 @@ def do_create(cls, cfg, args): spiburn = f'{args.telink_tools_path}/flash/bin/SPI_burn' iceman = f'{args.telink_tools_path}/ice/ICEman' else: - # If telink_tools_path arg is not specified then pass to tools shall be specified in PATH + # If telink_tools_path arg is not specified then + # pass to tools shall be specified in PATH spiburn = 'SPI_burn' iceman = 'ICEman' # Get flash address offset if args.dt_flash == 'y': build_conf = BuildConfiguration(cfg.build_dir) - address = hex(cls.get_flash_address(args, build_conf) - build_conf['CONFIG_FLASH_BASE_ADDRESS']) + address = hex( + cls.get_flash_address(args, build_conf) - build_conf['CONFIG_FLASH_BASE_ADDRESS'] + ) else: address = args.addr - return SpiBurnBinaryRunner(cfg, address, spiburn, iceman, args.timeout, args.gdb_port, args.gdb_ex, args.erase) + return SpiBurnBinaryRunner( + cfg, address, spiburn, iceman, args.timeout, args.gdb_port, args.gdb_ex, args.erase + ) def do_run(self, command, **kwargs): @@ -127,7 +133,12 @@ def _debug(self): gdb_ex = re.split("(-ex) ", self.gdb_ex)[1::] # Compose gdb command - client_cmd = [self.cfg.gdb, self.cfg.elf_file, '-ex', f'target remote :{self.gdb_port}'] + gdb_ex + client_cmd = [ + self.cfg.gdb, + self.cfg.elf_file, + '-ex', + f'target remote :{self.gdb_port}', + ] + gdb_ex # Run gdb self.run_client(client_cmd) diff --git a/scripts/west_commands/runners/stm32cubeprogrammer.py b/scripts/west_commands/runners/stm32cubeprogrammer.py index 43d9a19adfa..7519530d6f3 100644 --- a/scripts/west_commands/runners/stm32cubeprogrammer.py +++ b/scripts/west_commands/runners/stm32cubeprogrammer.py @@ -53,7 +53,10 @@ def __init__( self._erase = erase if extload: - p = STM32CubeProgrammerBinaryRunner._get_stm32cubeprogrammer_path().parent.resolve() / 'ExternalLoader' + p = ( + STM32CubeProgrammerBinaryRunner._get_stm32cubeprogrammer_path().parent.resolve() + / 'ExternalLoader' + ) self._extload = ['-el', str(p / extload)] else: self._extload = [] From 6fcb5f723fe0921c00bd8c8540d95c2793d820a0 Mon Sep 17 00:00:00 2001 From: Tomasz Chyrowicz Date: Thu, 21 Nov 2024 13:55:23 +0100 Subject: [PATCH 10/10] [nrf fromtree] scripts: nrf_common: Move MPI to sysbuild Kconfig Use sysbuild to build and configure SUIT Manifest Provisioning Information. Signed-off-by: Tomasz Chyrowicz (cherry picked from commit 866e690ddaab8c66b4e045fc8b2b80900094ce59) --- scripts/west_commands/runners/nrf_common.py | 51 +++++++++++---------- 1 file changed, 27 insertions(+), 24 deletions(-) diff --git a/scripts/west_commands/runners/nrf_common.py b/scripts/west_commands/runners/nrf_common.py index cc04ebcbb90..67634132408 100644 --- a/scripts/west_commands/runners/nrf_common.py +++ b/scripts/west_commands/runners/nrf_common.py @@ -286,26 +286,28 @@ def program_hex(self): mpi_hex_dir = Path(os.path.join(self.cfg.build_dir, 'zephyr')) # Handle Manifest Provisioning Information - if self.build_conf.getboolean('CONFIG_SUIT_MPI_GENERATE'): + if self.sysbuild_conf.getboolean('SB_CONFIG_SUIT_MPI_GENERATE'): app_mpi_hex_file = os.fspath( - mpi_hex_dir / self.build_conf.get('CONFIG_SUIT_MPI_APP_AREA_PATH')) + mpi_hex_dir / self.sysbuild_conf.get('SB_CONFIG_SUIT_MPI_APP_AREA_PATH')) rad_mpi_hex_file = os.fspath( - mpi_hex_dir / self.build_conf.get('CONFIG_SUIT_MPI_RAD_AREA_PATH') - ) - self.op_program( - app_mpi_hex_file, - 'ERASE_NONE', - None, - defer=True, - core='NRFDL_DEVICE_CORE_APPLICATION', - ) - self.op_program( - rad_mpi_hex_file, - 'ERASE_NONE', - None, - defer=True, - core='NRFDL_DEVICE_CORE_NETWORK', + mpi_hex_dir / self.sysbuild_conf.get('SB_CONFIG_SUIT_MPI_RAD_AREA_PATH') ) + if os.path.exists(app_mpi_hex_file): + self.op_program( + app_mpi_hex_file, + 'ERASE_NONE', + None, + defer=True, + core='NRFDL_DEVICE_CORE_APPLICATION', + ) + if os.path.exists(rad_mpi_hex_file): + self.op_program( + rad_mpi_hex_file, + 'ERASE_NONE', + None, + defer=True, + core='NRFDL_DEVICE_CORE_NETWORK', + ) # Handle SUIT root manifest if application manifests are not used. # If an application firmware is built, the root envelope is merged @@ -314,13 +316,14 @@ def program_hex(self): app_root_envelope_hex_file = os.fspath( mpi_hex_dir / 'suit_installed_envelopes_application_merged.hex' ) - self.op_program( - app_root_envelope_hex_file, - 'ERASE_NONE', - None, - defer=True, - core='NRFDL_DEVICE_CORE_APPLICATION', - ) + if os.path.exists(app_root_envelope_hex_file): + self.op_program( + app_root_envelope_hex_file, + 'ERASE_NONE', + None, + defer=True, + core='NRFDL_DEVICE_CORE_APPLICATION', + ) if cpuapp: core = 'NRFDL_DEVICE_CORE_APPLICATION'