Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
mbed-os/tools/targets/REALTEK_RTL8195AM.py@0:6bf0743ece18, 2020-03-28 (annotated)
- Committer:
- demayer
- Date:
- Sat Mar 28 15:28:19 2020 +0000
- Revision:
- 0:6bf0743ece18
IMU Thread with an event-queue running parallel to handle tasks like a 5 times blinking LED. Button with interrupt detected.
Who changed what in which revision?
| User | Revision | Line number | New contents of line | 
|---|---|---|---|
| demayer | 0:6bf0743ece18 | 1 | """ | 
| demayer | 0:6bf0743ece18 | 2 | Realtek Semiconductor Corp. | 
| demayer | 0:6bf0743ece18 | 3 | |
| demayer | 0:6bf0743ece18 | 4 | RTL8195A elf2bin script | 
| demayer | 0:6bf0743ece18 | 5 | """ | 
| demayer | 0:6bf0743ece18 | 6 | |
| demayer | 0:6bf0743ece18 | 7 | import sys, array, struct, os, re, subprocess | 
| demayer | 0:6bf0743ece18 | 8 | import hashlib | 
| demayer | 0:6bf0743ece18 | 9 | import shutil | 
| demayer | 0:6bf0743ece18 | 10 | |
| demayer | 0:6bf0743ece18 | 11 | from tools.paths import TOOLS_BOOTLOADERS | 
| demayer | 0:6bf0743ece18 | 12 | from tools.toolchains import TOOLCHAIN_PATHS | 
| demayer | 0:6bf0743ece18 | 13 | from datetime import datetime | 
| demayer | 0:6bf0743ece18 | 14 | |
| demayer | 0:6bf0743ece18 | 15 | # Constant Variables | 
| demayer | 0:6bf0743ece18 | 16 | RAM2_RSVD = 0x00000000 | 
| demayer | 0:6bf0743ece18 | 17 | RAM2_VER = 0x8195FFFF00000000 | 
| demayer | 0:6bf0743ece18 | 18 | RAM2_TAG = 0x81950001 | 
| demayer | 0:6bf0743ece18 | 19 | RAM2_SHA = '0' | 
| demayer | 0:6bf0743ece18 | 20 | |
| demayer | 0:6bf0743ece18 | 21 | def write_fixed_width_string(value, width, output): | 
| demayer | 0:6bf0743ece18 | 22 | # cut string to list & reverse | 
| demayer | 0:6bf0743ece18 | 23 | line = [value[i:i+2] for i in range(0, len(value), 2)] | 
| demayer | 0:6bf0743ece18 | 24 | output.write("".join([chr(long(b, 16)) for b in line])) | 
| demayer | 0:6bf0743ece18 | 25 | |
| demayer | 0:6bf0743ece18 | 26 | def write_fixed_width_value(value, width, output): | 
| demayer | 0:6bf0743ece18 | 27 | # convert to string | 
| demayer | 0:6bf0743ece18 | 28 | line = format(value, '0%dx' % (width)) | 
| demayer | 0:6bf0743ece18 | 29 | if len(line) > width: | 
| demayer | 0:6bf0743ece18 | 30 | print "[ERROR] value 0x%s cannot fit width %d" % (line, width) | 
| demayer | 0:6bf0743ece18 | 31 | sys.exit(-1) | 
| demayer | 0:6bf0743ece18 | 32 | # cut string to list & reverse | 
| demayer | 0:6bf0743ece18 | 33 | line = [line[i:i+2] for i in range(0, len(line), 2)] | 
| demayer | 0:6bf0743ece18 | 34 | line.reverse() | 
| demayer | 0:6bf0743ece18 | 35 | # convert to write buffer | 
| demayer | 0:6bf0743ece18 | 36 | output.write("".join([chr(long(b, 16)) for b in line])) | 
| demayer | 0:6bf0743ece18 | 37 | |
| demayer | 0:6bf0743ece18 | 38 | def append_image_file(image, output): | 
| demayer | 0:6bf0743ece18 | 39 | input = open(image, "rb") | 
| demayer | 0:6bf0743ece18 | 40 | output.write(input.read()) | 
| demayer | 0:6bf0743ece18 | 41 | input.close() | 
| demayer | 0:6bf0743ece18 | 42 | |
| demayer | 0:6bf0743ece18 | 43 | def write_padding_bytes(output_name, size): | 
| demayer | 0:6bf0743ece18 | 44 | current_size = os.stat(output_name).st_size | 
| demayer | 0:6bf0743ece18 | 45 | padcount = size - current_size | 
| demayer | 0:6bf0743ece18 | 46 | if padcount < 0: | 
| demayer | 0:6bf0743ece18 | 47 | print "[ERROR] image is larger than expected size" | 
| demayer | 0:6bf0743ece18 | 48 | sys.exit(-1) | 
| demayer | 0:6bf0743ece18 | 49 | output = open(output_name, "ab") | 
| demayer | 0:6bf0743ece18 | 50 | output.write('\377' * padcount) | 
| demayer | 0:6bf0743ece18 | 51 | output.close() | 
| demayer | 0:6bf0743ece18 | 52 | |
| demayer | 0:6bf0743ece18 | 53 | def sha256_checksum(filename, block_size=65536): | 
| demayer | 0:6bf0743ece18 | 54 | sha256 = hashlib.sha256() | 
| demayer | 0:6bf0743ece18 | 55 | with open(filename, 'rb') as f: | 
| demayer | 0:6bf0743ece18 | 56 | for block in iter(lambda: f.read(block_size), b''): | 
| demayer | 0:6bf0743ece18 | 57 | sha256.update(block) | 
| demayer | 0:6bf0743ece18 | 58 | return sha256.hexdigest() | 
| demayer | 0:6bf0743ece18 | 59 | |
| demayer | 0:6bf0743ece18 | 60 | def get_version_by_time(): | 
| demayer | 0:6bf0743ece18 | 61 | secs = int((datetime.now()-datetime(2016,11,1)).total_seconds()) | 
| demayer | 0:6bf0743ece18 | 62 | return RAM2_VER + secs | 
| demayer | 0:6bf0743ece18 | 63 | |
| demayer | 0:6bf0743ece18 | 64 | # ---------------------------- | 
| demayer | 0:6bf0743ece18 | 65 | # main function | 
| demayer | 0:6bf0743ece18 | 66 | # ---------------------------- | 
| demayer | 0:6bf0743ece18 | 67 | def prepend(image, entry, segment, image_ram2, image_ota): | 
| demayer | 0:6bf0743ece18 | 68 | |
| demayer | 0:6bf0743ece18 | 69 | # parse input arguments | 
| demayer | 0:6bf0743ece18 | 70 | output = open(image_ram2, "wb") | 
| demayer | 0:6bf0743ece18 | 71 | |
| demayer | 0:6bf0743ece18 | 72 | write_fixed_width_value(os.stat(image).st_size, 8, output) | 
| demayer | 0:6bf0743ece18 | 73 | write_fixed_width_value(int(entry), 8, output) | 
| demayer | 0:6bf0743ece18 | 74 | write_fixed_width_value(int(segment), 8, output) | 
| demayer | 0:6bf0743ece18 | 75 | |
| demayer | 0:6bf0743ece18 | 76 | RAM2_SHA = sha256_checksum(image) | 
| demayer | 0:6bf0743ece18 | 77 | write_fixed_width_value(RAM2_TAG, 8, output) | 
| demayer | 0:6bf0743ece18 | 78 | write_fixed_width_value(get_version_by_time(), 16, output) | 
| demayer | 0:6bf0743ece18 | 79 | write_fixed_width_string(RAM2_SHA, 64, output) | 
| demayer | 0:6bf0743ece18 | 80 | write_fixed_width_value(RAM2_RSVD, 8, output) | 
| demayer | 0:6bf0743ece18 | 81 | |
| demayer | 0:6bf0743ece18 | 82 | append_image_file(image, output) | 
| demayer | 0:6bf0743ece18 | 83 | output.close() | 
| demayer | 0:6bf0743ece18 | 84 | |
| demayer | 0:6bf0743ece18 | 85 | ota = open(image_ota, "wb") | 
| demayer | 0:6bf0743ece18 | 86 | write_fixed_width_value(os.stat(image).st_size, 8, ota) | 
| demayer | 0:6bf0743ece18 | 87 | write_fixed_width_value(int(entry), 8, ota) | 
| demayer | 0:6bf0743ece18 | 88 | write_fixed_width_value(int(segment), 8, ota) | 
| demayer | 0:6bf0743ece18 | 89 | write_fixed_width_value(0xFFFFFFFF, 8, ota) | 
| demayer | 0:6bf0743ece18 | 90 | write_fixed_width_value(get_version_by_time(), 16, ota) | 
| demayer | 0:6bf0743ece18 | 91 | write_fixed_width_string(RAM2_SHA, 64, ota) | 
| demayer | 0:6bf0743ece18 | 92 | write_fixed_width_value(RAM2_RSVD, 8, ota) | 
| demayer | 0:6bf0743ece18 | 93 | |
| demayer | 0:6bf0743ece18 | 94 | append_image_file(image, ota) | 
| demayer | 0:6bf0743ece18 | 95 | ota.close() | 
| demayer | 0:6bf0743ece18 | 96 | |
| demayer | 0:6bf0743ece18 | 97 | def find_symbol(toolchain, mapfile, symbol): | 
| demayer | 0:6bf0743ece18 | 98 | ret = None | 
| demayer | 0:6bf0743ece18 | 99 | |
| demayer | 0:6bf0743ece18 | 100 | HEX = '0x0{,8}(?P<addr>[0-9A-Fa-f]{8})' | 
| demayer | 0:6bf0743ece18 | 101 | if toolchain == "GCC_ARM": | 
| demayer | 0:6bf0743ece18 | 102 | SYM = re.compile(r'^\s+' + HEX + r'\s+' + symbol + '\r?$') | 
| demayer | 0:6bf0743ece18 | 103 | elif toolchain in ["ARM_STD", "ARM", "ARM_MICRO"]: | 
| demayer | 0:6bf0743ece18 | 104 | SYM = re.compile(r'^\s+' + HEX + r'\s+0x[0-9A-Fa-f]{8}\s+Code.*\s+i\.' + symbol + r'\s+.*$') | 
| demayer | 0:6bf0743ece18 | 105 | elif toolchain == "IAR": | 
| demayer | 0:6bf0743ece18 | 106 | SYM = re.compile(r'^' + symbol + r'\s+' + HEX + '\s+.*$') | 
| demayer | 0:6bf0743ece18 | 107 | |
| demayer | 0:6bf0743ece18 | 108 | with open(mapfile, 'r') as infile: | 
| demayer | 0:6bf0743ece18 | 109 | for line in infile: | 
| demayer | 0:6bf0743ece18 | 110 | match = re.match(SYM, line) | 
| demayer | 0:6bf0743ece18 | 111 | if match: | 
| demayer | 0:6bf0743ece18 | 112 | ret = match.group("addr") | 
| demayer | 0:6bf0743ece18 | 113 | |
| demayer | 0:6bf0743ece18 | 114 | if not ret: | 
| demayer | 0:6bf0743ece18 | 115 | print "[ERROR] cannot find the address of symbol " + symbol | 
| demayer | 0:6bf0743ece18 | 116 | return 0 | 
| demayer | 0:6bf0743ece18 | 117 | |
| demayer | 0:6bf0743ece18 | 118 | return int(ret,16) | 1 | 
| demayer | 0:6bf0743ece18 | 119 | |
| demayer | 0:6bf0743ece18 | 120 | def parse_load_segment_gcc(image_elf): | 
| demayer | 0:6bf0743ece18 | 121 | # Program Headers: | 
| demayer | 0:6bf0743ece18 | 122 | # Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align | 
| demayer | 0:6bf0743ece18 | 123 | # LOAD 0x000034 0x10006000 0x10006000 0x026bc 0x026bc RW 0x8 | 
| demayer | 0:6bf0743ece18 | 124 | # LOAD 0x0026f0 0x30000000 0x30000000 0x06338 0x06338 RWE 0x4 | 
| demayer | 0:6bf0743ece18 | 125 | segment_list = [] | 
| demayer | 0:6bf0743ece18 | 126 | cmd = os.path.join(TOOLCHAIN_PATHS['GCC_ARM'], 'arm-none-eabi-readelf') | 
| demayer | 0:6bf0743ece18 | 127 | cmd = '"' + cmd + '"' + ' -l ' + image_elf | 
| demayer | 0:6bf0743ece18 | 128 | for line in subprocess.check_output(cmd, shell=True, universal_newlines=True).split("\n"): | 
| demayer | 0:6bf0743ece18 | 129 | if not line.startswith(" LOAD"): | 
| demayer | 0:6bf0743ece18 | 130 | continue | 
| demayer | 0:6bf0743ece18 | 131 | segment = line.split() | 
| demayer | 0:6bf0743ece18 | 132 | if len(segment) != 8: | 
| demayer | 0:6bf0743ece18 | 133 | continue | 
| demayer | 0:6bf0743ece18 | 134 | offset = int(segment[1][2:], 16) | 
| demayer | 0:6bf0743ece18 | 135 | addr = int(segment[2][2:], 16) | 
| demayer | 0:6bf0743ece18 | 136 | size = int(segment[4][2:], 16) | 
| demayer | 0:6bf0743ece18 | 137 | if addr != 0 and size != 0: | 
| demayer | 0:6bf0743ece18 | 138 | segment_list.append((offset, addr, size)) | 
| demayer | 0:6bf0743ece18 | 139 | return segment_list | 
| demayer | 0:6bf0743ece18 | 140 | |
| demayer | 0:6bf0743ece18 | 141 | def parse_load_segment_armcc(image_elf): | 
| demayer | 0:6bf0743ece18 | 142 | # ==================================== | 
| demayer | 0:6bf0743ece18 | 143 | # | 
| demayer | 0:6bf0743ece18 | 144 | # ** Program header #2 | 
| demayer | 0:6bf0743ece18 | 145 | # | 
| demayer | 0:6bf0743ece18 | 146 | # Type : PT_LOAD (1) | 
| demayer | 0:6bf0743ece18 | 147 | # File Offset : 52 (0x34) | 
| demayer | 0:6bf0743ece18 | 148 | # Virtual Addr : 0x30000000 | 
| demayer | 0:6bf0743ece18 | 149 | # Physical Addr : 0x30000000 | 
| demayer | 0:6bf0743ece18 | 150 | # Size in file : 27260 bytes (0x6a7c) | 
| demayer | 0:6bf0743ece18 | 151 | # Size in memory: 42168 bytes (0xa4b8) | 
| demayer | 0:6bf0743ece18 | 152 | # Flags : PF_X + PF_W + PF_R + PF_ARM_ENTRY (0x80000007) | 
| demayer | 0:6bf0743ece18 | 153 | # Alignment : 8 | 
| demayer | 0:6bf0743ece18 | 154 | # | 
| demayer | 0:6bf0743ece18 | 155 | (offset, addr, size) = (0, 0, 0) | 
| demayer | 0:6bf0743ece18 | 156 | segment_list = [] | 
| demayer | 0:6bf0743ece18 | 157 | in_segment = False | 
| demayer | 0:6bf0743ece18 | 158 | cmd = os.path.join(TOOLCHAIN_PATHS['ARM'], 'bin', 'fromelf') | 
| demayer | 0:6bf0743ece18 | 159 | cmd = '"' + cmd + '"' + ' --text -v --only=none ' + image_elf | 
| demayer | 0:6bf0743ece18 | 160 | for line in subprocess.check_output(cmd, shell=True, universal_newlines=True).split("\n"): | 
| demayer | 0:6bf0743ece18 | 161 | if line == "": | 
| demayer | 0:6bf0743ece18 | 162 | pass | 
| demayer | 0:6bf0743ece18 | 163 | elif line.startswith("** Program header"): | 
| demayer | 0:6bf0743ece18 | 164 | in_segment = True | 
| demayer | 0:6bf0743ece18 | 165 | elif in_segment == False: | 
| demayer | 0:6bf0743ece18 | 166 | pass | 
| demayer | 0:6bf0743ece18 | 167 | elif line.startswith("============"): | 
| demayer | 0:6bf0743ece18 | 168 | if addr != 0 and size != 0: | 
| demayer | 0:6bf0743ece18 | 169 | segment_list.append((offset, addr, size)) | 
| demayer | 0:6bf0743ece18 | 170 | in_segment = False | 
| demayer | 0:6bf0743ece18 | 171 | (offset, addr, size) = (0, 0, 0) | 
| demayer | 0:6bf0743ece18 | 172 | elif line.startswith(" Type"): | 
| demayer | 0:6bf0743ece18 | 173 | if not re.match(r'\s+Type\s+:\s+PT_LOAD\s.*$', line): | 
| demayer | 0:6bf0743ece18 | 174 | in_segment = False | 
| demayer | 0:6bf0743ece18 | 175 | elif line.startswith(" File Offset"): | 
| demayer | 0:6bf0743ece18 | 176 | match = re.match(r'^\s+File Offset\s+:\s+(?P<offset>\d+).*$', line) | 
| demayer | 0:6bf0743ece18 | 177 | if match: | 
| demayer | 0:6bf0743ece18 | 178 | offset = int(match.group("offset")) | 
| demayer | 0:6bf0743ece18 | 179 | elif line.startswith(" Virtual Addr"): | 
| demayer | 0:6bf0743ece18 | 180 | match = re.match(r'^\s+Virtual Addr\s+:\s+0x(?P<addr>[0-9a-f]+).*$', line) | 
| demayer | 0:6bf0743ece18 | 181 | if match: | 
| demayer | 0:6bf0743ece18 | 182 | addr = int(match.group("addr"), 16) | 
| demayer | 0:6bf0743ece18 | 183 | elif line.startswith(" Size in file"): | 
| demayer | 0:6bf0743ece18 | 184 | match = re.match(r'^\s+Size in file\s+:.*\(0x(?P<size>[0-9a-f]+)\).*$', line) | 
| demayer | 0:6bf0743ece18 | 185 | if match: | 
| demayer | 0:6bf0743ece18 | 186 | size = int(match.group("size"), 16) | 
| demayer | 0:6bf0743ece18 | 187 | return segment_list | 
| demayer | 0:6bf0743ece18 | 188 | |
| demayer | 0:6bf0743ece18 | 189 | |
| demayer | 0:6bf0743ece18 | 190 | def parse_load_segment_iar(image_elf): | 
| demayer | 0:6bf0743ece18 | 191 | # SEGMENTS: | 
| demayer | 0:6bf0743ece18 | 192 | # | 
| demayer | 0:6bf0743ece18 | 193 | # Type Offset Virtual Physical File Sz Mem Sz Flags Align | 
| demayer | 0:6bf0743ece18 | 194 | # ---- ------ ------- -------- ------- ------ ----- ----- | 
| demayer | 0:6bf0743ece18 | 195 | # 0: load 0x34 0x10006000 0x10006000 0x26bc 0x26bc 0x6 WR 0x8 | 
| demayer | 0:6bf0743ece18 | 196 | # 1: load 0x26f0 0x30000000 0x30000000 0x6338 0x6338 0x7 XWR 0x4 | 
| demayer | 0:6bf0743ece18 | 197 | # | 
| demayer | 0:6bf0743ece18 | 198 | # SECTIONS: | 
| demayer | 0:6bf0743ece18 | 199 | # | 
| demayer | 0:6bf0743ece18 | 200 | # Name Type Addr Offset Size Aln Lnk Inf ESz Flags | 
| demayer | 0:6bf0743ece18 | 201 | # ---- ---- ---- ------ ---- --- --- --- --- ----- | 
| demayer | 0:6bf0743ece18 | 202 | # 1: .shstrtab strtab 0xfc4d8 0x60 0x4 | 
| demayer | 0:6bf0743ece18 | 203 | # 2: .strtab strtab 0xfc538 0xbb3f 0x4 | 
| demayer | 0:6bf0743ece18 | 204 | |
| demayer | 0:6bf0743ece18 | 205 | segment_list = [] | 
| demayer | 0:6bf0743ece18 | 206 | in_segment = False | 
| demayer | 0:6bf0743ece18 | 207 | cmd = os.path.join(TOOLCHAIN_PATHS['IAR'], 'bin', 'ielfdumparm') | 
| demayer | 0:6bf0743ece18 | 208 | cmd = '"' + cmd + '"' + ' ' + image_elf | 
| demayer | 0:6bf0743ece18 | 209 | for line in subprocess.check_output(cmd, shell=True, universal_newlines=True).split("\n"): | 
| demayer | 0:6bf0743ece18 | 210 | if line.startswith(" SEGMENTS:"): | 
| demayer | 0:6bf0743ece18 | 211 | in_segment = True | 
| demayer | 0:6bf0743ece18 | 212 | elif in_segment == False: | 
| demayer | 0:6bf0743ece18 | 213 | pass | 
| demayer | 0:6bf0743ece18 | 214 | elif line.startswith(" SECTIONS:"): | 
| demayer | 0:6bf0743ece18 | 215 | break | 
| demayer | 0:6bf0743ece18 | 216 | elif re.match(r'^\s+\w+:\s+load\s+.*$', line): | 
| demayer | 0:6bf0743ece18 | 217 | segment = line.split() | 
| demayer | 0:6bf0743ece18 | 218 | offset = int(segment[2][2:], 16) | 
| demayer | 0:6bf0743ece18 | 219 | addr = int(segment[3][2:], 16) | 
| demayer | 0:6bf0743ece18 | 220 | size = int(segment[5][2:], 16) | 
| demayer | 0:6bf0743ece18 | 221 | if addr < 0x10007000: | 
| demayer | 0:6bf0743ece18 | 222 | continue | 
| demayer | 0:6bf0743ece18 | 223 | if addr != 0 and size != 0: | 
| demayer | 0:6bf0743ece18 | 224 | segment_list.append((offset, addr, size)) | 
| demayer | 0:6bf0743ece18 | 225 | return segment_list | 
| demayer | 0:6bf0743ece18 | 226 | |
| demayer | 0:6bf0743ece18 | 227 | def parse_load_segment(toolchain, image_elf): | 
| demayer | 0:6bf0743ece18 | 228 | if toolchain == "GCC_ARM": | 
| demayer | 0:6bf0743ece18 | 229 | return parse_load_segment_gcc(image_elf) | 
| demayer | 0:6bf0743ece18 | 230 | elif toolchain in ["ARM_STD", "ARM", "ARM_MICRO"]: | 
| demayer | 0:6bf0743ece18 | 231 | return parse_load_segment_armcc(image_elf) | 
| demayer | 0:6bf0743ece18 | 232 | elif toolchain == "IAR": | 
| demayer | 0:6bf0743ece18 | 233 | return parse_load_segment_iar(image_elf) | 
| demayer | 0:6bf0743ece18 | 234 | else: | 
| demayer | 0:6bf0743ece18 | 235 | return [] | 
| demayer | 0:6bf0743ece18 | 236 | |
| demayer | 0:6bf0743ece18 | 237 | def write_load_segment(image_elf, image_bin, segment): | 
| demayer | 0:6bf0743ece18 | 238 | file_elf = open(image_elf, "rb") | 
| demayer | 0:6bf0743ece18 | 239 | file_bin = open(image_bin, "wb") | 
| demayer | 0:6bf0743ece18 | 240 | for (offset, addr, size) in segment: | 
| demayer | 0:6bf0743ece18 | 241 | file_elf.seek(offset) | 
| demayer | 0:6bf0743ece18 | 242 | # write image header - size & addr | 
| demayer | 0:6bf0743ece18 | 243 | write_fixed_width_value(addr, 8, file_bin) | 
| demayer | 0:6bf0743ece18 | 244 | write_fixed_width_value(size, 8, file_bin) | 
| demayer | 0:6bf0743ece18 | 245 | # write load segment | 
| demayer | 0:6bf0743ece18 | 246 | file_bin.write(file_elf.read(size)) | 
| demayer | 0:6bf0743ece18 | 247 | delta = size % 4 | 
| demayer | 0:6bf0743ece18 | 248 | if delta != 0: | 
| demayer | 0:6bf0743ece18 | 249 | padding = 4 - delta | 
| demayer | 0:6bf0743ece18 | 250 | write_fixed_width_value(0x0, padding * 2, file_bin) | 
| demayer | 0:6bf0743ece18 | 251 | file_bin.close() | 
| demayer | 0:6bf0743ece18 | 252 | file_elf.close() | 
| demayer | 0:6bf0743ece18 | 253 | |
| demayer | 0:6bf0743ece18 | 254 | # ---------------------------- | 
| demayer | 0:6bf0743ece18 | 255 | # main function | 
| demayer | 0:6bf0743ece18 | 256 | # ---------------------------- | 
| demayer | 0:6bf0743ece18 | 257 | def rtl8195a_elf2bin(t_self, image_elf, image_bin): | 
| demayer | 0:6bf0743ece18 | 258 | # remove target binary file/path | 
| demayer | 0:6bf0743ece18 | 259 | if os.path.isfile(image_bin): | 
| demayer | 0:6bf0743ece18 | 260 | os.remove(image_bin) | 
| demayer | 0:6bf0743ece18 | 261 | else: | 
| demayer | 0:6bf0743ece18 | 262 | shutil.rmtree(image_bin) | 
| demayer | 0:6bf0743ece18 | 263 | |
| demayer | 0:6bf0743ece18 | 264 | segment = parse_load_segment(t_self.name, image_elf) | 
| demayer | 0:6bf0743ece18 | 265 | write_load_segment(image_elf, image_bin, segment) | 
| demayer | 0:6bf0743ece18 | 266 | |
| demayer | 0:6bf0743ece18 | 267 | image_name = os.path.splitext(image_elf)[0] | 
| demayer | 0:6bf0743ece18 | 268 | image_map = image_name + '.map' | 
| demayer | 0:6bf0743ece18 | 269 | |
| demayer | 0:6bf0743ece18 | 270 | ram2_ent = find_symbol(t_self.name, image_map, "PLAT_Start") | 
| demayer | 0:6bf0743ece18 | 271 | ram1_bin = os.path.join(TOOLS_BOOTLOADERS, "REALTEK_RTL8195AM", "ram_1.bin") | 
| demayer | 0:6bf0743ece18 | 272 | ram2_bin = image_name + '-ram_2.bin' | 
| demayer | 0:6bf0743ece18 | 273 | ota_bin = image_name + '-ota.bin' | 
| demayer | 0:6bf0743ece18 | 274 | prepend(image_bin, ram2_ent, len(segment), ram2_bin, ota_bin) | 
| demayer | 0:6bf0743ece18 | 275 | |
| demayer | 0:6bf0743ece18 | 276 | # write output file | 
| demayer | 0:6bf0743ece18 | 277 | output = open(image_bin, "wb") | 
| demayer | 0:6bf0743ece18 | 278 | append_image_file(ram1_bin, output) | 
| demayer | 0:6bf0743ece18 | 279 | append_image_file(ram2_bin, output) | 
| demayer | 0:6bf0743ece18 | 280 | output.close() |