summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoakim Bech <joakim.bech@linaro.org>2016-09-04 14:29:35 +0200
committerJoakim Bech <joakim.bech@linaro.org>2016-09-04 14:30:06 +0200
commit3f99daad5ac8bc91c0f1d4ffef24b4d282ff1053 (patch)
treea0b86e17dddd7e01727841c129e616ac67614419
parentd79bdc3055caa51e7b19643a709dda27285251a6 (diff)
Use argparse instead of getopt
Signed-off-by: Joakim Bech <joakim.bech@linaro.org>
-rwxr-xr-xzep2newt.py105
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)