1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
#!/usr/bin/env python3
# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2020 Carlo Caione <ccaione@baylibre.com>
#
# Derived from plat-stm32mp1/scripts/stm32image.py
#
import argparse
import struct
import mmap
header_size = 0x200
ext_magic_number = 0x12348765
version = 0x00002710
def get_size(file):
file.seek(0, 2) # End of the file
size = file.tell()
return size
def aml_set_header(dest_fd, entry, res_mem_start, res_mem_size, sec_mem_start,
sec_mem_size):
dest_fd.seek(0, 0)
dest_fd.write(struct.pack('<IIQQQQQ',
ext_magic_number,
version,
entry,
res_mem_start,
res_mem_size,
sec_mem_start,
sec_mem_size))
# Padding
dest_fd.write(b'\x00' * 464)
dest_fd.close()
def aml_create_header_file(source, dest, entry, res_mem_start, res_mem_size,
sec_mem_start, sec_mem_size):
dest_fd = open(dest, 'w+b')
src_fd = open(source, 'rb')
dest_fd.write(b'\x00' * header_size)
sizesrc = get_size(src_fd)
if sizesrc > 0:
mmsrc = mmap.mmap(src_fd.fileno(), 0, access=mmap.ACCESS_READ)
dest_fd.write(mmsrc[:sizesrc])
mmsrc.close()
src_fd.close()
aml_set_header(dest_fd, entry, res_mem_start, res_mem_size, sec_mem_start,
sec_mem_size)
dest_fd.close()
def auto_int(x):
return int(x, 0)
def get_args():
parser = argparse.ArgumentParser()
parser.add_argument('--source',
required=True,
help='Source file')
parser.add_argument('--dest',
required=True,
help='Destination file')
parser.add_argument('--entry',
required=True,
type=auto_int,
help='Entry point')
parser.add_argument('--res_mem_start',
required=True,
type=auto_int,
help='Reserved memory start')
parser.add_argument('--res_mem_size',
required=True,
type=auto_int,
help='Reserved memory size')
parser.add_argument('--sec_mem_start',
required=True,
type=auto_int,
help='Secure memory start')
parser.add_argument('--sec_mem_size',
required=True,
type=auto_int,
help='Secure memory size')
return parser.parse_args()
def main():
args = get_args()
source_file = args.source
destination_file = args.dest
entry_point = args.entry
res_mem_start = args.res_mem_start
res_mem_size = args.res_mem_size
sec_mem_start = args.sec_mem_start
sec_mem_size = args.sec_mem_size
aml_create_header_file(source_file,
destination_file,
entry_point,
res_mem_start,
res_mem_size,
sec_mem_start,
sec_mem_size)
if __name__ == "__main__":
main()
|