On 2016-06-23 20:06, Jan Kiszka wrote: > On 2016-06-17 21:13, [email protected] wrote: >> From: Dmitry Voytik <[email protected]> >> >> This patch implements a loader, that can be used to boot a Linux >> kernel in a Jailhouse cell on AArch64. >> >> Signed-off-by: Dmitry Voytik <[email protected]> >> Signed-off-by: Antonios Motakis <[email protected]> >> [[email protected]: >> - split foundation-v8 configuration to a separate patch >> - small fixes in the linux loader output >> - take kernel and dtb address using cell load command line ] >> --- >> inmates/tools/arm64/Makefile | 19 +++++++++++ >> inmates/tools/arm64/linux-loader.c | 66 >> ++++++++++++++++++++++++++++++++++++++ >> 2 files changed, 85 insertions(+) >> create mode 100644 inmates/tools/arm64/linux-loader.c >> >> diff --git a/inmates/tools/arm64/Makefile b/inmates/tools/arm64/Makefile >> index e69de29..4a72277 100644 >> --- a/inmates/tools/arm64/Makefile >> +++ b/inmates/tools/arm64/Makefile >> @@ -0,0 +1,19 @@ >> +# >> +# Jailhouse, a Linux-based partitioning hypervisor >> +# >> +# Copyright (c) Siemens AG, 2013-2015 >> +# >> +# Authors: >> +# Jan Kiszka <[email protected]> >> +# >> +# This work is licensed under the terms of the GNU GPL, version 2. See >> +# the COPYING file in the top-level directory. >> +# >> + >> +include $(INMATES_LIB)/Makefile.lib >> + >> +INMATES := linux-loader.bin >> + >> +linux-loader-y := linux-loader.o >> + >> +$(eval $(call DECLARE_TARGETS,$(INMATES))) >> diff --git a/inmates/tools/arm64/linux-loader.c >> b/inmates/tools/arm64/linux-loader.c >> new file mode 100644 >> index 0000000..e8a6cac >> --- /dev/null >> +++ b/inmates/tools/arm64/linux-loader.c >> @@ -0,0 +1,66 @@ >> +/* >> + * Jailhouse AArch64 support >> + * >> + * Copyright (C) 2015 Huawei Technologies Duesseldorf GmbH >> + * >> + * Authors: >> + * Dmitry Voytik <[email protected]> >> + * >> + * This work is licensed under the terms of the GNU GPL, version 2. See >> + * the COPYING file in the top-level directory. >> + */ >> + >> +#include <inmate.h> >> + >> +/* Example memory map: >> + * 0x00000000 - 0x00003fff (16K) this binary >> + * 0x00280000 Image >> + * 0x0fe00000 dtb >> + */ >> + >> +#define CMDLINE_BUFFER_SIZE 256 >> +CMDLINE_BUFFER(CMDLINE_BUFFER_SIZE); >> + >> +struct arm64_linux_header { >> + u32 code0; /* Executable code */ >> + u32 code1; /* Executable code */ >> + u64 text_offset; /* Image load offset, little endian */ >> + u64 image_size; /* Effective Image size, little endian */ >> + u64 flags; /* kernel flags, little endian */ >> + u64 res2; /* = 0, reserved */ >> + u64 res3; /* = 0, reserved */ >> + u64 res4; /* = 0, reserved */ >> + u32 magic; /* 0x644d5241 Magic number, little endian, >> + "ARM\x64" */ >> + u32 res5; /* reserved (used for PE COFF offset) */ >> +}; >> + >> +void inmate_main(void) >> +{ >> + struct arm64_linux_header *kernel; >> + unsigned long dtb; >> + void (*entry)(unsigned long); >> + >> + printk("\nJailhouse ARM64 Linux bootloader\n"); >> + >> + kernel = (void *) cmdline_parse_int("kernel", 0); >> + dtb = cmdline_parse_int("dtb", 0); >> + >> + if (!kernel || !dtb) { >> + printk("ERROR: command line parameters kernel and dtb" >> + " are required\n"); >> + while(1); >> + } >> + >> + entry = (void*)(unsigned long) kernel; >> + >> + printk("DTB: 0x%016lx\n", dtb); >> + printk("Image: 0x%016lx\n", kernel); >> + printk("Image size: %lu Bytes\n", kernel->image_size); >> + printk("entry: 0x%016lx\n", entry); >> + if (kernel->magic != 0x644d5241) >> + printk("WARNING: wrong Linux Image header magic: 0x%08x\n", >> + kernel->magic); >> + >> + entry(dtb); >> +} >> > > How much of this is ARM64-specific, how much could be reused on 32-bit? > I'm also asking because I'd like to address that topic over there soon.
OK, it is very much ARM64 - found the ARM booting description by now. Jan -- Siemens AG, Corporate Technology, CT RDA ITP SES-DE Corporate Competence Center Embedded Linux -- You received this message because you are subscribed to the Google Groups "Jailhouse" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
