[boot-wrapper-aarch64 PATCH] configure: Do not force kernel-dir as a mandatory input

Mark Rutland mark.rutland at arm.com
Mon Jul 15 05:09:43 PDT 2024


Hi,

On Thu, May 23, 2024 at 01:49:31PM +0200, Akos Denke wrote:
> kernel-dir was required to fulfill the real dependencies:
>  * kernel image
>  * dtc
>  * dtb
> 
> There are already checks for all of these real dependencies, so passing
> the `--with-kernel-dir` does not need to be mandatory, in the case these
> dependencies are provided separately.
> 
> An autoconf `--with-kernel-image` argument was added which allows to
> specify the image with its exact location.
> The `dtc` can be already provided via the PATH variable, whilst we
> already have a `--with-dtb` argument to pass a specific `dtb` file.
> These facts together deprecates the mandatoriness of kernel-dir and
> allows to provide any arbitrary kernel image, with dtb, dtc and
> initramfs, without a need for an assumed kernel directory structure.
> 
> This makes the boot-wrapper building easier for prebuilt kernels, where
> we do not control the directory structure of the kernel artifacts.
> 
> Signed-off-by: Akos Denke <akos.denke at arm.com>
> ---
>  configure.ac | 21 ++++++++++++---------
>  1 file changed, 12 insertions(+), 9 deletions(-)
> 
> diff --git a/configure.ac b/configure.ac
> index 9e3b722..768506f 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -27,14 +27,18 @@ AS_IF([test "x$BOOTWRAPPER_ES" = x32 -a "x$KERNEL_ES" != x32],
>  
>  # Allow a user to pass --with-kernel-dir
>  AC_ARG_WITH([kernel-dir],
> -	AS_HELP_STRING([--with-kernel-dir], [specify the root Linux kernel build directory (required)]),
> -	AC_SUBST([KERN_DIR], [$withval]),
> -	AC_MSG_ERROR([No kernel directory specified. Use --with-kernel-dir]))
> +	AS_HELP_STRING([--with-kernel-dir], [specify the root Linux kernel build directory]),
> +	AC_SUBST([KERN_DIR], [$withval]))
>  AS_IF([test "x$KERNEL_ES" = x32],
>  	[KERN_IMAGE=$KERN_DIR/arch/arm/boot/zImage],
>  	[KERN_IMAGE=$KERN_DIR/arch/arm64/boot/Image])
>  KERN_DTB=$KERN_DIR/arch/arm64/boot/dts/arm/fvp-base-revc.dtb
>  
> +# Allow a user to pass a specific kernel image file
> +AC_ARG_WITH([kernel-image],
> +	AS_HELP_STRING([--with-kernel-image], [specify kernel image]),
> +	AC_SUBST([KERN_IMAGE], [$withval]))
> +
>  # Allow the user to override the default DTB
>  AC_ARG_WITH([dtb],
>  	AS_HELP_STRING([--with-dtb], [Specify a particular DTB to use]),
> @@ -52,11 +56,6 @@ AS_IF([test "x$X_IMAGE" == "x"], [],
>  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.
> -if ! test -d $KERN_DIR; then
> -	AC_MSG_ERROR([Could not find Linux kernel dir: $KERN_DIR.])
> -fi

With this gone, if the user doesn't pass '--with-kernel-dir', the
defaults for KERN_IMAGE and KERN_DTB end up being absolute paths:

	/arch/arm64/boot/Image (or /arch/arm/boot/zImage)

	/arch/arm64/boot/dts/arm/fvp-base-revc.dtb

It would be nice if there could be an error message when:

* Neither '--with-kernel-dir' nor '--with-kernel-image' are specified.

* Neither '--with-kernel-dir' nor '--with-dtb' are specified.

> -
>  AC_MSG_CHECKING([whether DTB file exists])
>  if ! test -f $KERN_DTB; then
>  	AC_MSG_RESULT([no])
> @@ -126,7 +125,7 @@ AC_PROG_SED
>  AC_PROG_LN_S
>  AC_PATH_PROG([DTC], dtc, error, [$PATH$PATH_SEPARATOR$KERN_DIR/scripts/dtc])
>  if test "x$DTC" = "xerror"; then
> -	AC_MSG_ERROR([cannot find the device tree compiler (dtc)])
> +	AC_MSG_ERROR([cannot find the device tree compiler (dtc). Use --with-kernel-dir or put dtc on the PATH])
>  fi
>  AC_CHECK_TOOL(LD, ld)

This looks good.

>  
> @@ -139,8 +138,12 @@ echo ""
>  echo "  Boot wrapper configuration"
>  echo "  =========================="
>  echo ""
> +if test "x${KERN_DIR}" != "x"; then
>  echo "  Linux kernel build dir:            ${KERN_DIR}"
> +fi

I'f prefer if we make this unconditional:

  echo "  Linux kernel build dir:            ${KERN_DIR:-NONE}"

... since that'll make unintentional absence of the option a bit more
obvious, and easier to debug.

I've tried to fix that up as below; could you please check that this
works for you?

Mark.
---->8----
>From f9ad9d640a06fdc2c2ca85d977131b8a504d045d Mon Sep 17 00:00:00 2001
From: Akos Denke <akos.denke at arm.com>
Date: Thu, 23 May 2024 13:49:31 +0200
Subject: [PATCH] configure: make --with-kernel-dir optional

Currently it is mandatory to specify the kernel directory via
--with-kernel-dir, and this is used to generate default paths for the
kernel image, dtb, and dtc.

All of these paths can all be provided by the user, e.g. the kernel
image path can be provided by --with-kernel-image, and an alternative
dtc can be added to $PATH. When all of these are provided by the user,
there's no real need for the kernel directory.

Drop the requirement for --with-kernel-dir when other paths are provided
explicitly. This makes it easier to use the boot-wrapper with prebuilt
kernels, where we do not control the directory structure of the kernel
artifacts.

Signed-off-by: Akos Denke <akos.denke at arm.com>
Reviewed-by: Andre Przywara <andre.przywara at arm.com>
Signed-off-by: Mark Rutland <mark.rutland at arm.com>
[Mark: simplify commit message, rework option parsing, always log kernel dir]
Link: https://lore.kernel.org/r/20240523114931.2093222-1-akos.denke@arm.com
---
 configure.ac | 40 ++++++++++++++++++++++++++--------------
 1 file changed, 26 insertions(+), 14 deletions(-)

diff --git a/configure.ac b/configure.ac
index 9e3b722..ce41dae 100644
--- a/configure.ac
+++ b/configure.ac
@@ -27,18 +27,33 @@ AS_IF([test "x$BOOTWRAPPER_ES" = x32 -a "x$KERNEL_ES" != x32],
 
 # Allow a user to pass --with-kernel-dir
 AC_ARG_WITH([kernel-dir],
-	AS_HELP_STRING([--with-kernel-dir], [specify the root Linux kernel build directory (required)]),
+	AS_HELP_STRING([--with-kernel-dir], [specify the root Linux kernel build directory]),
 	AC_SUBST([KERN_DIR], [$withval]),
-	AC_MSG_ERROR([No kernel directory specified. Use --with-kernel-dir]))
-AS_IF([test "x$KERNEL_ES" = x32],
-	[KERN_IMAGE=$KERN_DIR/arch/arm/boot/zImage],
-	[KERN_IMAGE=$KERN_DIR/arch/arm64/boot/Image])
-KERN_DTB=$KERN_DIR/arch/arm64/boot/dts/arm/fvp-base-revc.dtb
+	AC_MSG_NOTICE([Kernel dir not specified])
+)
+
+# Allow a user to pass a specific kernel image file
+AC_ARG_WITH([kernel-image],
+	AS_HELP_STRING([--with-kernel-image], [specify kernel image]),
+	AC_SUBST([KERN_IMAGE], [$withval]),
+	AS_IF([test "x$KERN_DIR" != "x"],
+		AS_IF([test "x$KERNEL_ES" = x32],
+			[KERN_IMAGE=$KERN_DIR/arch/arm/boot/zImage],
+			[KERN_IMAGE=$KERN_DIR/arch/arm64/boot/Image]
+		),
+		AC_MSG_ERROR([No kernel image specified. Use --with-kernel-image or --with-kernel-dir])
+	)
+)
 
 # Allow the user to override the default DTB
 AC_ARG_WITH([dtb],
 	AS_HELP_STRING([--with-dtb], [Specify a particular DTB to use]),
-	[KERN_DTB="$withval"])
+	[KERN_DTB="$withval"],
+	AS_IF([test "x$KERN_DIR" != "x"],
+		[KERN_DTB=$KERN_DIR/arch/arm64/boot/dts/arm/fvp-base-revc.dtb],
+		AC_MSG_ERROR([No DTB specified. Use --with-dtb or --with-kernel-dir])
+	)
+)
 
 AC_ARG_WITH([xen],
 	AS_HELP_STRING([--with-xen], [Compile for Xen, and specify a particular Xen to use]),
@@ -52,11 +67,6 @@ AS_IF([test "x$X_IMAGE" == "x"], [],
 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.
-if ! test -d $KERN_DIR; then
-	AC_MSG_ERROR([Could not find Linux kernel dir: $KERN_DIR.])
-fi
-
 AC_MSG_CHECKING([whether DTB file exists])
 if ! test -f $KERN_DTB; then
 	AC_MSG_RESULT([no])
@@ -126,7 +136,7 @@ AC_PROG_SED
 AC_PROG_LN_S
 AC_PATH_PROG([DTC], dtc, error, [$PATH$PATH_SEPARATOR$KERN_DIR/scripts/dtc])
 if test "x$DTC" = "xerror"; then
-	AC_MSG_ERROR([cannot find the device tree compiler (dtc)])
+	AC_MSG_ERROR([cannot find the device tree compiler (dtc). Use --with-kernel-dir or put dtc on the PATH])
 fi
 AC_CHECK_TOOL(LD, ld)
 
@@ -139,8 +149,10 @@ echo ""
 echo "  Boot wrapper configuration"
 echo "  =========================="
 echo ""
-echo "  Linux kernel build dir:            ${KERN_DIR}"
+echo "  Linux kernel build dir:            ${KERN_DIR:-NONE}"
+echo "  Linux kernel image:                ${KERN_IMAGE}"
 echo "  Device tree blob:                  ${KERN_DTB}"
+echo "  Device tree compiler:              ${DTC}"
 echo "  Linux kernel command line:         ${CMDLINE}"
 echo "  Embedded initrd:                   ${FILESYSTEM:-NONE}"
 echo "  Use PSCI?                          ${USE_PSCI}"
-- 
2.30.2




More information about the linux-arm-kernel mailing list