Damien George | 075d597 | 2014-11-27 20:30:33 +0000 | [diff] [blame] | 1 | import sys |
Paul Sokolovsky | a621333 | 2016-08-04 00:19:09 +0300 | [diff] [blame] | 2 | import struct |
Paul Sokolovsky | bf47b71 | 2016-08-04 00:21:05 +0300 | [diff] [blame] | 3 | import hashlib |
Damien George | 075d597 | 2014-11-27 20:30:33 +0000 | [diff] [blame] | 4 | |
Paul Sokolovsky | 8d2bcaf | 2016-04-03 15:40:53 +0300 | [diff] [blame] | 5 | SEGS_MAX_SIZE = 0x9000 |
| 6 | |
Damien George | 075d597 | 2014-11-27 20:30:33 +0000 | [diff] [blame] | 7 | assert len(sys.argv) == 4 |
| 8 | |
Paul Sokolovsky | bf47b71 | 2016-08-04 00:21:05 +0300 | [diff] [blame] | 9 | md5 = hashlib.md5() |
| 10 | |
Damien George | 075d597 | 2014-11-27 20:30:33 +0000 | [diff] [blame] | 11 | with open(sys.argv[3], 'wb') as fout: |
| 12 | |
| 13 | with open(sys.argv[1], 'rb') as f: |
| 14 | data_flash = f.read() |
| 15 | fout.write(data_flash) |
Paul Sokolovsky | bf47b71 | 2016-08-04 00:21:05 +0300 | [diff] [blame] | 16 | # First 4 bytes include flash size, etc. which may be changed |
| 17 | # by esptool.py, etc. |
| 18 | md5.update(data_flash[4:]) |
Damien George | 075d597 | 2014-11-27 20:30:33 +0000 | [diff] [blame] | 19 | print('flash ', len(data_flash)) |
| 20 | |
Damien George | 075d597 | 2014-11-27 20:30:33 +0000 | [diff] [blame] | 21 | with open(sys.argv[2], 'rb') as f: |
| 22 | data_rom = f.read() |
Paul Sokolovsky | a621333 | 2016-08-04 00:19:09 +0300 | [diff] [blame] | 23 | |
| 24 | pad = b'\xff' * (SEGS_MAX_SIZE - len(data_flash)) |
| 25 | assert len(pad) >= 4 |
| 26 | fout.write(pad[:-4]) |
Paul Sokolovsky | bf47b71 | 2016-08-04 00:21:05 +0300 | [diff] [blame] | 27 | md5.update(pad[:-4]) |
| 28 | len_data = struct.pack("I", SEGS_MAX_SIZE + len(data_rom)) |
| 29 | fout.write(len_data) |
| 30 | md5.update(len_data) |
Paul Sokolovsky | a621333 | 2016-08-04 00:19:09 +0300 | [diff] [blame] | 31 | print('padding ', len(pad)) |
| 32 | |
| 33 | fout.write(data_rom) |
Paul Sokolovsky | bf47b71 | 2016-08-04 00:21:05 +0300 | [diff] [blame] | 34 | md5.update(data_rom) |
Paul Sokolovsky | a621333 | 2016-08-04 00:19:09 +0300 | [diff] [blame] | 35 | print('irom0text', len(data_rom)) |
Damien George | 075d597 | 2014-11-27 20:30:33 +0000 | [diff] [blame] | 36 | |
Paul Sokolovsky | bf47b71 | 2016-08-04 00:21:05 +0300 | [diff] [blame] | 37 | fout.write(md5.digest()) |
| 38 | |
Paul Sokolovsky | 8d2bcaf | 2016-04-03 15:40:53 +0300 | [diff] [blame] | 39 | print('total ', SEGS_MAX_SIZE + len(data_rom)) |
Paul Sokolovsky | bf47b71 | 2016-08-04 00:21:05 +0300 | [diff] [blame] | 40 | print('md5 ', md5.hexdigest()) |