Skip to content

Commit 2d23e98

Browse files
tung7970adbridge
authored andcommitted
rtl8195am - cleanup post-processing binary hook
Preparing for bootloader redesign. Signed-off-by: Tony Wu <tung7970@gmail.com>
1 parent a412131 commit 2d23e98

File tree

1 file changed

+36
-35
lines changed

1 file changed

+36
-35
lines changed

tools/targets/REALTEK_RTL8195AM.py

Lines changed: 36 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -18,22 +18,25 @@
1818
RAM2_TAG = 0x81950001
1919
RAM2_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

3841
def 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

Comments
 (0)