From 2d2c37496ce4874a8657ccafc2cb87c2383b3d5e Mon Sep 17 00:00:00 2001 From: Sven337 Date: Thu, 24 Oct 2024 18:13:19 +0200 Subject: [PATCH] image_info: add -x option to extract segments to disk --- esptool/__init__.py | 5 +++++ esptool/cmds.py | 7 +++++++ 2 files changed, 12 insertions(+) diff --git a/esptool/__init__.py b/esptool/__init__.py index 7f919bc3f4..9cfbcd92d0 100644 --- a/esptool/__init__.py +++ b/esptool/__init__.py @@ -403,6 +403,11 @@ def add_spi_flash_subparsers( default="1", ) + parser_image_info.add_argument( + '--extract', '-x', action='store_true', + help='Extract image segments to files' + ) + parser_make_image = subparsers.add_parser( "make_image", help="Create an application image from binary files" ) diff --git a/esptool/cmds.py b/esptool/cmds.py index 4948c9890f..b498c6a728 100644 --- a/esptool/cmds.py +++ b/esptool/cmds.py @@ -1011,6 +1011,13 @@ def get_key_from_value(dict, val): segs = seg.get_memory_type(image) seg_name = ",".join(segs) print("Segment {}: {} [{}]".format(idx, seg, seg_name)) + if args.extract: + # Create filename for the extracted segment + filename = f"/tmp/seg{idx}_len0x{len(seg.data):x}_addr0x{seg.addr:x}" + with open(filename, "wb") as f: + f.write(seg.data) + print(f" Extracted to: {filename}") + calc_checksum = image.calculate_checksum() print( "Checksum: {:02x} ({})".format(