From 9a09653330f2af11149b83e1df42a05a6cb018dc Mon Sep 17 00:00:00 2001 From: Vegard Storheil Eriksen Date: Fri, 11 Oct 2013 21:19:08 +0200 Subject: Added bootloader. --- dfugen.py | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100755 dfugen.py (limited to 'dfugen.py') diff --git a/dfugen.py b/dfugen.py new file mode 100755 index 0000000..dc93d1d --- /dev/null +++ b/dfugen.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python + +import sys, struct, zlib +from elftools.elf.elffile import ELFFile + +infile = sys.argv[1] +outfile = sys.argv[2] + +e = ELFFile(open(infile)) + +buf = '' + +for segment in sorted(e.iter_segments(), key = lambda x: x.header.p_paddr): + if segment.header.p_type != 'PT_LOAD': + continue + + data = segment.data() + lma = segment.header.p_paddr + + # Workaround for LD aligning segments to a larger boundary than 8k. + if lma == 0x8000000: + lma += 0x2000 + data = data[0x2000:] + + # Add padding if necessary. + buf += '\0' * (lma - 0x8002000 - len(buf)) + + buf += data + +# Align to 64B +if len(buf) & (64 - 1): + buf += '\0' * (64 - (len(buf) & (64 - 1))) + +# Add DFU suffix +buf += struct.pack('