Skip to content

Commit e6b471a

Browse files
adsz-nordicnvlsianpu
authored andcommitted
[nrf noup] scripts: imgtool: Add adjustable LZMA parameters
Add parametrs to imgtool sign command. This allows to adjust LZMA compression parameters. Default values are kept unchanged. Ref: NCSDK-38020 Signed-off-by: Adam Szczygieł <adam.szczygiel@nordicsemi.no>
1 parent bdd7397 commit e6b471a

1 file changed

Lines changed: 17 additions & 13 deletions

File tree

scripts/imgtool/main.py

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,6 @@
3434

3535
from .keys import ECDSAUsageError, Ed25519UsageError, RSAUsageError, X25519UsageError
3636

37-
comp_default_dictsize=131072
38-
comp_default_pb=2
39-
comp_default_lc=3
40-
comp_default_lp=1
41-
comp_default_preset=9
42-
43-
4437
MIN_PYTHON_VERSION = (3, 6)
4538
if sys.version_info < MIN_PYTHON_VERSION:
4639
sys.exit("Python {}.{} or newer is required by imgtool.".format(*MIN_PYTHON_VERSION))
@@ -458,13 +451,24 @@ def convert(self, value, param, ctx):
458451
help='Unique image class identifier, format: (<raw_uuid>|<image_class_name>)')
459452
@click.option('--manifest', default=None, required=False,
460453
help='Path to the update manifest file')
454+
@click.option('--compression-lzma-dictsize', type=int, default=128*1024,
455+
help='LZMA - dictionary size, in bytes', show_default=True)
456+
@click.option('--compression-lzma-pb', type=int, default=2,
457+
help='LZMA - number of position bits', show_default=True)
458+
@click.option('--compression-lzma-lc', type=int, default=3,
459+
help='LZMA - number of literal context bits', show_default=True)
460+
@click.option('--compression-lzma-lp', type=int, default=1,
461+
help='LZMA - number of literal position bits', show_default=True)
462+
@click.option('--compression-lzma-preset', type=int, default=9,
463+
help='LZMA - compression level preset', show_default=True)
461464
def sign(key, public_key_format, align, version, pad_sig, header_size,
462465
pad_header, slot_size, pad, confirm, max_sectors, overwrite_only,
463466
endian, encrypt_keylen, encrypt, compression, infile, outfile,
464467
dependencies, load_addr, hex_addr, erased_val, save_enctlv,
465468
security_counter, boot_record, custom_tlv, custom_tlv_file, rom_fixed, max_align,
466469
clear, fix_sig, fix_sig_pubkey, sig_out, user_sha, hmac_sha, is_pure,
467-
vector_to_sign, non_bootable, vid, cid, manifest):
470+
vector_to_sign, non_bootable, vid, cid, manifest,
471+
compression_lzma_dictsize, compression_lzma_pb, compression_lzma_lc, compression_lzma_lp, compression_lzma_preset):
468472

469473
if confirm:
470474
# Confirmed but non-padded images don't make much sense, because
@@ -555,9 +559,9 @@ def sign(key, public_key_format, align, version, pad_sig, header_size,
555559
security_counter=security_counter, max_align=max_align,
556560
vid=vid, cid=cid, manifest=manifest)
557561
compression_filters = [
558-
{"id": lzma.FILTER_LZMA2, "preset": comp_default_preset,
559-
"dict_size": comp_default_dictsize, "lp": comp_default_lp,
560-
"lc": comp_default_lc}
562+
{"id": lzma.FILTER_LZMA2, "preset": compression_lzma_preset,
563+
"dict_size": compression_lzma_dictsize, "lp": compression_lzma_lp,
564+
"lc": compression_lzma_lc}
561565
]
562566
if compression == "lzma2armthumb":
563567
compression_filters.insert(0, {"id":lzma.FILTER_ARMTHUMB})
@@ -579,8 +583,8 @@ def sign(key, public_key_format, align, version, pad_sig, header_size,
579583
compression_tlvs_size += len(compression_tlvs["DECOMP_SIGNATURE"])
580584
if (compressed_size + compression_tlvs_size) < uncompressed_size:
581585
compression_header = create_lzma2_header(
582-
dictsize = comp_default_dictsize, pb = comp_default_pb,
583-
lc = comp_default_lc, lp = comp_default_lp)
586+
dictsize = compression_lzma_dictsize, pb = compression_lzma_pb,
587+
lc = compression_lzma_lc, lp = compression_lzma_lp)
584588
compressed_img.load_compressed(compressed_data, compression_header)
585589
compressed_img.base_addr = img.base_addr
586590
keep_comp_size = False

0 commit comments

Comments
 (0)