1818RAM2_TAG = 0x81950001
1919RAM2_SHA = '0'
2020
21- def write_fixed_width_string (value , width , output ):
22- # cut string to list & reverse
23- line = [value [i :i + 2 ] for i in range (0 , len (value ), 2 )]
24- output .write ("" .join ([chr (long (b , 16 )) for b in line ]))
25-
26- def write_fixed_width_value (value , width , output ):
27- # convert to string
28- line = format (value , '0%dx' % (width ))
29- if len (line ) > width :
30- print "[ERROR] value 0x%s cannot fit width %d" % (line , width )
31- sys .exit (- 1 )
32- # cut string to list & reverse
33- line = [line [i :i + 2 ] for i in range (0 , len (line ), 2 )]
34- line .reverse ()
35- # convert to write buffer
36- output .write ("" .join ([chr (long (b , 16 )) for b in line ]))
21+ def format_number (number , width ):
22+ # convert to string
23+ line = format (number , '0%dx' % (width ))
24+ if len (line ) > width :
25+ print "[ERROR] 0x%s cannot fit in width %d" % (line , width )
26+ sys .exit (- 1 )
27+ # cut string to list & reverse
28+ line = [line [i :i + 2 ] for i in range (0 , len (line ), 2 )]
29+ line .reverse ()
30+ return binascii .a2b_hex ("" .join (line ))
31+
32+ def format_string (string ):
33+ return binascii .a2b_hex (string )
34+
35+ def write_number (value , width , output ):
36+ output .write (format_number (value , width ))
37+
38+ def write_string (value , width , output ):
39+ output .write (format_string (value ))
3740
3841def append_image_file (image , output ):
3942 input = open (image , "rb" )
@@ -69,27 +72,27 @@ def prepend(image, entry, segment, image_ram2, image_ota):
6972 # parse input arguments
7073 output = open (image_ram2 , "wb" )
7174
72- write_fixed_width_value (os .stat (image ).st_size , 8 , output )
73- write_fixed_width_value (int (entry ), 8 , output )
74- write_fixed_width_value (int (segment ), 8 , output )
75+ write_number (os .stat (image ).st_size , 8 , output )
76+ write_number (int (entry ), 8 , output )
77+ write_number (int (segment ), 8 , output )
7578
7679 RAM2_SHA = sha256_checksum (image )
77- write_fixed_width_value (RAM2_TAG , 8 , output )
78- write_fixed_width_value (get_version_by_time (), 16 , output )
79- write_fixed_width_string (RAM2_SHA , 64 , output )
80- write_fixed_width_value (RAM2_RSVD , 8 , output )
80+ write_number (RAM2_TAG , 8 , output )
81+ write_number (get_version_by_time (), 16 , output )
82+ write_string (RAM2_SHA , 64 , output )
83+ write_number (RAM2_RSVD , 8 , output )
8184
8285 append_image_file (image , output )
8386 output .close ()
8487
8588 ota = open (image_ota , "wb" )
86- write_fixed_width_value (os .stat (image ).st_size , 8 , ota )
87- write_fixed_width_value (int (entry ), 8 , ota )
88- write_fixed_width_value (int (segment ), 8 , ota )
89- write_fixed_width_value (0xFFFFFFFF , 8 , ota )
90- write_fixed_width_value (get_version_by_time (), 16 , ota )
91- write_fixed_width_string (RAM2_SHA , 64 , ota )
92- write_fixed_width_value (RAM2_RSVD , 8 , ota )
89+ write_number (os .stat (image ).st_size , 8 , ota )
90+ write_number (int (entry ), 8 , ota )
91+ write_number (int (segment ), 8 , ota )
92+ write_number (0xFFFFFFFF , 8 , ota )
93+ write_number (get_version_by_time (), 16 , ota )
94+ write_string (RAM2_SHA , 64 , ota )
95+ write_number (RAM2_RSVD , 8 , ota )
9396
9497 append_image_file (image , ota )
9598 ota .close ()
@@ -218,8 +221,6 @@ def parse_load_segment_iar(image_elf):
218221 offset = int (segment [2 ][2 :], 16 )
219222 addr = int (segment [3 ][2 :], 16 )
220223 size = int (segment [5 ][2 :], 16 )
221- if addr < 0x10007000 :
222- continue
223224 if addr != 0 and size != 0 :
224225 segment_list .append ((offset , addr , size ))
225226 return segment_list
@@ -240,14 +241,14 @@ def write_load_segment(image_elf, image_bin, segment):
240241 for (offset , addr , size ) in segment :
241242 file_elf .seek (offset )
242243 # write image header - size & addr
243- write_fixed_width_value (addr , 8 , file_bin )
244- write_fixed_width_value (size , 8 , file_bin )
244+ write_number (addr , 8 , file_bin )
245+ write_number (size , 8 , file_bin )
245246 # write load segment
246247 file_bin .write (file_elf .read (size ))
247248 delta = size % 4
248249 if delta != 0 :
249250 padding = 4 - delta
250- write_fixed_width_value (0x0 , padding * 2 , file_bin )
251+ write_number (0x0 , padding * 2 , file_bin )
251252 file_bin .close ()
252253 file_elf .close ()
253254
0 commit comments