freemyipod r524 - Code Review

Jump to: navigation, search
Repository:freemyipod
Revision:r523‎ | r524 | r525 >
Date:02:35, 6 February 2011
Author:theseven
Status:new
Tags:
Comment:
Boot configuration utilities: Adapt to emCORE
Modified paths:
  • /emcore/trunk/tools/emcorebootcfg.py (modified) (history)
  • /emcore/trunk/tools/emcoreembedapp.py (modified) (history)
  • /emcore/trunk/tools/libemcorebootcfg.py (modified) (history)

Diff [purge]

Index: emcore/trunk/tools/emcoreembedapp.py
@@ -26,10 +26,6 @@
2727 from optparse import *
2828
2929 parser = OptionParser("usage: %prog [options] <emcorebin> <emcoreapp> <outfile>")
30 -parser.add_option("--run-from", type = "int", metavar = "ADDR",
31 - help = "Ensures that the app is executed from memory address ADDR")
32 -parser.add_option("--compressed", action = "store_true", default = False,
33 - help = "Specify this if the executable is compressed")
3430 (options, args) = parser.parse_args()
3531 if len(args) != 3: parser.error("incorrect number of arguments")
3632
@@ -41,16 +37,8 @@
4238 app = file.read()
4339 file.close()
4440
45 -config = {"reset": True, "trymmap": True}
46 -config["mmapaddr"] = 0x08000000 + len(data)
47 -config["mmapsize"] = len(app)
48 -if options.compressed: config["mmapcomp"] = True
49 -if options.run_from:
50 - config["mmapcopy"] = True
51 - config["mmapdest"] = options.run_from
 41+data = libemcorebootcfg.configure(data, (1, app, None, None))
5242
53 -data = libemcorebootcfg.configure(data, **config)
54 -
5543 file = open(args[2], "wb")
56 -file.write(data + app)
 44+file.write(data)
5745 file.close()
Index: emcore/trunk/tools/emcorebootcfg.py
@@ -25,74 +25,16 @@
2626 import libemcorebootcfg
2727 from optparse import *
2828
29 -parser = OptionParser("usage: %prog [options] <infile> <outfile>")
30 -filegroup = OptionGroup(parser, "Booting from a file",
31 - "Use these options to configure emCORE to try "
32 - "booting from a file on a FAT32 partition")
33 -filegroup.add_option("--file", help = "Boot from FILE")
34 -filegroup.add_option("--file-compressed", action = "store_true", default = False,
35 - help = "Specify this if FILE is compressed")
36 -filegroup.add_option("--file-run-from", type = "int", metavar = "ADDR",
37 - help = "Make sure FILE is executed from memory address ADDR")
38 -parser.add_option_group(filegroup)
39 -flashgroup = OptionGroup(parser, "Booting from a boot flash image",
40 - "Use these options to configure emCORE to try "
41 - "booting from an image located in the boot flash")
42 -flashgroup.add_option("--flash", metavar = "NAME", help = "Boot from flash image NAME")
43 -flashgroup.add_option("--flash-compressed", action = "store_true", default = False,
44 - help = "Specify this if the image is compressed")
45 -flashgroup.add_option("--flash-run-from", type = "int", metavar = "ADDR",
46 - help = "Make sure the image is executed from memory address ADDR")
47 -parser.add_option_group(flashgroup)
48 -mmapgroup = OptionGroup(parser, "Booting from a memory region",
49 - "Use these options to configure emCORE to try "
50 - "booting from a memory location, such as an embedded "
51 - "app or an app located on a memory-mapped flash")
52 -mmapgroup.add_option("--mmap-addr", metavar = "ADDR", help = "Boot from memory location ADDR")
53 -mmapgroup.add_option("--mmap-size", metavar = "SIZE",
54 - help = "Specifies the size of the executable at ADDR in bytes")
55 -mmapgroup.add_option("--mmap-compressed", action = "store_true", default = False,
56 - help = "Specify this if the executable is compressed")
57 -mmapgroup.add_option("--mmap-run-from", type = "int", metavar = "COPYADDR",
58 - help = "Copy the executable to COPYADDR before executing it")
59 -parser.add_option_group(mmapgroup)
 29+parser = OptionParser("usage: %prog <infile> <outfile> <configstring>")
6030 (options, args) = parser.parse_args()
61 -if len(args) != 2: parser.error("incorrect number of arguments")
 31+if len(args) != 3: parser.error("incorrect number of arguments")
6232
63 -if (options.mmap_addr and not options.mmap_size) or \
64 - (not options.mmap_addr and options.mmap_size):
65 - parser.error("either none or both of --mmap-addr and --map-size must be specified")
66 -
6733 file = open(args[0], "rb")
6834 data = file.read()
6935 file.close()
7036
71 -config = {"reset": True}
72 -if options.file:
73 - config["tryfile"] = True
74 - config["filename"] = options.file
75 - if options.file_compressed: config["filecomp"] = True
76 - if options.file_run_from:
77 - config["filecopy"] = True
78 - config["filedest"] = options.file_run_from
79 -if options.flash:
80 - config["tryflash"] = True
81 - config["flashname"] = options.flash
82 - if options.flash_compressed: config["flashcomp"] = True
83 - if options.flash_run_from:
84 - config["flashcopy"] = True
85 - config["flashdest"] = options.flash_run_from
86 -if options.mmap_addr:
87 - config["trymmap"] = True
88 - config["mmapaddr"] = options.mmap_addr
89 - config["mmapsize"] = options.mmap_size
90 - if options.mmap_compressed: config["mmapcomp"] = True
91 - if options.mmap_run_from:
92 - config["mmapcopy"] = True
93 - config["mmapdest"] = options.mmap_run_from
 37+data = libemcorebootcfg.configure(data, eval(args[2]))
9438
95 -data = libemcorebootcfg.configure(data, **config)
96 -
9739 file = open(args[1], "wb")
9840 file.write(data)
9941 file.close()
Index: emcore/trunk/tools/libemcorebootcfg.py
@@ -23,57 +23,33 @@
2424
2525 import struct
2626
27 -def configure(binary, **args):
28 - start = binary.index("emBIboot", 0, 512)
29 - version = struct.unpack("<I", binary[start + 8 : start + 12])[0]
30 - if version != 0: raise ValueError("Unknown boot configuration data version")
31 - (tryfile, filename, fileflags, filedest,
32 - tryflash, flashname, flashflags, flashdest,
33 - trymmap, mmapaddr, mmapsize, mmapflags, mmapdest) \
34 - = struct.unpack("<I256sIII8sIIIIIII", binary[start + 12 : start + 320])
35 - if "reset" in args and args["reset"]:
36 - tryfile = 0
37 - filename = "\0" * 256
38 - fileflags = 0
39 - filedest = 0
40 - tryflash = 0
41 - flashname = "\0" * 8
42 - flashflags = 0
43 - flashdest = 0
44 - trymmap = 0
45 - mmapaddr = 0
46 - mmapsize = 0
47 - mmapflags = 0
48 - mmapdest = 0
49 - if "tryfile" in args: tryfile = 1 if args["tryfile"] else 0
50 - if "filename" in args: filename = args["filename"].ljust(256, "\0")
51 - if "filecomp" in args:
52 - if args["filecomp"]: fileflags = fileflags | 1
53 - else: fileflags = fileflags & ~1
54 - if "filecopy" in args:
55 - if args["filecopy"]: fileflags = fileflags | 2
56 - else: fileflags = fileflags & ~2
57 - if "filedest" in args: filedest = args["filedest"]
58 - if "tryflash" in args: tryflash = 1 if args["tryflash"] else 0
59 - if "flashname" in args: flashname = args["flashname"].ljust(8)
60 - if "flashcomp" in args:
61 - if args["flashcomp"]: flashflags = flashflags | 1
62 - else: flashflags = flashflags & ~1
63 - if "flashcopy" in args:
64 - if args["flashcopy"]: flashflags = flashflags | 2
65 - else: flashflags = flashflags & ~2
66 - if "flashdest" in args: flashdest = args["flashdest"]
67 - if "trymmap" in args: trymmap = 1 if args["trymmap"] else 0
68 - if "mmapaddr" in args: mmapaddr = args["mmapaddr"]
69 - if "mmapsize" in args: mmapsize = args["mmapsize"]
70 - if "mmapcomp" in args:
71 - if args["mmapcomp"]: mmapflags = mmapflags | 1
72 - else: mmapflags = mmapflags & ~1
73 - if "mmapcopy" in args:
74 - if args["mmapcopy"]: mmapflags = mmapflags | 2
75 - else: mmapflags = mmapflags & ~2
76 - if "mmapdest" in args: mmapdest = args["mmapdest"]
77 - data = struct.pack("<I256sIII8sIIIIIII", tryfile, filename, fileflags, filedest,
78 - tryflash, flashname, flashflags, flashdest,
79 - trymmap, mmapaddr, mmapsize, mmapflags, mmapdest)
80 - return binary[:start + 12] + data + binary[start + 320:]
 27+def encode(addr, option):
 28+ if option == None: return ""
 29+ addr = addr + 16
 30+ data1 = encode(addr, option[2])
 31+ if len(data1) == 0: addr1 = 0
 32+ else: addr1 = addr
 33+ addr = addr + addr1
 34+ data2 = encode(addr, option[3])
 35+ if len(data2) == 0: addr2 = 0
 36+ else: addr2 = addr
 37+ addr = addr + addr2
 38+ if type(option[1]).__name__ == "str":
 39+ data = option[1] + '\0'
 40+ data = data.ljust((len(data) + 3) & ~3, '\0')
 41+ else:
 42+ data = ""
 43+ addr = option[1]
 44+ return struct.pack("<IIII", addr1, addr2, option[0], addr) + data1 + data2 + data
 45+
 46+
 47+def configure(binary, options):
 48+ fileaddr = binary.index("emCOboot")
 49+ version = struct.unpack("<I", binary[fileaddr + 8 : fileaddr + 12])[0]
 50+ if version != 1: raise ValueError("Unknown boot configuration data version")
 51+ memaddr = struct.unpack("<I", binary[fileaddr + 12 : fileaddr + 16])[0]
 52+ data = encode(memaddr + 24, options)
 53+ if len(data) == 0: addr = 0
 54+ else: addr = memaddr + 24
 55+ return binary[:fileaddr + 16] + struct.pack("<II", len(data) + 24, addr) + data
 56+
\ No newline at end of file