kern/test: add wip qemu-virt board support to mesosphere
This commit is contained in:
@@ -8,29 +8,47 @@ ATMOSPHERE_BUILD_CONFIGS += $(strip $1)
|
||||
$(strip $1): mesosphere$(strip $2).bin
|
||||
|
||||
mesosphere$(strip $2).bin: kernel/kernel$(strip $2).bin kernel_ldr/kernel_ldr$(strip $2).bin
|
||||
@python build_mesosphere.py kernel_ldr/kernel_ldr$(strip $2).bin kernel/kernel$(strip $2).bin mesosphere$(strip $2).bin
|
||||
@python build_mesosphere.py kernel_ldr/kernel_ldr$(strip $2).bin kernel/kernel$(strip $2).bin mesosphere$(strip $2).bin $(4)
|
||||
@echo "Built mesosphere$(strip $2).bin..."
|
||||
|
||||
kernel/kernel$(strip $2).bin: check_libmeso$(strip $1)
|
||||
@$$(MAKE) -C kernel $(strip $1)
|
||||
@$$(MAKE) -C kernel $(strip $1) $(3)
|
||||
|
||||
kernel_ldr/kernel_ldr$(strip $2).bin: check_libmeso$(strip $1)
|
||||
@$$(MAKE) -C kernel_ldr $(strip $1)
|
||||
@$$(MAKE) -C kernel_ldr $(strip $1) $(3)
|
||||
|
||||
check_libmeso$(strip $1):
|
||||
@$$(MAKE) -C ../libraries/libmesosphere $(strip $1)
|
||||
@$$(MAKE) -C ../libraries/libmesosphere $(strip $1) $(3)
|
||||
|
||||
clean-$(strip $1):
|
||||
@$$(MAKE) -C ../libraries/libmesosphere clean-$(strip $1)
|
||||
@$$(MAKE) -C kernel clean-$(strip $1)
|
||||
@$$(MAKE) -C kernel_ldr clean-$(strip $1)
|
||||
@$$(MAKE) -C ../libraries/libmesosphere clean-$(strip $1) $(3)
|
||||
@$$(MAKE) -C kernel clean-$(strip $1) $(3)
|
||||
@$$(MAKE) -C kernel_ldr clean-$(strip $1) $(3)
|
||||
@rm -f mesosphere$(strip $2).bin
|
||||
|
||||
endef
|
||||
|
||||
$(eval $(call ATMOSPHERE_ADD_TARGET, release, ,))
|
||||
$(eval $(call ATMOSPHERE_ADD_TARGET, debug, _debug,))
|
||||
$(eval $(call ATMOSPHERE_ADD_TARGET, audit, _audit,))
|
||||
$(eval $(call ATMOSPHERE_ADD_TARGET, release, ,,))
|
||||
$(eval $(call ATMOSPHERE_ADD_TARGET, debug, _debug,,))
|
||||
$(eval $(call ATMOSPHERE_ADD_TARGET, audit, _audit,,))
|
||||
|
||||
$(eval $(call ATMOSPHERE_ADD_TARGET, qemu_virt_release, _qemu_virt, \
|
||||
ATMOSPHERE_BOARD="qemu-virt" \
|
||||
ATMOSPHERE_CPU="arm-cortex-a57" \
|
||||
, ../tests/TestSvc/TestSvc.kip \
|
||||
))
|
||||
|
||||
$(eval $(call ATMOSPHERE_ADD_TARGET, qemu_virt_debug, _qemu_virt_debug, \
|
||||
ATMOSPHERE_BOARD="qemu-virt" \
|
||||
ATMOSPHERE_CPU="arm-cortex-a57" \
|
||||
, ../tests/TestSvc/TestSvc.kip \
|
||||
))
|
||||
|
||||
$(eval $(call ATMOSPHERE_ADD_TARGET, qemu_virt_audit, _qemu_virt_audit, \
|
||||
ATMOSPHERE_BOARD="qemu-virt" \
|
||||
ATMOSPHERE_CPU="arm-cortex-a57" \
|
||||
, ../tests/TestSvc/TestSvc.kip \
|
||||
))
|
||||
|
||||
clean:
|
||||
@$(MAKE) -C ../libraries/libmesosphere clean
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -85,6 +85,18 @@ $(eval $(call ATMOSPHERE_ADD_TARGET, audit, _audit, \
|
||||
ATMOSPHERE_BUILD_SETTINGS="-DMESOSPHERE_BUILD_FOR_AUDITING" \
|
||||
))
|
||||
|
||||
$(eval $(call ATMOSPHERE_ADD_TARGET, qemu_virt_release, _qemu_virt, \
|
||||
ATMOSPHERE_BUILD_SETTINGS="" \
|
||||
))
|
||||
|
||||
$(eval $(call ATMOSPHERE_ADD_TARGET, qemu_virt_debug, _qemu_virt_debug, \
|
||||
ATMOSPHERE_BUILD_SETTINGS="-DMESOSPHERE_BUILD_FOR_DEBUGGING" \
|
||||
))
|
||||
|
||||
$(eval $(call ATMOSPHERE_ADD_TARGET, qemu_virt_audit, _qemu_virt_audit, \
|
||||
ATMOSPHERE_BUILD_SETTINGS="-DMESOSPHERE_BUILD_FOR_AUDITING" \
|
||||
))
|
||||
|
||||
$(ATMOSPHERE_BUILD_DIR)/%:
|
||||
@[ -d $@ ] || mkdir -p $@
|
||||
|
||||
|
||||
@@ -85,6 +85,18 @@ $(eval $(call ATMOSPHERE_ADD_TARGET, audit, _audit, \
|
||||
ATMOSPHERE_BUILD_SETTINGS="-DMESOSPHERE_BUILD_FOR_AUDITING" \
|
||||
))
|
||||
|
||||
$(eval $(call ATMOSPHERE_ADD_TARGET, qemu_virt_release, _qemu_virt, \
|
||||
ATMOSPHERE_BUILD_SETTINGS="" \
|
||||
))
|
||||
|
||||
$(eval $(call ATMOSPHERE_ADD_TARGET, qemu_virt_debug, _qemu_virt_debug, \
|
||||
ATMOSPHERE_BUILD_SETTINGS="-DMESOSPHERE_BUILD_FOR_DEBUGGING" \
|
||||
))
|
||||
|
||||
$(eval $(call ATMOSPHERE_ADD_TARGET, qemu_virt_audit, _qemu_virt_audit, \
|
||||
ATMOSPHERE_BUILD_SETTINGS="-DMESOSPHERE_BUILD_FOR_AUDITING" \
|
||||
))
|
||||
|
||||
$(ATMOSPHERE_BUILD_DIR)/%:
|
||||
@[ -d $@ ] || mkdir -p $@
|
||||
|
||||
|
||||
Reference in New Issue
Block a user