xref: /rk3399_rockchip-uboot/arch/arm/mach-rockchip/decode_bl31.py (revision daae0a01d6548c381f7126747a8ef273189b547e)
1#!/usr/bin/env python2
2#
3# Copyright (C) 2020 Rockchip Electronics Co., Ltd
4#
5# SPDX-License-Identifier:     GPL-2.0+
6#
7"""
8A script to decode bl31.elf to binary
9"""
10
11# pip install pyelftools
12from elftools.elf.elffile import ELFFile
13
14ELF_SEG_P_TYPE='p_type'
15ELF_SEG_P_PADDR='p_paddr'
16
17def generate_atf_binary(bl31_file_name):
18    with open(bl31_file_name) as bl31_file:
19        bl31 = ELFFile(bl31_file)
20        num = bl31.num_segments()
21        for i in range(num):
22            seg = bl31.get_segment(i)
23            if ('PT_LOAD' == seg.__getitem__(ELF_SEG_P_TYPE)):
24                paddr = seg.__getitem__(ELF_SEG_P_PADDR)
25                file_name = 'bl31_0x%08x.bin' % paddr
26                with open(file_name, "wb") as atf:
27                    atf.write(seg.data());
28
29def main():
30    bl31_elf="./bl31.elf"
31    generate_atf_binary(bl31_elf);
32
33if __name__ == "__main__":
34    main()
35