imgtool: add option for confirming a padded image
Add imgtool command line option for confirming (setting image_ok =
0x01) in a padded image.
Fixes: #664
Signed-off-by: Henrik Brix Andersen <hebad@vestas.com>
diff --git a/scripts/imgtool/image.py b/scripts/imgtool/image.py
index adba2b1..9701e21 100644
--- a/scripts/imgtool/image.py
+++ b/scripts/imgtool/image.py
@@ -117,14 +117,15 @@
class Image():
def __init__(self, version=None, header_size=IMAGE_HEADER_SIZE,
- pad_header=False, pad=False, align=1, slot_size=0,
- max_sectors=DEFAULT_MAX_SECTORS, overwrite_only=False,
- endian="little", load_addr=0, erased_val=None,
- save_enctlv=False, security_counter=None):
+ pad_header=False, pad=False, confirm=False, align=1,
+ slot_size=0, max_sectors=DEFAULT_MAX_SECTORS,
+ overwrite_only=False, endian="little", load_addr=0,
+ erased_val=None, save_enctlv=False, security_counter=None):
self.version = version or versmod.decode_version("0")
self.header_size = header_size
self.pad_header = pad_header
self.pad = pad
+ self.confirm = confirm
self.align = align
self.slot_size = slot_size
self.max_sectors = max_sectors
@@ -432,8 +433,10 @@
self.overwrite_only, self.enckey,
self.save_enctlv, self.enctlv_len)
padding = size - (len(self.payload) + tsize)
- pbytes = bytes([self.erased_val] * padding)
- pbytes += bytes([self.erased_val] * (tsize - len(boot_magic)))
+ pbytes = bytearray([self.erased_val] * padding)
+ pbytes += bytearray([self.erased_val] * (tsize - len(boot_magic)))
+ if self.confirm and not self.overwrite_only:
+ pbytes[-MAX_ALIGN] = 0x01 # image_ok = 0x01
pbytes += boot_magic
self.payload += pbytes
diff --git a/scripts/imgtool/main.py b/scripts/imgtool/main.py
index 2c7cc2a..436f3be 100755
--- a/scripts/imgtool/main.py
+++ b/scripts/imgtool/main.py
@@ -233,6 +233,8 @@
@click.option('-M', '--max-sectors', type=int,
help='When padding allow for this amount of sectors (defaults '
'to 128)')
+@click.option('--confirm', default=False, is_flag=True,
+ help='When padding the image, mark it as confirmed')
@click.option('--pad', default=False, is_flag=True,
help='Pad image to --slot-size bytes, adding trailer magic')
@click.option('-S', '--slot-size', type=BasedIntParamType(), required=True,
@@ -255,15 +257,15 @@
@click.command(help='''Create a signed or unsigned image\n
INFILE and OUTFILE are parsed as Intel HEX if the params have
.hex extension, otherwise binary format is used''')
-def sign(key, align, version, header_size, pad_header, slot_size, pad,
+def sign(key, align, version, header_size, pad_header, slot_size, pad, confirm,
max_sectors, overwrite_only, endian, encrypt, infile, outfile,
dependencies, load_addr, hex_addr, erased_val, save_enctlv,
security_counter):
img = image.Image(version=decode_version(version), header_size=header_size,
- pad_header=pad_header, pad=pad, align=int(align),
- slot_size=slot_size, max_sectors=max_sectors,
- overwrite_only=overwrite_only, endian=endian,
- load_addr=load_addr, erased_val=erased_val,
+ pad_header=pad_header, pad=pad, confirm=confirm,
+ align=int(align), slot_size=slot_size,
+ max_sectors=max_sectors, overwrite_only=overwrite_only,
+ endian=endian, load_addr=load_addr, erased_val=erased_val,
save_enctlv=save_enctlv,
security_counter=security_counter)
img.load(infile)