[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v2 1/4] Support for building in a Xen binary



On Tue, Nov 22, 2016 at 03:09:14PM +0000, Andre Przywara wrote:
> From: Christoffer Dall <christoffer.dall@xxxxxxxxxx>
> 
> Add support for building a Xen binary which includes a Dom0 image and
> the Dom0 command-line.
> 
> If the user specifies --with-xen=<Xen>, where Xen is an appropriate
> AArch64 Xen binary, the build system will generate a xen-system.axf
> instead of a linux-system.axf.
> 
> Original patch from Ian Campbell, but I modified most of it so all bugs
> are probably mine.
> [Andre: adapt to newest boot-wrapper branch, increase load address,
>       fixup Xen image file test]
> 
> Cc: Ian Campbell <ijc@xxxxxxxxxxxxxx>
> Signed-off-by: Christoffer Dall <christoffer.dall@xxxxxxxxxx>
> Signed-off-by: Andre Przywara <andre.przywara@xxxxxxx>

Tested-by: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>

And also
Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>
> ---
>  .gitignore    |  1 +
>  Makefile.am   | 10 +++++++---
>  boot_common.c |  4 ++--
>  configure.ac  | 17 +++++++++++++++++
>  model.lds.S   | 14 ++++++++++++++
>  5 files changed, 41 insertions(+), 5 deletions(-)
> 
> diff --git a/.gitignore b/.gitignore
> index 8653852..80770c0 100644
> --- a/.gitignore
> +++ b/.gitignore
> @@ -14,6 +14,7 @@ configure
>  dtc
>  fdt.dtb
>  Image
> +Xen
>  install-sh
>  Makefile
>  Makefile.in
> diff --git a/Makefile.am b/Makefile.am
> index 692d2cc..f8b9ec9 100644
> --- a/Makefile.am
> +++ b/Makefile.am
> @@ -85,7 +85,6 @@ TEXT_LIMIT  := 0x80080000
>  endif
>  
>  LD_SCRIPT    := model.lds.S
> -IMAGE                := linux-system.axf
>  
>  FS_OFFSET    := 0x10000000
>  FILESYSTEM_START:= $(shell echo $$(($(PHYS_OFFSET) + $(FS_OFFSET))))
> @@ -94,6 +93,11 @@ FILESYSTEM_END     := $(shell echo $$(($(FILESYSTEM_START) 
> + $(FILESYSTEM_SIZE))))
>  
>  FDT_OFFSET   := 0x08000000
>  
> +if XEN
> +XEN          := -DXEN=$(XEN_IMAGE)
> +XEN_OFFSET   := 0x08200000
> +endif
> +
>  if INITRD
>  INITRD_FLAGS := -DUSE_INITRD
>  CHOSEN_NODE  := chosen {                                             \
> @@ -121,7 +125,7 @@ all: $(IMAGE)
>  
>  CLEANFILES = $(IMAGE) $(OFILES) model.lds fdt.dtb
>  
> -$(IMAGE): $(OFILES) model.lds fdt.dtb $(KERNEL_IMAGE) $(FILESYSTEM)
> +$(IMAGE): $(OFILES) model.lds fdt.dtb $(KERNEL_IMAGE) $(FILESYSTEM) 
> $(XEN_IMAGE)
>       $(LD) $(LDFLAGS) $(OFILES) -o $@ --script=model.lds
>  
>  %.o: %.S Makefile
> @@ -131,7 +135,7 @@ $(IMAGE): $(OFILES) model.lds fdt.dtb $(KERNEL_IMAGE) 
> $(FILESYSTEM)
>       $(CC) $(CPPFLAGS) $(CFLAGS) $(DEFINES) -c -o $@ $<
>  
>  model.lds: $(LD_SCRIPT) Makefile
> -     $(CPP) $(CPPFLAGS) -ansi -DPHYS_OFFSET=$(PHYS_OFFSET) 
> -DMBOX_OFFSET=$(MBOX_OFFSET) -DKERNEL_OFFSET=$(KERNEL_OFFSET) 
> -DFDT_OFFSET=$(FDT_OFFSET) -DFS_OFFSET=$(FS_OFFSET) -DKERNEL=$(KERNEL_IMAGE) 
> -DFILESYSTEM=$(FILESYSTEM) -DTEXT_LIMIT=$(TEXT_LIMIT) -P -C -o $@ $<
> +     $(CPP) $(CPPFLAGS) -ansi -DPHYS_OFFSET=$(PHYS_OFFSET) 
> -DMBOX_OFFSET=$(MBOX_OFFSET) -DKERNEL_OFFSET=$(KERNEL_OFFSET) 
> -DFDT_OFFSET=$(FDT_OFFSET) -DFS_OFFSET=$(FS_OFFSET) $(XEN) 
> -DXEN_OFFSET=$(XEN_OFFSET) -DKERNEL=$(KERNEL_IMAGE) 
> -DFILESYSTEM=$(FILESYSTEM) -DTEXT_LIMIT=$(TEXT_LIMIT) -P -C -o $@ $<
>  
>  fdt.dtb: $(KERNEL_DTB) Makefile gen-cpu-nodes.sh
>       ( $(DTC) -O dts -I dtb $(KERNEL_DTB) ; echo "/ { $(CHOSEN_NODE) 
> $(PSCI_NODE) $(CPUS_NODE) };" ) | $(DTC) -O dtb -o $@ -
> diff --git a/boot_common.c b/boot_common.c
> index 4947fe3..e7b8e1d 100644
> --- a/boot_common.c
> +++ b/boot_common.c
> @@ -9,7 +9,7 @@
>  #include <cpu.h>
>  #include <spin.h>
>  
> -extern unsigned long kernel;
> +extern unsigned long entrypoint;
>  extern unsigned long dtb;
>  
>  void init_platform(void);
> @@ -67,7 +67,7 @@ void __noreturn first_spin(unsigned int cpu, unsigned long 
> *mbox,
>       if (cpu == 0) {
>               init_platform();
>  
> -             *mbox = (unsigned long)&kernel;
> +             *mbox = (unsigned long)&entrypoint;
>               sevl();
>               spin(mbox, invalid, 1);
>       } else {
> diff --git a/configure.ac b/configure.ac
> index ab8f5b3..f7e24c7 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -40,6 +40,18 @@ AC_ARG_WITH([dtb],
>       AS_HELP_STRING([--with-dtb], [Specify a particular DTB to use]),
>       [KERN_DTB="$withval"])
>  
> +AC_ARG_WITH([xen],
> +     AS_HELP_STRING([--with-xen], [Compile for Xen, and Specify a particular 
> Xen to use]),
> +     X_IMAGE=$withval)
> +
> +AS_IF([test "x$X_IMAGE" == "x"], [],
> +      [AS_IF([test ! -f "$X_IMAGE"],
> +          [AC_MSG_ERROR([Could not find Xen hypervisor binary: $X_IMAGE])]
> +      )]
> +)
> +AC_SUBST([XEN_IMAGE], [$X_IMAGE])
> +AM_CONDITIONAL([XEN], [test "x$X_IMAGE" != "x"])
> +
>  # Ensure that the user has provided us with a sane kernel dir.
>  m4_define([CHECKFILES], [KERN_DIR,
>       KERN_DTB,
> @@ -50,6 +62,10 @@ m4_foreach([checkfile], [CHECKFILES],
>  
>  AC_SUBST([KERNEL_IMAGE], [$KERN_IMAGE])
>  AC_SUBST([KERNEL_DTB], [$KERN_DTB])
> +AS_IF([test "x$X_IMAGE" != "x"],
> +      [AC_SUBST([IMAGE], ["xen-system.axf"])],
> +      [AC_SUBST([IMAGE], ["linux-system.axf"])]
> +)
>  
>  # Allow a user to pass --enable-psci
>  AC_ARG_ENABLE([psci],
> @@ -119,4 +135,5 @@ echo "  CPU IDs:                           ${CPU_IDS}"
>  echo "  Use GICv3?                         ${USE_GICV3}"
>  echo "  Boot-wrapper execution state:      AArch${BOOTWRAPPER_ES}"
>  echo "  Kernel execution state:            AArch${KERNEL_ES}"
> +echo "  Xen image                          ${XEN_IMAGE:-NONE}"
>  echo ""
> diff --git a/model.lds.S b/model.lds.S
> index 51c5684..511f552 100644
> --- a/model.lds.S
> +++ b/model.lds.S
> @@ -16,6 +16,9 @@ OUTPUT_ARCH(aarch64)
>  #endif
>  TARGET(binary)
>  
> +#ifdef XEN
> +INPUT(XEN)
> +#endif
>  INPUT(KERNEL)
>  INPUT(./fdt.dtb)
>  
> @@ -36,6 +39,17 @@ SECTIONS
>               KERNEL
>       }
>  
> +#ifdef XEN
> +     .xen (PHYS_OFFSET + XEN_OFFSET): {
> +             xen = .;
> +             XEN
> +     }
> +
> +     entrypoint = xen;
> +#else
> +     entrypoint = kernel;
> +#endif
> +
>       .dtb (PHYS_OFFSET + FDT_OFFSET): {
>               dtb = .;
>               ./fdt.dtb
> -- 
> 2.9.0
> 
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxx
> https://lists.xen.org/xen-devel

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.