Commit 9e0bebc8 authored by Michal Kozikowski's avatar Michal Kozikowski Committed by Andrzej Puzdrowski
Browse files

scripts: imgtool: Compression of no header-padded images



This fixes issues when trying to compress images with no
header padding requested.

Signed-off-by: default avatarMichal Kozikowski <michal.kozikowski@nordicsemi.no>
parent 85558b73
Loading
Loading
Loading
Loading
+15 −9
Original line number Diff line number Diff line
@@ -348,7 +348,6 @@ class Image:
                    self.payload = copy.copy(self.infile_data)
        except FileNotFoundError:
            raise click.UsageError("Input file not found")
        self.image_size = len(self.payload)

        # Add the image header if needed.
        if self.pad_header and self.header_size > 0:
@@ -358,6 +357,8 @@ class Image:
            self.payload = bytes([self.erased_val] * self.header_size) + \
                self.payload

        self.image_size = len(self.payload) - self.header_size

        self.check_header()

    def load_compressed(self, data, compression_header):
@@ -366,14 +367,19 @@ class Image:
        self.image_size = len(self.payload)

        # Add the image header if needed.
        if self.pad_header and self.header_size > 0:
        if self.header_size > 0:
            if self.pad_header:
                if self.base_addr:
                    # Adjust base_addr for new header
                    self.base_addr -= self.header_size
                self.payload = bytes([self.erased_val] * self.header_size) + \
                    self.payload

        self.check_header()
            else:
                # Fill header padding with zeros to align with what is expected
                # for uncompressed images when no pad_header is requested
                # (see self.check_header())
                self.payload = bytes([0] * self.header_size) + \
                    self.payload

    def save(self, path, hex_addr=None):
        """Save an image from a given file"""
+5 −3
Original line number Diff line number Diff line
@@ -542,9 +542,11 @@ def sign(key, public_key_format, align, version, pad_sig, header_size,
        ]
        if compression == "lzma2armthumb":
            compression_filters.insert(0, {"id":lzma.FILTER_ARMTHUMB})
        compressed_data = lzma.compress(img.get_infile_data(),filters=compression_filters,
            format=lzma.FORMAT_RAW)
        uncompressed_size = len(img.get_infile_data())

        infile_offset = 0 if pad_header else header_size
        compressed_data = lzma.compress(img.get_infile_data()[infile_offset:],
            filters=compression_filters, format=lzma.FORMAT_RAW)
        uncompressed_size = len(img.get_infile_data()[infile_offset:])
        compressed_size = len(compressed_data)
        print(f"compressed image size: {compressed_size} bytes")
        print(f"original image size: {uncompressed_size} bytes")