18
18
RAM2_TAG = 0x81950001
19
19
RAM2_SHA = '0'
20
20
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 ))
37
40
38
41
def append_image_file (image , output ):
39
42
input = open (image , "rb" )
@@ -69,27 +72,27 @@ def prepend(image, entry, segment, image_ram2, image_ota):
69
72
# parse input arguments
70
73
output = open (image_ram2 , "wb" )
71
74
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 )
75
78
76
79
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 )
81
84
82
85
append_image_file (image , output )
83
86
output .close ()
84
87
85
88
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 )
93
96
94
97
append_image_file (image , ota )
95
98
ota .close ()
@@ -218,8 +221,6 @@ def parse_load_segment_iar(image_elf):
218
221
offset = int (segment [2 ][2 :], 16 )
219
222
addr = int (segment [3 ][2 :], 16 )
220
223
size = int (segment [5 ][2 :], 16 )
221
- if addr < 0x10007000 :
222
- continue
223
224
if addr != 0 and size != 0 :
224
225
segment_list .append ((offset , addr , size ))
225
226
return segment_list
@@ -240,14 +241,14 @@ def write_load_segment(image_elf, image_bin, segment):
240
241
for (offset , addr , size ) in segment :
241
242
file_elf .seek (offset )
242
243
# 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 )
245
246
# write load segment
246
247
file_bin .write (file_elf .read (size ))
247
248
delta = size % 4
248
249
if delta != 0 :
249
250
padding = 4 - delta
250
- write_fixed_width_value (0x0 , padding * 2 , file_bin )
251
+ write_number (0x0 , padding * 2 , file_bin )
251
252
file_bin .close ()
252
253
file_elf .close ()
253
254
0 commit comments