diff options
author | Joakim Bech <joakim.bech@linaro.org> | 2016-09-04 14:29:35 +0200 |
---|---|---|
committer | Joakim Bech <joakim.bech@linaro.org> | 2016-09-04 14:30:06 +0200 |
commit | 3f99daad5ac8bc91c0f1d4ffef24b4d282ff1053 (patch) | |
tree | a0b86e17dddd7e01727841c129e616ac67614419 | |
parent | d79bdc3055caa51e7b19643a709dda27285251a6 (diff) |
Use argparse instead of getopt
Signed-off-by: Joakim Bech <joakim.bech@linaro.org>
-rwxr-xr-x | zep2newt.py | 105 |
1 files changed, 55 insertions, 50 deletions
diff --git a/zep2newt.py b/zep2newt.py index 7ed1ada..dc75068 100755 --- a/zep2newt.py +++ b/zep2newt.py @@ -1,15 +1,56 @@ #!/usr/bin/python2 -import getopt import hashlib import mmap import os import struct import sys +from argparse import ArgumentParser from newtimg import * from ctypes import * DEBUG = 1 +def get_args(): + parser = ArgumentParser(description='Script to create images on a format \ + that Mynewts bootloader expects') + + parser.add_argument('--bin', required=True, dest='binary_file', \ + help='Name of *.bin file (input)') + + parser.add_argument('--key', required=False, dest='key_file', \ + help='Name of private key file (*.pem format)') + + parser.add_argument('--out', required=False, dest='image_file', \ + default='zephyr.img.bin', \ + help='Name of *.img file (output)') + + parser.add_argument('--sig', required=False, dest='sig_type', default=None, \ + help='Type of signature <RSA|EC> (not implemented)') + + parser.add_argument('--off', required=False, dest='flash_offs_addr', \ + default='0x8000', \ + help='Offset for the binary in flash (at what address \ + should it be flashed?)') + + parser.add_argument('--vtoff', required=False, dest='vtable_offs', \ + default='0x80', \ + help='Offset to vector table') + + parser.add_argument('--bit', required=False, \ + help='Flash boot image trailer magic') + + parser.add_argument('--verbose', required=False, action="store_true", \ + default=False, \ + help='Enable verbose mode') + + parser.add_argument('--version', action='version', version='%(prog)s 1.0') + + parser.add_argument('-f', required=False, \ + help='Flash using JLinkExe') + + return parser.parse_args() + + def create_header(binary_file): # Start by getting the correct size for the image image_size = os.path.getsize(binary_file) # TODO, handle zephyr.bin @@ -126,59 +167,30 @@ def create_jlink_clear_bit_script(bit_file, bitoffset="0x7bff8"): print("\nTo flash Boot Image Trailer for nrf52 run:") print(" $ JLinkExe -CommanderScript flash_clear_bit.jlink") -def usage(): - print(os.path.basename(sys.argv[0]) + " -b <zephyr.bin> -i <zephyr.img> -o <flash_base_offset> -f") - print(" -b Binary INPUT, the raw binary (zephyr.bin)") - print(" -i IMG OUTPUT, on a format mynewt's bootloader expect") - print(" -o offset in flash (for jlink flash script)") - print(" -f Flash IMG onto the device") - def main(argv): + args = get_args() binary_file = "zephyr.bin" image_file = "zephyr.img.bin" offset = "0x8000" try_flash = False erase = False - try: - opts, args = getopt.getopt(argv, 'b:i:o:feh', ['bin=', 'img=', 'flash_base_offset=', - 'erase', 'flash', 'help']) - except getopt.GetoptError: - usage() - sys.exit(2) - - for opt, arg in opts: - if opt in ('-h', '--help'): - usage() - sys.exit(2) - elif opt in ('-b', '--bin'): - binary_file = arg - elif opt in ('-e', '--erase'): - erase = True - elif opt in ('-f', '--flash'): - try_flash = True - elif opt in ('-i', '--img'): - image_file = arg - elif opt in ('-o', '--flash_base_offset'): - offset = arg - else: - usage() - sys.exit(2) - - if DEBUG: - print("Input (bin): %s" % binary_file) - print("Output (img): %s" % image_file) - print("Flash base offset: %s" % offset) + if args.verbose: + print("Arguments: ") + print(args) + print("\n") + global DEBUG + DEBUG = True - hdr = create_header(binary_file) - write_partial_img(binary_file, image_file, hdr) + hdr = create_header(args.binary_file) + write_partial_img(args.binary_file, args.image_file, hdr) - digest = calculate_hash(image_file) + digest = calculate_hash(args.image_file) print("Hash of intermediate image: %s" % digest) - append_hash(image_file, digest) + append_hash(args.image_file, digest) - create_jlink_script(image_file, offset, erase) + create_jlink_script(args.image_file, args.flash_offs_addr, erase) curdir = os.path.dirname(sys.argv[0]) create_jlink_bit_script(curdir + "/boot_image_trailer.bin") create_jlink_clear_bit_script(curdir + "/empty_boot_image_trailer.bin") @@ -188,11 +200,4 @@ def main(argv): if __name__ == "__main__": - if sys.argv[1]: - try: - main(sys.argv[1:]) - except KeyboardInterrupt: - sys.exit(0) - else: - print("[*] Not enough arguments (!) ") - print("[*] Usage : patch_mynewt_img.py") + main(sys.argv) |