#!/usr/bin/env python3 # Beagle to EDL Loader (c) B.Kerler 2021 import os,sys from struct import unpack def main(): if len(sys.argv)<2: print("Usage: ./beagle_to_loader.py [beagle_log.bin] [loader.elf]") sys.exit(0) with open(sys.argv[1],"rb") as rf: data=rf.read() outdata=bytearray() i=0 seq=b"\x03\x00\x00\x00\x14\x00\x00\x00\x0D\x00\x00\x00" with open(sys.argv[2], "wb") as wf: while True: idx=data.find(seq) if idx==-1: if i==0: seq=b"\x12\x00\x00\x00\x20\x00\x00\x00\x0D\x00\x00\x00\x00\x00\x00\x00" i+=1 continue else: break else: cmd=unpack("<I", data[idx:idx+4])[0] if cmd==0x03: cmd,tlen,slen,offset,length=unpack("<IIIII",data[idx:idx+0x14]) elif cmd==0x12: cmd, tlen, slen, offset, length = unpack("<IIQQQ", data[idx:idx + 0x20]) data = data[idx + 0x14:] print("Offset : %08X Length: %08X" %(offset,length)) while len(outdata)<offset+length: outdata.append(0xFF) outdata[offset:offset+length]=data[:length] i+=1 wf.write(outdata) print("Done.") if __name__=="__main__": main()