3434
3535from .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-
4437MIN_PYTHON_VERSION = (3 , 6 )
4538if 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 )
461464def 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