wolfBoot/tools/scripts/x86_fsp/print_flash_map.py

44 lines
1.6 KiB
Python
Executable File

#!/usr/bin/env python
import re
import argparse
pattern = r'^([\w\.]+) +(0x[0-9a-fA-F]+) +(0x[0-9a-fA-F]+)'
def parse_map_file(map_file_path):
components = []
mmap = False
flash_start = 0
with open(map_file_path, 'r') as map_file:
current_component = None
for line in map_file:
if line.startswith('FLASH'):
m = re.match(r'FLASH +(0x[0-9a-fA-F]+)', line)
flash_start = int(m[1], 16)
if line == 'Linker script and memory map\n' or mmap:
mmap = True
else:
continue
# Check for start of a new component
m = re.match(pattern, line)
if m:
c = {'name': m[1], 'address': int(m[2], 16), 'size': int(m[3], 16)}
components.append(c)
return components, flash_start
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("map_file_path", type=str,
help="Path to the map file",
nargs='?',
default='stage1/loader_stage1.map')
args = parser.parse_args()
map_file_path = args.map_file_path
comps, flash = parse_map_file(map_file_path)
comps = filter(lambda x: x['address'] >= flash, comps)
comps = sorted(comps, key=lambda x: x['address'])
print(f'Name:{"":<20}Address:{"":<20}Size:{"":<20}')
for c in comps:
print (f"{c['name']:<20} {hex(c['address']):<20} {hex(c['size']):<20}")
total_sum = sum(map(lambda x: x['size'], comps))
print(f"total sum: {hex(total_sum)} ({total_sum//1024} KB)")