forked from containers/libkrunfw
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathImage_to_bundle.py
48 lines (40 loc) · 1004 Bytes
/
Image_to_bundle.py
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
import sys
footer = """
char * krunfw_get_kernel(size_t *load_addr, size_t *size)
{
*load_addr = KERNEL_LOAD_ADDR;
*size = (((KERNEL_SIZE - 1) / 16384) + 1) * 16384;
return &KERNEL_BUNDLE[0];
}
int krunfw_get_version()
{
return 1;
}
"""
load_segments = [ ]
if len(sys.argv) != 2:
print('Invalid arguments')
print('Usage: %s VMLINUX_BINARY' % sys.argv[0])
sys.exit(-1)
kelf = open(sys.argv[1], 'rb')
kc = open('kernel.c', 'w')
kc.write('#include <stddef.h>\n')
kc.write('__attribute__ ((aligned (4096))) char KERNEL_BUNDLE[] = \n"')
entry = 0x80000000;
col = 0
pos = 0
prev_paddr = None
byte = kelf.read(1)
while byte != b"":
kc.write('\\x' + byte.hex())
if col == 20:
kc.write('"\n"')
col = 0
else:
col = col + 1
byte = kelf.read(1)
pos = pos + 1
kc.write('";\n')
kc.write('size_t KERNEL_SIZE = 0x%s;\n' % format(pos, 'x'))
kc.write('size_t KERNEL_LOAD_ADDR = 0x%s;\n' % format(entry, 'x'))
kc.write(footer)