blob: 091854fa4d8afc05e77d4c5f406c115025c2fa40 [file] [log] [blame]
Damien George075d5972014-11-27 20:30:33 +00001import sys
Paul Sokolovskya6213332016-08-04 00:19:09 +03002import struct
Paul Sokolovskybf47b712016-08-04 00:21:05 +03003import hashlib
Damien George075d5972014-11-27 20:30:33 +00004
Paul Sokolovsky8d2bcaf2016-04-03 15:40:53 +03005SEGS_MAX_SIZE = 0x9000
6
Damien George075d5972014-11-27 20:30:33 +00007assert len(sys.argv) == 4
8
Paul Sokolovskybf47b712016-08-04 00:21:05 +03009md5 = hashlib.md5()
10
Damien George075d5972014-11-27 20:30:33 +000011with 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 Sokolovskybf47b712016-08-04 00:21:05 +030016 # First 4 bytes include flash size, etc. which may be changed
17 # by esptool.py, etc.
18 md5.update(data_flash[4:])
Damien George075d5972014-11-27 20:30:33 +000019 print('flash ', len(data_flash))
20
Damien George075d5972014-11-27 20:30:33 +000021 with open(sys.argv[2], 'rb') as f:
22 data_rom = f.read()
Paul Sokolovskya6213332016-08-04 00:19:09 +030023
24 pad = b'\xff' * (SEGS_MAX_SIZE - len(data_flash))
25 assert len(pad) >= 4
26 fout.write(pad[:-4])
Paul Sokolovskybf47b712016-08-04 00:21:05 +030027 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 Sokolovskya6213332016-08-04 00:19:09 +030031 print('padding ', len(pad))
32
33 fout.write(data_rom)
Paul Sokolovskybf47b712016-08-04 00:21:05 +030034 md5.update(data_rom)
Paul Sokolovskya6213332016-08-04 00:19:09 +030035 print('irom0text', len(data_rom))
Damien George075d5972014-11-27 20:30:33 +000036
Paul Sokolovskybf47b712016-08-04 00:21:05 +030037 fout.write(md5.digest())
38
Paul Sokolovsky8d2bcaf2016-04-03 15:40:53 +030039 print('total ', SEGS_MAX_SIZE + len(data_rom))
Paul Sokolovskybf47b712016-08-04 00:21:05 +030040 print('md5 ', md5.hexdigest())