Unfortunately, I can't reproduce that here.

This has been built and tested on all arches by myself and others, but
I can try again .. just no promises when I'll get back to it.

Bruce

On 02/28/2018 11:38 AM, Burton, Ross wrote:
Sorry, but this breaks on ARM:

ERROR: kernel-devsrc-1.0-r0 do_install: Function failed: do_install (log file is located at /home/pokybuild/yocto-autobuilder/yocto-worker/nightly-arm/build/build/tmp/work/qemuarm-poky-linux-gnueabi/kernel-devsrc/1.0-r0/temp/log.do_install.25822) ERROR: Logfile of failure stored in: /home/pokybuild/yocto-autobuilder/yocto-worker/nightly-arm/build/build/tmp/work/qemuarm-poky-linux-gnueabi/kernel-devsrc/1.0-r0/temp/log.do_install.25822
Log data follows:
| DEBUG: Executing shell function do_install
| cp: with --parents, the destination must be a directory
| Try 'cp --help' for more information.
| WARNING: /home/pokybuild/yocto-autobuilder/yocto-worker/nightly-arm/build/build/tmp/work/qemuarm-poky-linux-gnueabi/kernel-devsrc/1.0-r0/temp/run.do_install.25822:1 exit 1 from 'rm -rf $kerneldir/build/include' | ERROR: Function failed: do_install (log file is located at /home/pokybuild/yocto-autobuilder/yocto-worker/nightly-arm/build/build/tmp/work/qemuarm-poky-linux-gnueabi/kernel-devsrc/1.0-r0/temp/log.do_install.25822)

Ross

On 28 February 2018 at 02:06, Bruce Ashfield <bruce.ashfi...@windriver.com <mailto:bruce.ashfi...@windriver.com>> wrote:

    The existing kernel-devsrc package starts with a full copy of the kernel
    source and then starts to strip out elements that are not required.

    This results in extra time (I/O) and extra space being taken up in the
    final package. The main purpose of the kernel-devsrc package has been to
    build modules against the running kernel, not to include a full copy of
    the source code for re-building the kernel. The end result was a
    600M kernel-devsrc package.

    This restructuring of the package uses an approach similar to other
    distros, where the kernel-devsrc package is for building against the
    running kernel and uses a curated set of copied infrastructure, versus
    a mass copy of the entire kernel.

    The differences in this approach versus other is largely due to the
    architecture support and the split build/source directory of the
    kernel.

    The result is a kernel-devsrc package of about 10M, which is capable
    of running "make scripts" and compiling kernel modules against the
    running kernel.

    Along with the changes to the copying of the infrascture, we also
    have the following changes:

      - a better/more explicit listing of dependencies for on-target
        builds of "make scripts" or "make modules_prepare"

      - The kernel source is installed into /lib/modules/<version>/build
        and a symlink created from /usr/src/kernel to the new location.
        This aligns with the standard location for module support
        code

      - There is also a symlink from /lib/modules/<version>/source -> build
        to reserve a spot for a new package that is simply the kernel
        source. That package is not part of this update.

    [YOCTO #12535]

    Signed-off-by: Bruce Ashfield <bruce.ashfi...@windriver.com
    <mailto:bruce.ashfi...@windriver.com>>
    ---
      meta/recipes-kernel/linux/kernel-devsrc.bb
    <http://kernel-devsrc.bb> | 178 ++++++++++++++++++++++-------
      1 file changed, 138 insertions(+), 40 deletions(-)

    diff --git a/meta/recipes-kernel/linux/kernel-devsrc.bb
    <http://kernel-devsrc.bb>
    b/meta/recipes-kernel/linux/kernel-devsrc.bb <http://kernel-devsrc.bb>
    index c1b5b7786d7c..f55b115e0936 100644
    --- a/meta/recipes-kernel/linux/kernel-devsrc.bb
    <http://kernel-devsrc.bb>
    +++ b/meta/recipes-kernel/linux/kernel-devsrc.bb
    <http://kernel-devsrc.bb>
    @@ -30,50 +30,148 @@ do_populate_sysroot[noexec] = "1"
      S = "${STAGING_KERNEL_DIR}"
      B = "${STAGING_KERNEL_BUILDDIR}"

    -KERNEL_VERSION = "${@get_kernelversion_headers('${S}')}"
    -
      PACKAGE_ARCH = "${MACHINE_ARCH}"

    +KERNEL_BUILD_ROOT="/lib/modules/"
    +
      do_install() {
    -        kerneldir=${D}${KERNEL_SRC_PATH}
    -        install -d $kerneldir
    -
    -        #
    -        # Copy the staging dir source (and module build support)
    into the devsrc structure.
    -        # We can keep this copy simple and take everything, since a
    we'll clean up any build
    -        # artifacts afterwards, and the extra i/o is not significant
    -        #
    -        cd ${B}
    -        find . -type d -name '.git*' -prune -o -path '.debug'
    -prune -o -type f -print0 | cpio --null -pdlu $kerneldir
    -        cd ${S}
    -       find . -type d -name '.git*' -prune -o -type d -name
    '.kernel-meta' -prune -o -type f -print0 | cpio --null -pdlu $kerneldir
    -
    -        # Explicitly set KBUILD_OUTPUT to ensure that the image
    directory is cleaned and not
    -        # The main build artifacts. We clean the directory to avoid
    QA errors on mismatched
    -        # architecture (since scripts and helpers are native format).
    -        KBUILD_OUTPUT="$kerneldir"
    -        oe_runmake -C $kerneldir CC="${KERNEL_CC}"
    LD="${KERNEL_LD}" clean _mrproper_scripts
    -        # make clean generates an absolute path symlink called "source"
    -        # in $kerneldir points to $kerneldir, which doesn't make any
    -        # sense, so remove it.
    -        if [ -L $kerneldir/source ]; then
    -            bbnote "Removing $kerneldir/source symlink"
    -            rm -f $kerneldir/source
    -        fi
    -
    -        # As of Linux kernel version 3.0.1, the clean target removes
    -        # arch/powerpc/lib/crtsavres.o which is present in
    -        # KBUILD_LDFLAGS_MODULE, making it required to build
    external modules.
    -        if [ ${ARCH} = "powerpc" ]; then
    -                mkdir -p $kerneldir/arch/powerpc/lib/
    -                cp ${B}/arch/powerpc/lib/crtsavres.o
    $kerneldir/arch/powerpc/lib/crtsavres.o
    -        fi
    -
    -        chown -R root:root ${D}
    +    kerneldir=${D}${KERNEL_BUILD_ROOT}${KERNEL_VERSION}
    +    install -d $kerneldir
    +
    +    # create the directory structure
    +    rm -f $kerneldir/build
    +    rm -f $kerneldir/source
    +    mkdir -p $kerneldir/build
    +
    +    # for compatibility with some older variants of this package, we
    +    # create  a /usr/src/kernel symlink to
    /lib/modules/<version>/source
    +    mkdir -p ${D}/usr/src
    +    (
    +       cd ${D}/usr/src
    +       ln -s ${KERNEL_BUILD_ROOT}${KERNEL_VERSION}/source kernel
    +    )
    +
    +    # for on target purposes, we unify build and source
    +    (
    +       cd $kerneldir
    +       ln -s build source
    +    )
    +
    +    # first copy everything
    +    (
    +       cd ${S}
    +       cp --parents $(find  -type f -name "Makefile*" -o -name
    "Kconfig*") $kerneldir/build
    +    )
    +
    +    # then drop all but the needed Makefiles/Kconfig files
    +    rm -rf $kerneldir/build/Documentation
    +    rm -rf $kerneldir/build/scripts
    +    rm -rf $kerneldir/build/include
    +
    +    # now copy in parts from the build that we'll need later
    +    (
    +       cd ${B}
    +
    +       cp Module.symvers $kerneldir/build
    +       cp System.map* $kerneldir/build
    +       if [ -s Module.markers ]; then
    +           cp Module.markers $kerneldir/build
    +       fi
    +
    +       cp .config $kerneldir/build
    +
    +       # TODO: this scripts copy will likely blow up QA, so for now, we
    +       #       require a more complex 'make scripts' to restore
    these, versus
    +       #       copying them here. Left as a reference to indicate
    that we
    +       #       know the scripts must be dealt with.
    +       # cp -a scripts $kerneldir/build
    +
    +       if [ -f tools/objtool/objtool ]; then
    +           cp -a tools/objtool/objtool $kerneldir/build/tools/objtool/
    +       fi
    +       if [ -d arch/${ARCH}/scripts ]; then
    +           cp -a arch/${ARCH}/scripts $kerneldir/build/arch/${ARCH}
    +       fi
    +       if [ -f arch/${ARCH}/*lds ]; then
    +           cp -a arch/${ARCH}/*lds $kerneldir/build/arch/${ARCH}
    +       fi
    +
    +       rm -f $kerneldir/build/scripts/*.o
    +       rm -f $kerneldir/build/scripts/*/*.o
    +
    +       if [ "${ARCH}" = "powerpc" ]; then
    +           cp -a --parents arch/powerpc/lib/crtsavres.[So]
    $kerneldir/build/
    +       fi
    +
    +       cp -a include $kerneldir/build/include
    +    )
    +
    +    # now grab the chunks from the source tree that we need
    +    (
    +       cd ${S}
    +
    +       cp -a scripts $kerneldir/build
    +       if [ "${ARCH}" = "arm64" ]; then
    +           # arch/arm64/include/asm/xen references arch/arm
    +           cp -a --parents arch/arm/include/asm/xen $kerneldir/build/
    +           # arch/arm64/include/asm/opcodes.h references arch/arm
    +           cp -a --parents arch/arm/include/asm/opcodes.h
    $kerneldir/build/
    +       fi
    +
    +       # include the machine specific headers for ARM variants, if
    available.
    +       if [ "${ARCH}" = "arm" ]; then
    +           cp -a --parents arch/${ARCH}/mach-*/include
    $kerneldir/build/
    +
    +           # include a few files for 'make prepare'
    +           cp -a --parents arch/arm/tools/gen-mach-types
    $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/
    +           cp -a --parents arch/arm/tools/mach-types
    $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/
    +       fi
    +
    +       if [ -d arch/${ARCH}/include ]; then
    +           cp -a --parents arch/${ARCH}/include $kerneldir/build/
    +       fi
    +
    +       cp -a include $kerneldir/build
    +
    +       if [ "${ARCH}" = "x86" ]; then
    +           # files for 'make prepare' to succeed with kernel-devel
    +           cp -a --parents arch/x86/entry/syscalls/syscall_32.tbl
    $kerneldir/build/
    +           cp -a --parents arch/x86/entry/syscalls/syscalltbl.sh
    $kerneldir/build/
    +           cp -a --parents arch/x86/entry/syscalls/syscallhdr.sh
    $kerneldir/build/
    +           cp -a --parents arch/x86/entry/syscalls/syscall_64.tbl
    $kerneldir/build/
    +           cp -a --parents arch/x86/tools/relocs_32.c $kerneldir/build/
    +           cp -a --parents arch/x86/tools/relocs_64.c $kerneldir/build/
    +           cp -a --parents arch/x86/tools/relocs.c $kerneldir/build/
    +           cp -a --parents arch/x86/tools/relocs_common.c
    $kerneldir/build/
    +           cp -a --parents arch/x86/tools/relocs.h $kerneldir/build/
    +           cp -a --parents tools/include/tools/le_byteshift.h
    $kerneldir/build/
    +           cp -a --parents tools/include/tools/be_byteshift.h
    $kerneldir/build/
    +           cp -a --parents arch/x86/purgatory/purgatory.c
    $kerneldir/build/
    +           cp -a --parents arch/x86/purgatory/sha256.h
    $kerneldir/build/
    +           cp -a --parents arch/x86/purgatory/sha256.c
    $kerneldir/build/
    +           cp -a --parents arch/x86/purgatory/stack.S $kerneldir/build/
    +           cp -a --parents arch/x86/purgatory/string.c
    $kerneldir/build/
    +           cp -a --parents arch/x86/purgatory/setup-x86_64.S
    $kerneldir/build/
    +           cp -a --parents arch/x86/purgatory/entry64.S
    $kerneldir/build/
    +           cp -a --parents arch/x86/boot/string.h $kerneldir/build/
    +           cp -a --parents arch/x86/boot/string.c $kerneldir/build/
    +           cp -a --parents arch/x86/boot/ctype.h $kerneldir/build/
    +       fi
    +    )
    +
    +    # Make sure the Makefile and version.h have a matching
    timestamp so that
    +    # external modules can be built
    +    touch -r $kerneldir/build/Makefile
    $kerneldir/build/include/generated/uapi/linux/version.h
    +
    +    # Copy .config to include/config/auto.conf so "make prepare" is
    unnecessary.
    +    cp $kerneldir/build/.config
    $kerneldir/build/include/config/auto.conf
    +
    +    chown -R root:root ${D}
      }
    +
      # Ensure we don't race against "make scripts" during cpio
      do_install[lockfiles] = "${TMPDIR}/kernel-scripts.lock"

    -PACKAGES = "kernel-devsrc"
    -FILES_${PN} = "${KERNEL_SRC_PATH}"
    -RDEPENDS_${PN} = "bc"
    +FILES_${PN} = "${KERNEL_BUILD_ROOT} ${KERNEL_SRC_PATH}"
    +FILES_${PN}-dbg += "${KERNEL_BUILD_ROOT}*/build/scripts/*/.debug/*"
    +RDEPENDS_${PN} = "bc glibc-utils"
    --
    2.5.0



--
_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core

Reply via email to