[oe] [meta-initramfs][PATCH] kexec-tools-klibc: implement the --no-dtb option for older mips kernels

Andrea Adami andrea.adami at gmail.com
Mon Dec 17 18:11:53 UTC 2018


On Mon, Dec 17, 2018 at 5:59 PM Khem Raj <raj.khem at gmail.com> wrote:
>
> Can you rebase it on master-next please
Sure, sorry
Cheers
Andrea


> On Mon, Dec 17, 2018 at 2:35 AM Andrea Adami <andrea.adami at gmail.com> wrote:
> >
> > Fix borrowed from LEDE-DEV.
> >
> > Signed-off-by: Andrea Adami <andrea.adami at gmail.com>
> > ---
> >  .../140-mips_disable_devicetree_support.patch | 163 ++++++++++++++++++
> >  .../kexec/kexec-tools-klibc_git.bb            |   8 +-
> >  2 files changed, 169 insertions(+), 2 deletions(-)
> >  create mode 100644 meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc/140-mips_disable_devicetree_support.patch
> >
> > diff --git a/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc/140-mips_disable_devicetree_support.patch b/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc/140-mips_disable_devicetree_support.patch
> > new file mode 100644
> > index 000000000..b3ef3c82d
> > --- /dev/null
> > +++ b/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc/140-mips_disable_devicetree_support.patch
> > @@ -0,0 +1,163 @@
> > +From 5ea7cd78cd252ffd3a9f3fbc8dc795d6e1596084 Mon Sep 17 00:00:00 2001
> > +From: Andrea Adami <andrea.adami at gmail.com>
> > +Date: Mon, 17 Dec 2018 11:25:20 +0100
> > +Subject: [PATCH] kexec-tools: fix non-device tree devices on mips
> > +
> > +Add additional argument '--no-dtb' which disables device tree
> > +search in currently loaded kernel.
> > +
> > +Taken from LEDE-DEV:
> > +https://patchwork.ozlabs.org/patch/852961/
> > +
> > +Rebased for kexec-tools 2.0.18
> > +Removed ppc change (unwanted ?)
> > +
> > +Signed-off-by: Konstantin Kuzov <master.nosferatu at gmail.com>
> > +Signed-off-by: Andrea Adami <andrea.adami at gmail.com>
> > +---
> > + kexec/arch/mips/include/arch/options.h |  4 +-
> > + kexec/arch/mips/kexec-elf-mips.c       | 58 ++++++++++++++------------
> > + kexec/arch/mips/kexec-mips.c           |  4 ++
> > + kexec/arch/mips/kexec-mips.h           |  1 +
> > + 4 files changed, 39 insertions(+), 28 deletions(-)
> > +
> > +diff --git a/kexec/arch/mips/include/arch/options.h b/kexec/arch/mips/include/arch/options.h
> > +index 416e224..18d2811 100644
> > +--- a/kexec/arch/mips/include/arch/options.h
> > ++++ b/kexec/arch/mips/include/arch/options.h
> > +@@ -5,6 +5,7 @@
> > + #define OPT_APPEND    (OPT_ARCH_MAX+0)
> > + #define OPT_DTB               (OPT_ARCH_MAX+1)
> > + #define OPT_RAMDISK   (OPT_ARCH_MAX+2)
> > ++#define OPT_NO_DTB    (OPT_ARCH_MAX+3)
> > +
> > + /* Options relevant to the architecture (excluding loader-specific ones),
> > +  * in this case none:
> > +@@ -14,7 +15,8 @@
> > +       {"command-line", 1, 0, OPT_APPEND}, \
> > +       {"append",       1, 0, OPT_APPEND}, \
> > +       {"dtb",         1, 0, OPT_DTB }, \
> > +-      {"initrd",      1, 0, OPT_RAMDISK },
> > ++      {"initrd",      1, 0, OPT_RAMDISK }, \
> > ++      {"no-dtb",      0, 0, OPT_NO_DTB },
> > +
> > +
> > + #define KEXEC_ARCH_OPT_STR KEXEC_OPT_STR ""
> > +diff --git a/kexec/arch/mips/kexec-elf-mips.c b/kexec/arch/mips/kexec-elf-mips.c
> > +index 849a7ba..5c0e535 100644
> > +--- a/kexec/arch/mips/kexec-elf-mips.c
> > ++++ b/kexec/arch/mips/kexec-elf-mips.c
> > +@@ -141,35 +141,37 @@ int elf_mips_load(int argc, char **argv, const char *buf, off_t len,
> > +       else
> > +               cmdline_addr = 0;
> > +
> > +-      /* MIPS systems that have been converted to use device tree
> > +-       * passed through UHI will use commandline in the DTB and
> > +-       * the DTB passed as a separate buffer. Note that
> > +-       * CMDLINE_PREFIX is skipped here intentionally, as it is
> > +-       * used only in the legacy method */
> > +-
> > +-      if (arch_options.dtb_file) {
> > +-              dtb_buf = slurp_file(arch_options.dtb_file, &dtb_length);
> > +-      } else {
> > +-              create_flatten_tree(&dtb_buf, &dtb_length, cmdline_buf + strlen(CMDLINE_PREFIX));
> > +-      }
> > +
> > +-      if (arch_options.initrd_file) {
> > +-              initrd_buf = slurp_file(arch_options.initrd_file, &initrd_size);
> > ++      if (!arch_options.no_dtb) {
> > ++              /* MIPS systems that have been converted to use device tree
> > ++               * passed through UHI will use commandline in the DTB and
> > ++               * the DTB passed as a separate buffer. Note that
> > ++               * CMDLINE_PREFIX is skipped here intentionally, as it is
> > ++               * used only in the legacy method */
> > ++
> > ++              if (arch_options.dtb_file) {
> > ++                      dtb_buf = slurp_file(arch_options.dtb_file, &dtb_length);
> > ++              } else {
> > ++                      create_flatten_tree(&dtb_buf, &dtb_length, cmdline_buf + strlen(CMDLINE_PREFIX));
> > ++              }
> > +
> > +-              /* Create initrd entries in dtb - although at this time
> > +-               * they would not point to the correct location */
> > +-              dtb_set_initrd(&dtb_buf, &dtb_length, initrd_buf, initrd_buf + initrd_size);
> > ++              if (arch_options.initrd_file) {
> > ++                      initrd_buf = slurp_file(arch_options.initrd_file, &initrd_size);
> > +
> > +-              initrd_base = add_buffer(info, initrd_buf, initrd_size,
> > +-                                      initrd_size, sizeof(void *),
> > +-                                      _ALIGN_UP(kernel_addr + kernel_size + dtb_length,
> > +-                                              pagesize), 0x0fffffff, 1);
> > ++                      /* Create initrd entries in dtb - although at this time
> > ++                       * they would not point to the correct location */
> > ++                      dtb_set_initrd(&dtb_buf, &dtb_length, initrd_buf, initrd_buf + initrd_size);
> > +
> > +-              /* Now that the buffer for initrd is prepared, update the dtb
> > +-               * with an appropriate location */
> > +-              dtb_set_initrd(&dtb_buf, &dtb_length, initrd_base, initrd_base + initrd_size);
> > +-      }
> > ++                      initrd_base = add_buffer(info, initrd_buf, initrd_size,
> > ++                                              initrd_size, sizeof(void *),
> > ++                                              _ALIGN_UP(kernel_addr + kernel_size + dtb_length,
> > ++                                                      pagesize), 0x0fffffff, 1);
> > +
> > ++                      /* Now that the buffer for initrd is prepared, update the dtb
> > ++                       * with an appropriate location */
> > ++                      dtb_set_initrd(&dtb_buf, &dtb_length, initrd_base, initrd_base + initrd_size);
> > ++              }
> > ++      }
> > +
> > +       /* This is a legacy method for commandline passing used
> > +        * currently by Octeon CPUs only */
> > +@@ -177,9 +179,11 @@ int elf_mips_load(int argc, char **argv, const char *buf, off_t len,
> > +                       sizeof(cmdline_buf), sizeof(void *),
> > +                       cmdline_addr, 0x0fffffff, 1);
> > +
> > +-      add_buffer(info, dtb_buf, dtb_length, dtb_length, 0,
> > +-              _ALIGN_UP(kernel_addr + kernel_size, pagesize),
> > +-              0x0fffffff, 1);
> > ++      if (!arch_options.no_dtb) {
> > ++              add_buffer(info, dtb_buf, dtb_length, dtb_length, 0,
> > ++                      _ALIGN_UP(kernel_addr + kernel_size, pagesize),
> > ++                      0x0fffffff, 1);
> > ++      }
> > +
> > +       return 0;
> > + }
> > +diff --git a/kexec/arch/mips/kexec-mips.c b/kexec/arch/mips/kexec-mips.c
> > +index 415c2ed..e557f8b 100644
> > +--- a/kexec/arch/mips/kexec-mips.c
> > ++++ b/kexec/arch/mips/kexec-mips.c
> > +@@ -89,6 +89,7 @@ void arch_usage(void)
> > +       "    --append=STRING       Set the kernel command line to STRING.\n"
> > +       "    --dtb=FILE            Use FILE as the device tree blob.\n"
> > +       "    --initrd=FILE         Use FILE as initial ramdisk.\n"
> > ++      "    --no-dtb              Don't try to find device tree\n"
> > +       );
> > + }
> > +
> > +@@ -121,6 +122,9 @@ int arch_process_options(int argc, char **argv)
> > +               case OPT_RAMDISK:
> > +                       arch_options.initrd_file = optarg;
> > +                       break;
> > ++              case OPT_NO_DTB:
> > ++                      arch_options.no_dtb = 1;
> > ++                      break;
> > +               default:
> > +                       break;
> > +               }
> > +diff --git a/kexec/arch/mips/kexec-mips.h b/kexec/arch/mips/kexec-mips.h
> > +index 222c815..90b21c3 100644
> > +--- a/kexec/arch/mips/kexec-mips.h
> > ++++ b/kexec/arch/mips/kexec-mips.h
> > +@@ -22,6 +22,7 @@ struct arch_options_t {
> > +       char *dtb_file;
> > +       char *initrd_file;
> > +       int core_header_type;
> > ++      int no_dtb;
> > + };
> > +
> > + extern struct memory_ranges usablemem_rgns;
> > +--
> > +2.17.1
> > +
> > diff --git a/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc_git.bb b/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc_git.bb
> > index 25f5da48d..e6e1d4bd3 100644
> > --- a/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc_git.bb
> > +++ b/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc_git.bb
> > @@ -6,14 +6,14 @@ SECTION = "kernel/userland"
> >  LICENSE = "GPLv2"
> >  LIC_FILES_CHKSUM = "file://COPYING;md5=ea5bed2f60d357618ca161ad539f7c0a \
> >                      file://kexec/kexec.c;beginline=1;endline=20;md5=af10f6ae4a8715965e648aa687ad3e09"
> > -PV = "2.0.17+git${SRCPV}"
> > +PV = "2.0.18+git${SRCPV}"
> >
> >  DEPENDS = "zlib xz"
> >
> >  inherit klibc autotools
> >
> >  SRC_URI = "git://git.kernel.org/pub/scm/utils/kernel/kexec/kexec-tools.git"
> > -SRCREV = "b9de21ef51a7ceab7122a707c188602eae22c4ee"
> > +SRCREV = "5750980cdbbc33ef75bfba6660295b932376ce15"
> >
> >  BUILD_PATCHES = "file://0001-force-static-build.patch \
> >                   file://0002-Adjust-the-order-of-headers-to-fix-build-for-musl.patch"
> > @@ -42,6 +42,9 @@ SRC_URI += "${BUILD_PATCHES} ${KLIBC_PATCHES} ${WARNING_FIXES} ${FROM_OE_CORE}"
> >
> >  SRC_URI_append_arm = " file://arm_crashdump.patch"
> >
> > +SRC_URI_append_mips = " file://140-mips_disable_devicetree_support.patch"
> > +SRC_URI_append_mipsel = " file://140-mips_disable_devicetree_support.patch"
> > +
> >  SRC_URI_append_x86 = " file://x86_sys_io.patch file://x86_basename.patch \
> >                         file://x86_vfscanf.patch file://x86_kexec_test.patch"
> >
> > @@ -66,6 +69,7 @@ CFLAGS_x86-64_append = " ${COMMON_CFLAGS} -I${STAGING_DIR_HOST}${libdir}/klibc/i
> >  CFLAGS_arm_append = " ${COMMON_CFLAGS} -I${STAGING_DIR_HOST}${libdir}/klibc/include/bits32"
> >  CFLAGS_aarch64_append = "${COMMON_CFLAGS} -I${STAGING_DIR_HOST}${libdir}/klibc/include/bits64"
> >  CFLAGS_mips_append = " ${COMMON_CFLAGS} -I${STAGING_DIR_HOST}${libdir}/klibc/include/bits32"
> > +CFLAGS_mipsel_append = " ${COMMON_CFLAGS} -I${STAGING_DIR_HOST}${libdir}/klibc/include/bits32"
> >  CFLAGS_mips64_append = " ${COMMON_CFLAGS} -I${STAGING_DIR_HOST}${libdir}/klibc/include/bits64"
> >  CFLAGS_powerpc_append = " ${COMMON_CFLAGS} -I${STAGING_DIR_HOST}${libdir}/klibc/include/bits32"
> >
> > --
> > 2.17.1
> >
> > --
> > _______________________________________________
> > Openembedded-devel mailing list
> > Openembedded-devel at lists.openembedded.org
> > http://lists.openembedded.org/mailman/listinfo/openembedded-devel


More information about the Openembedded-devel mailing list