kern/test: add wip qemu-virt board support to mesosphere

This commit is contained in:
Michael Scire 2021-10-20 20:53:42 -07:00 committed by SciresM
parent 10ed579c38
commit 0a58e803be
39 changed files with 19796 additions and 27 deletions

View file

@ -10,8 +10,8 @@ def align_up(val, algn):
return val - (val % algn)
def main(argc, argv):
if argc != 4:
print('Usage: %s kernel_ldr.bin kernel.bin output.bin' % argv[0])
if argc < 4:
print('Usage: %s kernel_ldr.bin kernel.bin output.bin [initial_process.kip ...]' % argv[0])
return 1
with open(argv[1], 'rb') as f:
kernel_ldr = f.read()
@ -30,16 +30,25 @@ def main(argc, argv):
kernel += b'\x00' * (kernel_end - len(kernel))
assert (kernel_end == len(kernel))
embedded_ini = b''
try:
with open('ini.bin', 'rb') as f:
embedded_ini = f.read()
except:
pass
embedded_kips = b''
num_kips = 0
for kip_file in argv[4:]:
try:
with open(kip_file, 'rb') as f:
data = f.read()
if data.startswith(b'KIP1'):
embedded_kips += data
num_kips += 1
except:
pass
if num_kips > 0:
embedded_ini_header = pk('<4sIII', b'INI1', len(embedded_kips) + 0x10, num_kips, 0)
else:
embedded_ini_header = b''
embedded_ini_offset = align_up(kernel_end, 0x1000)
embedded_ini_end = embedded_ini_offset + len(embedded_ini) # TODO: Create and embed an INI, eventually.
embedded_ini_end = embedded_ini_offset + len(embedded_ini_header) + len(embedded_kips)
kernel_ldr_offset = align_up(embedded_ini_end, 0x1000) + (0x1000 if len(embedded_ini) == 0 else 0)
kernel_ldr_offset = align_up(embedded_ini_end, 0x1000) + (0x1000 if len(embedded_ini_header) == 0 else 0)
kernel_ldr_end = kernel_ldr_offset + len(kernel_ldr)
mesosphere_end = align_up(kernel_ldr_end, 0x1000)
@ -48,7 +57,8 @@ def main(argc, argv):
f.write(pk('<QQI', embedded_ini_offset, kernel_ldr_offset, atmosphere_target_firmware(13, 0, 0)))
f.write(kernel[kernel_metadata_offset + 0x18:])
f.seek(embedded_ini_offset)
f.write(embedded_ini)
f.write(embedded_ini_header)
f.write(embedded_kips)
f.seek(embedded_ini_end)
f.seek(kernel_ldr_offset)
f.write(kernel_ldr)