Skip to content

Commit 05b5091

Browse files
committed
scripts: imgtool: Compression of no header-padded images
This fixes issues when trying to compress images with no header padding requested. Signed-off-by: Michal Kozikowski <[email protected]>
1 parent ef7d68b commit 05b5091

File tree

2 files changed

+17
-10
lines changed

2 files changed

+17
-10
lines changed

scripts/imgtool/image.py

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -348,7 +348,6 @@ def load(self, path):
348348
self.payload = copy.copy(self.infile_data)
349349
except FileNotFoundError:
350350
raise click.UsageError("Input file not found")
351-
self.image_size = len(self.payload)
352351

353352
# Add the image header if needed.
354353
if self.pad_header and self.header_size > 0:
@@ -358,6 +357,8 @@ def load(self, path):
358357
self.payload = bytes([self.erased_val] * self.header_size) + \
359358
self.payload
360359

360+
self.image_size = len(self.payload) - self.header_size
361+
361362
self.check_header()
362363

363364
def load_compressed(self, data, compression_header):
@@ -366,12 +367,16 @@ def load_compressed(self, data, compression_header):
366367
self.image_size = len(self.payload)
367368

368369
# Add the image header if needed.
369-
if self.pad_header and self.header_size > 0:
370-
if self.base_addr:
371-
# Adjust base_addr for new header
372-
self.base_addr -= self.header_size
373-
self.payload = bytes([self.erased_val] * self.header_size) + \
374-
self.payload
370+
if self.header_size > 0:
371+
if self.pad_header:
372+
if self.base_addr:
373+
# Adjust base_addr for new header
374+
self.base_addr -= self.header_size
375+
self.payload = bytes([self.erased_val] * self.header_size) + \
376+
self.payload
377+
else:
378+
self.payload = bytes([0] * self.header_size) + \
379+
self.payload
375380

376381
self.check_header()
377382

scripts/imgtool/main.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -542,9 +542,11 @@ def sign(key, public_key_format, align, version, pad_sig, header_size,
542542
]
543543
if compression == "lzma2armthumb":
544544
compression_filters.insert(0, {"id":lzma.FILTER_ARMTHUMB})
545-
compressed_data = lzma.compress(img.get_infile_data(),filters=compression_filters,
546-
format=lzma.FORMAT_RAW)
547-
uncompressed_size = len(img.get_infile_data())
545+
546+
infile_offset = 0 if pad_header else header_size
547+
compressed_data = lzma.compress(img.get_infile_data()[infile_offset:],
548+
filters=compression_filters, format=lzma.FORMAT_RAW)
549+
uncompressed_size = len(img.get_infile_data()[infile_offset:])
548550
compressed_size = len(compressed_data)
549551
print(f"compressed image size: {compressed_size} bytes")
550552
print(f"original image size: {uncompressed_size} bytes")

0 commit comments

Comments
 (0)