public inbox for isar-users@googlegroups.com
 help / color / mirror / Atom feed
From: Cedric Hombourger <cedric_hombourger@mentor.com>
To: Jan Kiszka <jan.kiszka@siemens.com>, <isar-users@googlegroups.com>
Subject: Re: [PATCH L-C v4 5/5] linux-custom: rewrite to no longer depend on the kernel's builddeb
Date: Tue, 26 Nov 2019 08:42:25 +0100	[thread overview]
Message-ID: <56f1a41c-2c1a-0b68-b40c-9a61a3972298@mentor.com> (raw)
In-Reply-To: <11e0da8e-f67c-f850-47b0-e16395dbca33@siemens.com>


On 11/25/2019 8:55 PM, Jan Kiszka wrote:
> On 25.11.19 17:06, Cedric Hombourger wrote:
>> Regain control over the packaging of the Linux kernel by providing our
>> own debian recipes (debian,{control,rules} files and friends) instead
>> of using the kernel's builddeb script. This will allow generation of
>> packages for "perf" (not included in this changeset) with per distro
>> scheme (Debian and Ubuntu have differences) and maintain compatibility
>> with upstream packages generated from different source packages but
>> dependent on a certain deployment scheme (e.g. linux-base for Debian)
>>
>> Signed-off-by: Cedric Hombourger <Cedric_Hombourger@mentor.com>
>> ---
>>    doc/custom_kernel.md                          |  80 +++++++
>>    .../linux/files/build-kernel.sh               | 125 ----------
>>    meta/recipes-kernel/linux/files/debian/compat |   1 +
>>    .../linux/files/debian/control.tmpl           |  37 +++
>>    .../linux/files/debian/isar/build.tmpl        |  45 ++++
>>    .../linux/files/debian/isar/clean.tmpl        |  21 ++
>>    .../linux/files/debian/isar/common.tmpl       |  50 ++++
>>    .../linux/files/debian/isar/install.tmpl      | 213 ++++++++++++++++++
>>    .../linux/files/debian/isar/version.cfg.tmpl  |   2 +
>>    .../files/debian/linux-image.postinst.tmpl    |  29 +++
>>    .../files/debian/linux-image.postrm.tmpl      |  35 +++
>>    .../files/debian/linux-image.preinst.tmpl     |  25 ++
>>    .../linux/files/debian/linux-image.prerm.tmpl |  21 ++
>>    .../linux/files/debian/rules.tmpl             |  39 ++++
>>    meta/recipes-kernel/linux/linux-custom.inc    | 210 ++++++++++++-----
>>    15 files changed, 750 insertions(+), 183 deletions(-)
>>    create mode 100644 doc/custom_kernel.md
>>    delete mode 100644 meta/recipes-kernel/linux/files/build-kernel.sh
>>    create mode 100644 meta/recipes-kernel/linux/files/debian/compat
>>    create mode 100644 meta/recipes-kernel/linux/files/debian/control.tmpl
>>    create mode 100644 meta/recipes-kernel/linux/files/debian/isar/build.tmpl
>>    create mode 100644 meta/recipes-kernel/linux/files/debian/isar/clean.tmpl
>>    create mode 100644 meta/recipes-kernel/linux/files/debian/isar/common.tmpl
>>    create mode 100644 meta/recipes-kernel/linux/files/debian/isar/install.tmpl
>>    create mode 100644 meta/recipes-kernel/linux/files/debian/isar/version.cfg.tmpl
>>    create mode 100644 meta/recipes-kernel/linux/files/debian/linux-image.postinst.tmpl
>>    create mode 100644 meta/recipes-kernel/linux/files/debian/linux-image.postrm.tmpl
>>    create mode 100644 meta/recipes-kernel/linux/files/debian/linux-image.preinst.tmpl
>>    create mode 100644 meta/recipes-kernel/linux/files/debian/linux-image.prerm.tmpl
>>    create mode 100755 meta/recipes-kernel/linux/files/debian/rules.tmpl
>>
>> diff --git a/doc/custom_kernel.md b/doc/custom_kernel.md
>> new file mode 100644
>> index 0000000..31319d4
>> --- /dev/null
>> +++ b/doc/custom_kernel.md
>> @@ -0,0 +1,80 @@
>> +# Custom kernel recipe for Isar
>> +
>> +## Contents
>> +
>> + - [Summary](#summary)
>> + - [Features](#features)
>> + - [Future](#future)
>> + - [Examples](#examples)
>> +
>> +## Summary
>> +
>> +Isar provides a recipe to build custom kernels for Debian-based distributions.
>> +It uses templates to generate the debian meta-data (such as debian/control) and
>> +Debian's [BuildProfiles](https://wiki.debian.org/BuildProfileSpec) to handle
>> +some of the distro specific variations. It should be noted that Isar has moved
>> +away from using the kernel's builddeb script since it would not generate all
>> +the packages we need (and in particular perf).
>> +
>> +## Features
>> +
>> +The linux-custom recipe provides support for:
>> +
>> + 1. Sources to the custom Linux kernel may be specified via `SRC_URI`
>> +
>> + 2. Configure the kernel via an in-tree or an external `defconfig` via
>> +    `KERNEL_DEFCONFIG`
>> +
>> + 3. Integrate kernel configuration tweaks via configuration fragments (`.cfg`
>> +    files)
>> +
>> + 4. Patches to the linux kernel may be specified via `SRC_URI`
>> +
>> + 5. Ensure that the Isar recipe `PV` matches the kernel release identifier
>> +    (`KERNEL_RELEASE`)
>> +
>> + 6. Produce a `linux-image` package that ships the kernel image and modules
>> +
>> + 7. Allow the name of the kernel image to be changed via `KERNEL_FILE` (defaults
>> +    to `vmlinuz`)
>> +
>> + 8. Produce a `linux-headers` package which includes kernel headers and kbuild
>> +    scripts/tools
>> +
>> + 9. The `linux-headers` package shall support native and cross compiles of
>> +    out-of-tree kernel modules
>> +
>> + 10. Produce a `linux-libc-dev` package to support user-land builds
>> +
>> + 11. Only build/ship the `linux-libc-dev` package if instructed to
>> +     (`KERNEL_LIBC_DEV_DEPLOY` equals to `"1"`)
>> +
>> + 12. Support both native and cross compiles (`ISAR_CROSS_COMPILE`)
>> +
>> + 13. Support for the following kernel architectures:
>> +
>> +   * arm
>> +   * arm64
>> +   * mips
>> +   * x86
>> +
>> + 14. Support `devshell` (kernel configuration shall be applied)
>> +
>> +## Future
>> +
>> +In the future, the recipe may be extended to:
>> +
>> + 1. Package perf
>> +
>> + 2. Support inclusion/build of dts files listed in `SRC_URI`
>> +
>> + 3. Be compatible with Ubuntu
>> +
>> +## Examples
>> +
>> +The linux-custom recipe is currently used by the linux-mainline package and is
>> +used mainline recipe may be used for some basic testing. This recipe is being
>> +used by the following machines:
>> +
>> + * de0-nano-soc
>> + * qemumipsel
>> diff --git a/meta/recipes-kernel/linux/files/build-kernel.sh b/meta/recipes-kernel/linux/files/build-kernel.sh
>> deleted file mode 100644
>> index 386e58b..0000000
>> --- a/meta/recipes-kernel/linux/files/build-kernel.sh
>> +++ /dev/null
>> @@ -1,125 +0,0 @@
>> -#!/bin/bash
>> -#
>> -# Custom kernel build
>> -#
>> -# This software is a part of ISAR.
>> -# Copyright (c) Siemens AG, 2018
>> -#
>> -# SPDX-License-Identifier: MIT
>> -
>> -source /isar/common.sh
>> -
>> -host_arch=$(dpkg --print-architecture)
>> -
>> -if [ "$host_arch" != "$target_arch" ]; then
>> -    case $target_arch in
>> -    armhf)
>> -        export ARCH=arm
>> -        export CROSS_COMPILE="arm-linux-gnueabihf-"
>> -        ;;
>> -    arm64)
>> -        export ARCH=arm64
>> -        export CROSS_COMPILE="aarch64-linux-gnu-"
>> -        ;;
>> -    mipsel)
>> -        export ARCH=mips
>> -        export CROSS_COMPILE="mipsel-linux-gnu-"
>> -        ;;
>> -    *)
>> -        echo "error: unsupported architecture ($target_arch)"
>> -        exit 1
>> -        ;;
>> -    esac
>> -fi
>> -
>> -REPACK_DIR="$1/../repack"
>> -REPACK_LINUX_IMAGE_DIR="${REPACK_DIR}/linux-image"
>> -REPACK_LINUX_HEADERS_DIR="${REPACK_DIR}/linux-headers"
>> -
>> -make ${KERNEL_CONFIG_TARGET} || exit ${?}
>> -
>> -KV=$( make -s kernelrelease )
>> -if [ "${KV}" != "${PV}" ]; then
>> -	echo "ERROR: Recipe PV is \"${PV}\" but should be \"${KV}\"" 1>&2
>> -	echo "ERROR: Probably due to CONFIG_LOCALVERSION" 1>&2
>> -	exit 1
>> -fi
>> -
>> -rm -f .version
>> -KBUILD_DEBARCH=$target_arch make -j $(($(nproc) * 2)) deb-pkg
>> -
>> -rm -rf "${REPACK_DIR}"
>> -mkdir -p "${REPACK_DIR}"
>> -mkdir -p "${REPACK_LINUX_IMAGE_DIR}"
>> -mkdir -p "${REPACK_LINUX_HEADERS_DIR}"
>> -
>> -cp -a debian "${REPACK_DIR}"
>> -
>> -# dpkg-gencontrol performs cross-incompatible checks on the
>> -# Architecture field; trick it to accept the control file
>> -sed -i "s/Architecture: .*/Architecture: any/" "${REPACK_DIR}/debian/control"
>> -
>> -cd ..
>> -
>> -dpkg-deb -R linux-image-${PV}_${PV}-1_*.deb "${REPACK_LINUX_IMAGE_DIR}"
>> -dpkg-deb -R linux-headers-${PV}_${PV}-1_*.deb "${REPACK_LINUX_HEADERS_DIR}"
>> -
>> -dpkg-gencontrol -crepack/debian/control \
>> -	-lrepack/debian/changelog \
>> -	-frepack/debian/files \
>> -	-plinux-image-${PV} \
>> -	-P"${REPACK_LINUX_IMAGE_DIR}" \
>> -	-DPackage="linux-image-${KERNEL_NAME}" \
>> -	-DSection=kernel \
>> -	-DPriority=required \
>> -	-DDepends="${KERNEL_DEBIAN_DEPENDS}" \
>> -	-DArchitecture=$target_arch
>> -
>> -# Add Debian-like link installation to postinst
>> -mkdir -p ${REPACK_LINUX_IMAGE_DIR}/lib/modules/${PV}
>> -touch "${REPACK_LINUX_IMAGE_DIR}/lib/modules/${PV}/.fresh-install"
>> -sed -i "${REPACK_LINUX_IMAGE_DIR}/DEBIAN/postinst" \
>> -    -e "/^set -e$/a\\
>> -\\
>> -if [ -f /lib/modules/${PV}/.fresh-install ]; then\\
>> -	change=install\\
>> -else\\
>> -	change=upgrade\\
>> -fi\\
>> -linux-update-symlinks \$change ${PV} /boot/${KERNEL_FILE}-${PV}\\
>> -rm -f /lib/modules/${PV}/.fresh-install"
>> -
>> -# Add Debian-like link removal to postrm
>> -sed -i "${REPACK_LINUX_IMAGE_DIR}/DEBIAN/postrm" \
>> -    -e "/^set -e$/a\\
>> -\\
>> -rm -f /lib/modules/${PV}/.fresh-install\\
>> -\\
>> -if [ \"\$1\" != upgrade ] && command -v linux-update-symlinks >/dev/null; then\\
>> -	linux-update-symlinks remove ${PV}  /boot/${KERNEL_FILE}-${PV}\\
>> -fi"
>> -
>> -# Make sure arm64 kernels are decompressed
>> -if [ "$target_arch" = "arm64" ]; then
>> -	kernel_file="${REPACK_LINUX_IMAGE_DIR}/boot/${KERNEL_FILE}-${PV}"
>> -	mv "${kernel_file}" "${kernel_file}.gz"
>> -	gunzip "${kernel_file}.gz"
>> -fi
>> -
>> -dpkg-gencontrol -crepack/debian/control \
>> -	-lrepack/debian/changelog \
>> -	-frepack/debian/files \
>> -	-plinux-headers-${PV} \
>> -	-P"${REPACK_LINUX_HEADERS_DIR}" \
>> -	-Vkernel:debarch="${KERNEL_NAME}" \
>> -	-DPackage="linux-headers-${KERNEL_NAME}" \
>> -	-DSection=kernel \
>> -	-DDepends="${KERNEL_HEADERS_DEBIAN_DEPENDS}" \
>> -	-DArchitecture=$target_arch
>> -
>> -fakeroot dpkg-deb -b "${REPACK_LINUX_IMAGE_DIR}" \
>> -	linux-image-${KERNEL_NAME}_${PV}-1_${KERNEL_NAME}.deb
>> -rm -f linux-image-${PV}_${PV}-1_*.deb
>> -fakeroot dpkg-deb -b "${REPACK_LINUX_HEADERS_DIR}" \
>> -	linux-headers-${KERNEL_NAME}_${PV}-1_${KERNEL_NAME}.deb
>> -rm -f linux-headers-${PV}_${PV}-1_*.deb
>> diff --git a/meta/recipes-kernel/linux/files/debian/compat b/meta/recipes-kernel/linux/files/debian/compat
>> new file mode 100644
>> index 0000000..ec63514
>> --- /dev/null
>> +++ b/meta/recipes-kernel/linux/files/debian/compat
>> @@ -0,0 +1 @@
>> +9
>> diff --git a/meta/recipes-kernel/linux/files/debian/control.tmpl b/meta/recipes-kernel/linux/files/debian/control.tmpl
>> new file mode 100644
>> index 0000000..7236732
>> --- /dev/null
>> +++ b/meta/recipes-kernel/linux/files/debian/control.tmpl
>> @@ -0,0 +1,37 @@
>> +Source: linux-${KERNEL_NAME_PROVIDED}
>> +Section: kernel
>> +Priority: optional
>> +Maintainer: ${MAINTAINER}
>> +Build-Depends: bc, kmod, cpio, ${KBUILD_DEPENDS}
>> +Homepage: http://www.kernel.org/
>> +
>> +Package: linux-image-${KERNEL_NAME_PROVIDED}
>> +Architecture: any
>> +Depends: ${KERNEL_DEBIAN_DEPENDS}
>> +Description: ${KERNEL_NAME_PROVIDED} Linux kernel, version ${PV}-${KERNEL_LOCALVERSION}
>> + This package contains the Linux kernel, modules and corresponding other
>> + files, version: ${PV}-${KERNEL_LOCALVERSION}.
>> +
>> +Package: linux-headers-${KERNEL_NAME_PROVIDED}
>> +Architecture: any
>> +Depends: ${KERNEL_HEADERS_DEBIAN_DEPENDS}, ${perl:Depends}, ${shlib:Depends}
>> +Description: ${KERNEL_NAME_PROVIDED} Linux kernel headers for ${PV}-${KERNEL_LOCALVERSION}
>> + This package provides kernel header files for ${PV}-${KERNEL_LOCALVERSION} on ${DISTRO_ARCH}
>> + .
>> + This is useful for people who need to build external modules
>> +
>> +Package: linux-libc-dev
>> +Build-Profiles: <!nolibcdev>
>> +Section: devel
>> +Provides: linux-kernel-headers
>> +Architecture: any
>> +Description: Linux support headers for userspace development
>> + This package provides userspaces headers from the Linux kernel.  These headers
>> + are used by the installed headers for GNU glibc and other system libraries.
>> +
>> +Package: linux-image-${KERNEL_NAME_PROVIDED}-dbg
>> +Section: debug
>> +Architecture: any
>> +Description: Linux kernel debugging symbols for ${PV}-${KERNEL_LOCALVERSION}
>> + This package will come in handy if you need to debug the kernel. It provides
>> + all the necessary debug symbols for the kernel and its modules.
>> diff --git a/meta/recipes-kernel/linux/files/debian/isar/build.tmpl b/meta/recipes-kernel/linux/files/debian/isar/build.tmpl
>> new file mode 100644
>> index 0000000..1775b19
>> --- /dev/null
>> +++ b/meta/recipes-kernel/linux/files/debian/isar/build.tmpl
>> @@ -0,0 +1,45 @@
>> +#!/bin/bash
>> +# Copyright (c) Mentor Graphics, a Siemens business, 2019
>> +# SPDX-License-Identifier: MIT
>> +
>> +# Load common stuff
>> +. ${S}/debian/isar/common || exit ${?}
>> +
>> +do_build() {
>> +
>> +    # Print a few things that are of particular interest
>> +    print_settings
>> +
>> +    # Process existing kernel configuration to make sure it is complete
>> +    # (use defaults for options that were not specified)
>> +    ${MAKE} O=${KERNEL_BUILD_DIR} olddefconfig prepare || exit ${?}
>> +
>> +    # Check if the recipe's PV makes sense
>> +    KR=$(${MAKE} O=${KERNEL_BUILD_DIR} -s --no-print-directory kernelrelease)
>> +    eval $(grep ^CONFIG_LOCALVERSION= ${KERNEL_BUILD_DIR}/${KCONF} || true)
>> +    if [ "${PV}-${KERNEL_LOCALVERSION}" != "${KR}" ]; then
>> +        echo "ERROR: Recipe version (${PV}-${KERNEL_LOCALVERSION}) does not seem to match the kernelrelease (${KR})!" 1>&2
>> +        echo "ERROR: Make sure the kernel version in your NAME/PV/PR settings and/or CONFIG_LOCALVERSION are aligned" 1>&2
>> +        exit 1
>> +    fi
>> +
>> +    # Trace what we do here
>> +    set -x
>> +
>> +    # Build the Linux kernel
>> +    ${MAKE} O=${KERNEL_BUILD_DIR} -j $(nproc) || exit ${?}
>> +
>> +    # Stop tracing
>> +    set +x
>> +}
>> +
>> +print_settings() {
>> +    cat <<EOF
>> +# Build settings:
>> +# ---------------
>> +# ARCH=${ARCH}
>> +# CROSS_COMPILE=${CROSS_COMPILE}
>> +EOF
>> +}
>> +
>> +main build ${*}
>> diff --git a/meta/recipes-kernel/linux/files/debian/isar/clean.tmpl b/meta/recipes-kernel/linux/files/debian/isar/clean.tmpl
>> new file mode 100644
>> index 0000000..f903987
>> --- /dev/null
>> +++ b/meta/recipes-kernel/linux/files/debian/isar/clean.tmpl
>> @@ -0,0 +1,21 @@
>> +#!/bin/bash
>> +# Copyright (c) Mentor Graphics, a Siemens business, 2019
>> +# SPDX-License-Identifier: MIT
>> +
>> +# Load common stuff
>> +. ${S}/debian/isar/common || exit ${?}
>> +
>> +do_clean() {
>> +
>> +    # Trace what we do here
>> +    set -x
>> +
>> +    rm -rf ${deb_img_dir} ${deb_dbg_dir}
>> +    rm -rf ${deb_kern_hdrdir}
>> +    rm -rf ${deb_libc_hdr_dir}
>> +
>> +    # Stop tracing
>> +    set +x
>> +}
>> +
>> +main clean ${*}
>> diff --git a/meta/recipes-kernel/linux/files/debian/isar/common.tmpl b/meta/recipes-kernel/linux/files/debian/isar/common.tmpl
>> new file mode 100644
>> index 0000000..44f67b3
>> --- /dev/null
>> +++ b/meta/recipes-kernel/linux/files/debian/isar/common.tmpl
>> @@ -0,0 +1,50 @@
>> +#!/bin/bash
>> +# Copyright (c) Mentor Graphics, a Siemens business, 2019
>> +# SPDX-License-Identifier: MIT
>> +
>> +# Isar settings
>> +ARCH=${KERNEL_ARCH}
>> +KERNEL_PKG_IMAGE=linux-image-${KERNEL_NAME_PROVIDED}
>> +KERNEL_PKG_KERN_HEADERS=linux-headers-${KERNEL_NAME_PROVIDED}
>> +KERNEL_PKG_LIBC_HEADERS=linux-libc-dev
>> +
>> +# Constants
>> +KCONF=.config
>> +
>> +# Target directories
>> +deb_top_dir=${S}/debian
>> +deb_img_dir=${deb_top_dir}/${KERNEL_PKG_IMAGE}
>> +deb_dbg_dir=${deb_img_dir}-dbg
>> +deb_dtb_dir=${deb_img_dir}/${KERNEL_DTB_DIR}
>> +deb_kern_hdr_dir=${deb_top_dir}/${KERNEL_PKG_KERN_HEADERS}
>> +deb_libc_hdr_dir=${deb_top_dir}/${KERNEL_PKG_LIBC_HEADERS}
>> +
>> +# Array of packages to be generated
>> +declare -A kern_pkgs
>> +
>> +main() {
>> +    local target=${1}
>> +
>> +    if [ ! -f ${S}/debian/isar/${target} ]; then
>> +        echo "error: ${target} is not a supported build target!" >&2
>> +        return 1
>> +    fi
>> +
>> +    # create do_<x> variables for each package to be generated
>> +    for p in $(unset DEB_HOST_ARCH; dh_listpackages); do
>> +        kern_pkgs["${p}"]="1"
>> +    done
>> +
>> +    # variables to be exported
>> +    export ARCH
>> +
>> +    # are we cross-compiling?
>> +    BUILD_ARCH=$(dpkg-architecture -qDEB_BUILD_ARCH)
>> +    if [ "${BUILD_ARCH}" = "${DISTRO_ARCH}" ]; then
>> +        # no, make sure CROSS_COMPILE isn't set
>> +        unset CROSS_COMPILE
>> +    fi
>> +
>> +    # call the actual target script
>> +    do_${target} || return ${?}
>> +}
>> diff --git a/meta/recipes-kernel/linux/files/debian/isar/install.tmpl b/meta/recipes-kernel/linux/files/debian/isar/install.tmpl
>> new file mode 100644
>> index 0000000..806df5d
>> --- /dev/null
>> +++ b/meta/recipes-kernel/linux/files/debian/isar/install.tmpl
>> @@ -0,0 +1,213 @@
>> +#!/bin/bash
>> +# Copyright (c) Mentor Graphics, a Siemens business, 2019
>> +# SPDX-License-Identifier: MIT
>> +
>> +# Load common stuff
>> +. ${S}/debian/isar/common || exit ${?}
>> +
>> +# Stop on error
>> +set -e
>> +
>> +do_install() {
>> +
>> +    # check if our kernel was configured
>> +    if [ ! -f "${O}/.config" ]; then
>> +        echo "error: kernel not configured!" >&2
>> +        return 1
>> +    fi
>> +
>> +    # load its configuration
>> +    . ${O}/.config
>> +
>> +    kimage="$(${MAKE} O=${O} -s --no-print-directory image_name)"
>> +    krel="$(${MAKE} O=${O} -s --no-print-directory kernelrelease)"
>> +    case "${ARCH}" in
>> +        mips|powerpc) kimage_path="boot/vmlinux-${krel}"    ;;
>> +                  um) kimage_path="usr/bin/vmlinux-${krel}" ;;
>> +                   *) kimage_path="boot/vmlinuz-${krel}"    ;;
>> +    esac
>> +
>> +    print_settings
>> +
>> +    # Trace what we do here
>> +    set -x
>> +
>> +    install_image
>> +    install_hooks
>> +    install_dtbs
>> +    install_kmods
>> +    install_headers
>> +
>> +    # Stop tracing
>> +    set +x
>> +}
>> +
>> +print_settings() {
>> +    cat <<EOF
>> +Install settings:
>> +-----------------
>> +deb_dtb_dir=${deb_dtb_dir}
>> +deb_hdr_dir=${deb_hdr_dir}
>> +kimage=${kimage}
>> +kimage_path=${kimage_path}
>> +
>> +EOF
>> +}
>> +
>> +install_image() {
>> +    install -m 755 -d ${deb_img_dir}/$(dirname ${kimage_path})
>> +    cp ${O}/${kimage} ${deb_img_dir}/${kimage_path}
>> +
>> +    # Make sure arm64 kernels are decompressed
>> +    if [ "${ARCH}" = "arm64" ]; then
>> +        mv ${deb_img_dir}/${kimage_path} ${deb_img_dir}/${kimage_path}.gz
>> +        gunzip -f ${deb_img_dir}/${kimage_path}.gz
>> +    fi
>> +
>> +    install_image_debug
>> +}
>> +
>> +install_image_debug() {
>> +    # Different tools want the image in different locations
>> +    # perf
>> +    mkdir -p ${deb_dbg_dir}/usr/lib/debug/lib/modules/${krel}/
>> +    cp ${O}/vmlinux ${deb_dbg_dir}/usr/lib/debug/lib/modules/${krel}/
>> +    # systemtap
>> +    mkdir -p ${deb_dbg_dir}/usr/lib/debug/boot/
>> +    ln -s ../lib/modules/$version/vmlinux ${deb_dbg_dir}/usr/lib/debug/boot/vmlinux-${krel}
>> +    # kdump-tools
>> +    ln -s lib/modules/${krel}/vmlinux ${deb_dbg_dir}/usr/lib/debug/vmlinux-${krel}
>> +}
>> +
>> +install_hooks() {
>> +    install -m 755 -d ${deb_img_dir}/etc/kernel/install.d
>> +    install -m 755 -d ${deb_img_dir}/etc/kernel/postinst.d
>> +    install -m 755 -d ${deb_img_dir}/etc/kernel/postrm.d
>> +    install -m 755 -d ${deb_img_dir}/etc/kernel/prerm.d
>> +
>> +    initrd="No"
>> +    [ -z "${CONFIG_BLK_DEV_INITRD}" ] || initrd="Yes"
>> +
>> +    for script in postinst postrm preinst prerm; do
>> +        sed -i -e "s,INITRD=[A-Za-z0-9]*,INITRD=${initrd},g" ${S}/debian/linux-image*.${script}
>> +        sed -i -e "s,version=.*,version=${krel},g" ${S}/debian/linux-image*.${script}
>> +    done
>> +}
>> +
>> +install_dtbs() {
>> +    [ -n "${CONFIG_OF}" ] || return 0
>> +    ${MAKE} O=${O} INSTALL_DTBS_PATH=${deb_dtb_dir} dtbs_install
>> +}
>> +
>> +install_kmods() {
>> +    [ -n "${CONFIG_MODULES}" ] || return 0
>> +    ${MAKE} O=${O} INSTALL_MOD_PATH=${deb_img_dir} modules_install
>> +    touch ${deb_img_dir}/lib/modules/${krel}/.fresh-install
>> +    rm -fv ${deb_img_dir}/lib/modules/${krel}/build
>> +    rm -fv ${deb_img_dir}/lib/modules/${krel}/source
>> +    install_kmods_debug
>> +}
>> +
>> +kmods_sign() {
>> +    [ -n "${CONFIG_MODULE_SIG_ALL}" ] || return 0
>> +    ${MAKE} O=${O} INSTALL_MOD_PATH=${deb_img_dir} modules_sign
>> +}
>> +
>> +install_kmods_debug() {
>> +    [ -n "${CONFIG_DEBUG_INFO}" ] || return 0
>> +
>> +    kmod_inst_dir=${deb_img_dir}/lib/modules
>> +    kmod_debug_dir=${deb_dbg_dir}/usr/lib/debug
>> +
>> +    # copy kernels modules to usr/lib/debug
>> +    mkdir -p ${kmod_debug_dir}
>> +    tar -C ${kmod_inst_dir}/ -cO --exclude='modules.*' . | tar -C ${kmod_debug_dir}/ -xf -
>> +    # strip everything but debug sections for modules in usr/lib/debug
>> +    find ${kmod_debug_dir} -name *.ko -exec ${CROSS_COMPILE}objcopy --only-keep-debug {} \;
>> +    # and strip debug sections from modules in lib/modules
>> +    find ${kmod_inst_dir} -name *.ko -exec ${CROSS_COMPILE}objcopy --strip-debug {} \;
>> +
>> +    # re-sign stripped kernel modules
>> +    kmods_sign
>> +}
>> +
>> +headers_check() {
>> +    ${MAKE} O=${O} headers_check
>> +}
>> +
>> +libc_headers() {
>> +    mkdir -p ${deb_libc_hdr_dir}
>> +    ${MAKE} O=${O} headers_install INSTALL_HDR_PATH=${deb_libc_hdr_dir}/usr
>> +    host_arch=$(dpkg-architecture -a${DISTRO_ARCH} -qDEB_HOST_MULTIARCH)
>> +    mkdir ${deb_libc_hdr_dir}/usr/include/${host_arch}
>> +    mv ${deb_libc_hdr_dir}/usr/include/asm ${deb_libc_hdr_dir}/usr/include/${host_arch}/
>> +}
>> +
>> +# the kernel does not seem to provide a way to cross-compile its tools, we however
>> +# have qemu-user-static binaries in our buildchroot. Create a new build tree for the
>> +# scripts and override HOSTCC to force a cross-compile
>> +kernel_tools_build() {
>> +    odir="${S}/build-scripts"
>> +    mflags="HOSTCC=${CROSS_COMPILE}gcc O=${odir} NOSTDINC_FLAGS="
>> +    rm -rf ${odir} && mkdir -p ${odir} && cp ${S}/${KERNEL_BUILD_DIR}/.config ${odir}
>> +    (unset LD_PRELOAD; cd ${odir} && make -C ${S} ${mflags} olddefconfig scripts)
>> +    (cd ${odir}; find scripts -type f -executable -exec file {} \;|grep ELF|cut -d: -f1) >${src_hdr_files}
>> +    tar -C ${odir} -cf - -T - <${src_hdr_files} | tar -C ${destdir} -xf -
>> +}
>> +
>> +kernel_tools() {
>> +    # remove object files
>> +    find ${destdir}/scripts -type f -name '*.o' |xargs rm -f
>> +
>> +    # we're all done if we aren't cross-compiling
>> +    [ -n "${CROSS_COMPILE}" ] || return 0
>> +
>> +    # remove ELF executables from the linux-headers package
>> +    find ${destdir}/scripts -type f -exec file {} \;|grep ELF|cut -d: -f1|xargs rm -fv
>> +
>> +    # cross-compile kernel tools to be shipped with linux-headers
>> +    kernel_tools_build
>> +}
>> +
>> +kernel_headers() {
>> +    destdir=${deb_kern_hdr_dir}/${KERNEL_HEADERS_DIR}
>> +    src_hdr_files=$(mktemp)
>> +    obj_hdr_files=$(mktemp)
>> +
>> +    mkdir -p ${destdir}
>> +    mkdir -p ${deb_kern_hdr_dir}/lib/modules/${krel}
>> +
>> +    (cd ${S}; find . -name 'Makefile*' -o -name 'Kconfig*' -o -name '*.pl') >>${src_hdr_files}
>> +    (cd ${S}; find arch/*/include include scripts -type f -o -type l) >>${src_hdr_files}
>> +    (cd ${S}; find arch/${ARCH} -name module.lds -o -name Kbuild.platforms -o -name Platform) >>${src_hdr_files}
>> +    (cd ${S}; find $(find arch/${ARCH} -name include -o -name scripts -type d) -type f) >>${src_hdr_files}
>> +
>> +    (cd ${O}; find arch/${ARCH}/include Module.symvers include scripts -type f) >>${obj_hdr_files}
>> +    if [ -n "${CONFIG_STACK_VALIDATION}" ]; then
>> +        (cd ${O}; find tools/objtool -type f -executable) >>${obj_hdr_files}
>> +    fi
>> +    if [ -n "${CONFIG_GCC_PLUGINS}" ]; then
>> +        (cd ${O}; find scripts/gcc-plugins -name *.so -o -name gcc-common.h) >>${obj_hdr_files}
>> +    fi
>> +
>> +    # deploy files that were matched above
>> +    tar -C ${S} -cf - -T - <${src_hdr_files} | tar -C ${destdir} -xf -
>> +    tar -C ${O} -cf - -T - <${obj_hdr_files} | tar -C ${destdir} -xf -
>> +
>> +    # add the kernel config
>> +    cp ${O}/${KCONF} ${destdir}/.config
>> +
>> +    # handle kernel development tools
>> +    kernel_tools
>> +
>> +    # create symlinks
>> +    ln -sf /${KERNEL_HEADERS_DIR} ${deb_kern_hdr_dir}/lib/modules/${krel}/build
>> +}
>> +
>> +install_headers() {
>> +    headers_check
>> +    [ -z ${kern_pkgs["linux-libc-headers"]} ] || libc_headers
>> +    kernel_headers
>> +}
>> +
>> +main install ${*}
>> diff --git a/meta/recipes-kernel/linux/files/debian/isar/version.cfg.tmpl b/meta/recipes-kernel/linux/files/debian/isar/version.cfg.tmpl
>> new file mode 100644
>> index 0000000..09fa364
>> --- /dev/null
>> +++ b/meta/recipes-kernel/linux/files/debian/isar/version.cfg.tmpl
>> @@ -0,0 +1,2 @@
>> +CONFIG_LOCALVERSION="-${KERNEL_LOCALVERSION}"
>> +# CONFIG_LOCALVERSION_AUTO is not set
>> diff --git a/meta/recipes-kernel/linux/files/debian/linux-image.postinst.tmpl b/meta/recipes-kernel/linux/files/debian/linux-image.postinst.tmpl
>> new file mode 100644
>> index 0000000..b373801
>> --- /dev/null
>> +++ b/meta/recipes-kernel/linux/files/debian/linux-image.postinst.tmpl
>> @@ -0,0 +1,29 @@
>> +#!/bin/sh
>> +# based on https://salsa.debian.org/kernel-team/linux/blob/master/debian/templates/image.postinst.in
>> +
>> +# Tell initramfs builder whether it's wanted
>> +export INITRD=Yes
>> +
>> +version=${PV}-${KERNEL_LOCALVERSION}
>> +image_path=/boot/${KERNEL_FILE}-${version}
>> +
>> +if [ "$1" != configure ]; then
>> +    exit 0
>> +fi
>> +
>> +depmod $version
>> +
>> +if [ -f /lib/modules/$version/.fresh-install ]; then
>> +    change=install
>> +else
>> +    change=upgrade
>> +fi
>> +linux-update-symlinks $change $version $image_path
>> +rm -f /lib/modules/$version/.fresh-install
>> +
>> +if [ -d /etc/kernel/postinst.d ]; then
>> +    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
>> +	      --arg=$image_path /etc/kernel/postinst.d
>> +fi
>> +
>> +exit 0
>> diff --git a/meta/recipes-kernel/linux/files/debian/linux-image.postrm.tmpl b/meta/recipes-kernel/linux/files/debian/linux-image.postrm.tmpl
>> new file mode 100644
>> index 0000000..1b5dbbe
>> --- /dev/null
>> +++ b/meta/recipes-kernel/linux/files/debian/linux-image.postrm.tmpl
>> @@ -0,0 +1,35 @@
>> +#!/bin/sh -e
>> +# based on https://salsa.debian.org/kernel-team/linux/blob/master/debian/templates/image.postrm.in
>> +
>> +# Tell initramfs builder whether it's wanted
>> +export INITRD=Yes
>> +
>> +version=${PV}-${KERNEL_LOCALVERSION}
>> +image_path=/boot/${KERNEL_FILE}-${version}
>> +
>> +rm -f /lib/modules/$version/.fresh-install
>> +
>> +if [ "$1" != upgrade ] && command -v linux-update-symlinks >/dev/null; then
>> +    linux-update-symlinks remove $version $image_path
>> +fi
>> +
>> +if [ -d /etc/kernel/postrm.d ]; then
>> +    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
>> +	      --arg=$image_path /etc/kernel/postrm.d
>> +fi
>> +
>> +if [ "$1" = purge ]; then
>> +    for extra_file in modules.dep modules.isapnpmap modules.pcimap \
>> +                      modules.usbmap modules.parportmap \
>> +                      modules.generic_string modules.ieee1394map \
>> +                      modules.ieee1394map modules.pnpbiosmap \
>> +                      modules.alias modules.ccwmap modules.inputmap \
>> +                      modules.symbols modules.ofmap \
>> +                      modules.seriomap modules.\*.bin \
>> +		      modules.softdep modules.devname; do
>> +	eval rm -f /lib/modules/$version/$extra_file
>> +    done
>> +    rmdir /lib/modules/$version || true
>> +fi
>> +
>> +exit 0
>> diff --git a/meta/recipes-kernel/linux/files/debian/linux-image.preinst.tmpl b/meta/recipes-kernel/linux/files/debian/linux-image.preinst.tmpl
>> new file mode 100644
>> index 0000000..4f24019
>> --- /dev/null
>> +++ b/meta/recipes-kernel/linux/files/debian/linux-image.preinst.tmpl
>> @@ -0,0 +1,25 @@
>> +#!/bin/sh -e
>> +# based on https://salsa.debian.org/kernel-team/linux/blob/master/debian/templates/image.preinst.in
>> +
>> +# Tell initramfs builder whether it's wanted
>> +export INITRD=Yes
>> +
>> +version=${PV}-${KERNEL_LOCALVERSION}
>> +image_path=/boot/${KERNEL_FILE}-${version}
>> +
>> +if [ "$1" = abort-upgrade ]; then
>> +    exit 0
>> +fi
>> +
>> +if [ "$1" = install ]; then
>> +    # Create a flag file for postinst
>> +    mkdir -p /lib/modules/$version
>> +    touch /lib/modules/$version/.fresh-install
>> +fi
>> +
>> +if [ -d /etc/kernel/preinst.d ]; then
>> +    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
>> +	      --arg=$image_path /etc/kernel/preinst.d
>> +fi
>> +
>> +exit 0
>> diff --git a/meta/recipes-kernel/linux/files/debian/linux-image.prerm.tmpl b/meta/recipes-kernel/linux/files/debian/linux-image.prerm.tmpl
>> new file mode 100644
>> index 0000000..cd697c0
>> --- /dev/null
>> +++ b/meta/recipes-kernel/linux/files/debian/linux-image.prerm.tmpl
>> @@ -0,0 +1,21 @@
>> +#!/bin/sh -e
>> +# based on https://salsa.debian.org/kernel-team/linux/blob/master/debian/templates/image.prerm.in
>> +
>> +# Tell initramfs builder whether it's wanted
>> +export INITRD=Yes
>> +
>> +version=${PV}-${KERNEL_LOCALVERSION}
>> +image_path=/boot/${KERNEL_FILE}-${version}
>> +
>> +if [ "$1" != remove ]; then
>> +    exit 0
>> +fi
>> +
>> +linux-check-removal $version
>> +
>> +if [ -d /etc/kernel/prerm.d ]; then
>> +    DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
>> +	      --arg=$image_path /etc/kernel/prerm.d
>> +fi
>> +
>> +exit 0
>> diff --git a/meta/recipes-kernel/linux/files/debian/rules.tmpl b/meta/recipes-kernel/linux/files/debian/rules.tmpl
>> new file mode 100755
>> index 0000000..c024768
>> --- /dev/null
>> +++ b/meta/recipes-kernel/linux/files/debian/rules.tmpl
>> @@ -0,0 +1,39 @@
>> +#!/usr/bin/make -f
>> +
>> +CROSS_COMPILE:=$(DEB_HOST_GNU_TYPE)-
>> +
>> +O:=$(CURDIR)/${KERNEL_BUILD_DIR}
>> +S:=$(CURDIR)
>> +deb_top_dir:=$(S)/debian
>> +
>> +# Dynamic variables to be passed to Isar build scripts
>> +isar_env=$(strip \
>> +	export CROSS_COMPILE='$(CROSS_COMPILE)' && \
>> +	export DEB_BUILD_PROFILES='$(DEB_BUILD_PROFILES)' && \
>> +	export DEB_HOST_GNU_TYPE='$(DEB_HOST_GNU_TYPE)' && \
>> +	export MAKE='$(MAKE)' && \
>> +	export O='${O}' \
>> +	export S='${S}' \
>> +)
>> +
>> +%:
>> +	dh $(@)
>> +
>> +.PHONY: override_dh_auto_clean
>> +override_dh_auto_clean:
>> +	$(isar_env) && bash $(deb_top_dir)/isar/clean
>> +
>> +.PHONY: override_dh_auto_build
>> +override_dh_auto_build:
>> +	$(isar_env) && bash $(deb_top_dir)/isar/build
>> +
>> +override_dh_auto_install:
>> +	$(isar_env) && bash $(deb_top_dir)/isar/install
>> +
>> +.PHONY: override_dh_auto_test
>> +override_dh_auto_test:
>> +	true
>> +
>> +PHONY: override_dh_strip
>> +override_dh_strip:
>> +	dh_strip -Xvmlinux --no-automatic-dbgsym
>> diff --git a/meta/recipes-kernel/linux/linux-custom.inc b/meta/recipes-kernel/linux/linux-custom.inc
>> index 712f52b..bf1646a 100644
>> --- a/meta/recipes-kernel/linux/linux-custom.inc
>> +++ b/meta/recipes-kernel/linux/linux-custom.inc
>> @@ -2,89 +2,183 @@
>>    #
>>    # This software is a part of ISAR.
>>    # Copyright (c) Siemens AG, 2018
>> +# Copyright (c) Mentor Graphics, a Siemens business, 2019
>>    #
>>    # SPDX-License-Identifier: MIT
>>    
>> -FILESEXTRAPATHS_prepend := "${FILE_DIRNAME}/files:"
>> +# Settings that would typically be done from the custom kernel recipe
>> +# -------------------------------------------------------------------
>>    
>> +CHANGELOG_V = "${PV}+${PR}"
>>    DESCRIPTION ?= "Custom kernel"
>> +MAINTAINER ?= "isar-users <isar-users@googlegroups.com>"
>> +
>> +KBUILD_DEPENDS ?= "build-essential:native, \
>> +                   libelf-dev:native, \
>> +                   libncurses-dev:native, \
>> +                   libssl-dev:native, \
>> +                   bc, \
>> +                   bison, \
>> +                   cpio, \
>> +                   flex, \
>> +                   git, \
>> +                   kmod, \
>> +                   libssl-dev,"
>> +
>> +KERNEL_DEBIAN_DEPENDS ?= "initramfs-tools | linux-initramfs-tool, \
>> +                          kmod, \
>> +                          linux-base (>= 4.3~),"
>> +
>> +KERNEL_HEADERS_DEBIAN_DEPENDS ?= "libc6, \
>> +                                  libssl1.1,"
>> +
>> +KERNEL_LIBC_DEV_DEPLOY ?= "0"
>> +
>> +# Settings that may be changed on a per distro, machine or layer basis
>> +# --------------------------------------------------------------------
>> +
>> +KERNEL_LOCALVERSION ?= "-${KERNEL_NAME_PROVIDED}-${PR}"
>> +KERNEL_DTB_DIR ?= "usr/lib/linux-image-${PV}-${KERNEL_LOCALVERSION}"
>> +KERNEL_HEADERS_DIR ?= "usr/src/linux-headers-${PV}-${KERNEL_LOCALVERSION}"
>>    
>> -KERNEL_NAME_PROVIDED ?= "${@ d.getVar('PN', True).partition('linux-')[2]}"
>>    KERNEL_DEFCONFIG ?= ""
>>    
>> +# Add our template meta-data to the sources
>> +FILESEXTRAPATHS_prepend := "${FILE_DIRNAME}/files:"
>> +SRC_URI += "file://debian"
>> +
>> +# Variables and files that make our templates
>> +# -------------------------------------------
>> +
>> +TEMPLATE_FILES += "                  \
>> +    debian/control.tmpl              \
>> +    debian/isar/build.tmpl           \
>> +    debian/isar/clean.tmpl           \
>> +    debian/isar/common.tmpl          \
>> +    debian/isar/install.tmpl         \
>> +    debian/isar/version.cfg.tmpl     \
>> +    debian/linux-image.postinst.tmpl \
>> +    debian/linux-image.postrm.tmpl   \
>> +    debian/linux-image.preinst.tmpl  \
>> +    debian/linux-image.prerm.tmpl    \
>> +    debian/rules.tmpl                \
>> +"
>> +
>> +TEMPLATE_VARS += "                \
>> +    HOST_ARCH                     \
>> +    KBUILD_DEPENDS                \
>> +    KERNEL_ARCH                   \
>> +    KERNEL_DEBIAN_DEPENDS         \
>> +    KERNEL_BUILD_DIR              \
>> +    KERNEL_DTB_DIR                \
>> +    KERNEL_FILE                   \
>> +    KERNEL_HEADERS_DEBIAN_DEPENDS \
>> +    KERNEL_HEADERS_DIR            \
>> +    KERNEL_LOCALVERSION           \
>> +    KERNEL_NAME_PROVIDED          \
>> +"
>> +
>> +inherit dpkg
>> +inherit template
>> +
>> +# Derive name of the kernel packages from the name of this recipe
>> +KERNEL_NAME_PROVIDED ?= "${@ d.getVar('PN', True).partition('linux-')[2]}"
>> +
>> +# Make bitbake know we will be producing linux-image and linux-headers packages
>>    python() {
>>        kernel_name = d.getVar("KERNEL_NAME_PROVIDED", True)
>>        d.setVar('PROVIDES', 'linux-image-' + kernel_name + ' ' + \
>>                             'linux-headers-' + kernel_name)
>>    }
>>    
>> -inherit dpkg-base
>> -
>> -SRC_URI += "file://build-kernel.sh"
>> -
>> -KBUILD_DEPENDS ?= " \
>> -    build-essential:native \
>> -    libssl-dev \
>> -    libelf-dev \
>> -    bc \
>> -    git \
>> -    kmod \
>> -    bison \
>> -    flex \
>> -    cpio \
>> -    libncurses-dev"
>> -KERNEL_DEBIAN_DEPENDS ?= "initramfs-tools | linux-initramfs-tool, kmod, linux-base (>= 4.3~)"
>> -KERNEL_HEADERS_DEBIAN_DEPENDS ?= "libc6, libssl1.1"
>> -
>> -KERNEL_LIBC_DEV_DEPLOY ?= "0"
>> -
>> -do_install_builddeps() {
>> -	dpkg_do_mounts
>> -	E="${@ isar_export_proxies(d)}"
>> -	sudo -E chroot ${BUILDCHROOT_DIR} \
>> -		apt-get update \
>> -			-o Dir::Etc::SourceList="sources.list.d/isar-apt.list" \
>> -			-o Dir::Etc::SourceParts="-" \
>> -			-o APT::Get::List-Cleanup="0"
>> -	sudo -E chroot ${BUILDCHROOT_DIR} \
>> -		apt-get install \
>> -			-y -o Debug::pkgProblemResolver=yes \
>> -			--no-install-recommends ${KBUILD_DEPENDS}
>> -	dpkg_undo_mounts
>> +def get_kernel_arch(d):
>> +    distro_arch = d.getVar("DISTRO_ARCH")
>> +    if distro_arch == "amd64":
>> +        kernel_arch = "x86"
>> +    elif distro_arch == "arm64":
>> +        kernel_arch = "arm64"
>> +    elif distro_arch == "armhf":
>> +        kernel_arch = "arm"
>> +    elif distro_arch == "mipsel":
>> +        kernel_arch = "mips"
>> +    else:
>> +        kernel_arch = ""
>> +    return kernel_arch
>> +
>> +KERNEL_ARCH ??= "${@get_kernel_arch(d)}"
>> +
>> +def config_fragments(d):
>> +    fragments = []
>> +    sources = d.getVar("SRC_URI").split()
>> +    for s in sources:
>> +        _, _, local, _, _, parm = bb.fetch.decodeurl(s)
>> +        apply = parm.get("apply")
>> +        if apply == "no":
>> +            continue
>> +        base, ext = os.path.splitext(os.path.basename(local))
>> +        if ext and ext in (".cfg"):
>> +            fragments.append(local)
>> +    return fragments
>> +
>> +do_prepare_build_prepend() {
>> +	# copy meta-data over to source tree
>> +	rm -rf ${S}/debian
>> +	cp -r ${WORKDIR}/debian ${S}/
>> +
>> +	# remove templates from the source tree
>> +	find ${S}/debian -name *.tmpl | xargs rm -f
>> +
>> +	# rename install/remove hooks to match user-specified name for our linux-image package
>> +	mv ${S}/debian/linux-image.postinst ${S}/debian/linux-image-${KERNEL_NAME_PROVIDED}.postinst
>> +	mv ${S}/debian/linux-image.postrm ${S}/debian/linux-image-${KERNEL_NAME_PROVIDED}.postrm
>> +	mv ${S}/debian/linux-image.preinst ${S}/debian/linux-image-${KERNEL_NAME_PROVIDED}.preinst
>> +	mv ${S}/debian/linux-image.prerm ${S}/debian/linux-image-${KERNEL_NAME_PROVIDED}.prerm
>> +
>> +	# produce a changelog for our kernel build
>> +	deb_add_changelog
>>    }
>>    
>> -addtask install_builddeps after do_prepare_build before do_dpkg_build
>> -# apt and reprepro may not run in parallel, acquire the Isar lock
>> -do_install_builddeps[lockfiles] += "${REPO_ISAR_DIR}/isar.lock"
>> -
>> -addtask devshell after do_install_builddeps
>> +# build directory for our "full" kernel build
>> +KERNEL_BUILD_DIR = "build-full"
>>    
>> -dpkg_runbuild() {
>> -	chmod +x ${WORKDIR}/build-kernel.sh
>> -	KERNEL_CONFIG_TARGET="${KERNEL_DEFCONFIG}"
>> +dpkg_configure_kernel() {
>> +	config_target="${KERNEL_DEFCONFIG}"
>> +	rm -rf ${S}/${KERNEL_BUILD_DIR} && mkdir -p ${S}/${KERNEL_BUILD_DIR}
>>    	if [ -n "${KERNEL_DEFCONFIG}" ]; then
>>    		if [ -e "${WORKDIR}/${KERNEL_DEFCONFIG}" ]; then
>> -			cp ${WORKDIR}/${KERNEL_DEFCONFIG} ${S}/.config
>> -			KERNEL_CONFIG_TARGET="olddefconfig"
>> +			cp ${WORKDIR}/${KERNEL_DEFCONFIG} ${S}/${KERNEL_BUILD_DIR}/.config
>> +			config_target="olddefconfig"
>>    		fi
>>    	else
>> -		KERNEL_CONFIG_TARGET="defconfig"
>> +		config_target="defconfig"
>>    	fi
>>    
>> -	E="${@ isar_export_proxies(d)}"
>> -
>> -	export PV=${PV}
>> -	export KERNEL_NAME=${KERNEL_NAME_PROVIDED}
>> -
>> -	export KBUILD_DEPENDS="${KBUILD_DEPENDS}"
>> -	export KERNEL_CONFIG_TARGET
>> -	export KERNEL_DEBIAN_DEPENDS="${KERNEL_DEBIAN_DEPENDS}"
>> -	export KERNEL_FILE="${KERNEL_FILE}"
>> -	export KERNEL_HEADERS_DEBIAN_DEPENDS="${KERNEL_HEADERS_DEBIAN_DEPENDS}"
>> +	# copy config fragments over to the kernel tree
>> +	src_frags="${@ " ".join(config_fragments(d)) }"
>> +	out_frags="${@ " ".join(map(lambda frag: 'debian/fragments/' + frag, config_fragments(d))) }"
>> +	rm -rf ${S}/debian/fragments
>> +	if [ -n "${src_frags}" ]; then
>> +		mkdir -p ${S}/debian/fragments
>> +		(cd ${WORKDIR} && cp ${src_frags} ${S}/debian/fragments/)
>> +	fi
>>    
>> -	sudo -E chroot --userspec=$( id -u ):$( id -g ) ${BUILDCHROOT_DIR} ${PP}/build-kernel.sh ${PP}/${PPS} ${DISTRO_ARCH}
>> +	sudo -E chroot --userspec=$(id -u):$(id -g) ${BUILDCHROOT_DIR} sh -c " \
>> +		export ARCH=${KERNEL_ARCH} &&                                  \
>> +		cd ${PP}/${PPS} &&                                             \
>> +		make O=${KERNEL_BUILD_DIR} ${config_target} &&                 \
>> +		./scripts/kconfig/merge_config.sh                              \
>> +			-O ${KERNEL_BUILD_DIR}/                                \
>> +			${KERNEL_BUILD_DIR}/.config                            \
>> +			${out_frags}                                           \
>> +                        debian/isar/version.cfg                                \
>> +        "
>> +}
>>    
>> +dpkg_runbuild_prepend() {
>> +	profiles="${BASE_DISTRO}"
>>    	if [ "${KERNEL_LIBC_DEV_DEPLOY}" != "1" ]; then
>> -		rm -f ${WORKDIR}/linux-libc-dev_${PV}*.deb
>> +		profiles="${profiles} nolibcdev"
>>    	fi
>> +	export DEB_BUILD_PROFILES="${profiles}"
>> +	dpkg_configure_kernel
>>    }
>>
> I would recommend this functional change to the patch to get away
> without patch 4:
>
> diff --git a/meta/recipes-kernel/linux/files/debian/isar/install.tmpl b/meta/recipes-kernel/linux/files/debian/isar/install.tmpl
> index 806df5d..67b7ce3 100644
> --- a/meta/recipes-kernel/linux/files/debian/isar/install.tmpl
> +++ b/meta/recipes-kernel/linux/files/debian/isar/install.tmpl
> @@ -143,30 +143,9 @@ libc_headers() {
>       mv ${deb_libc_hdr_dir}/usr/include/asm ${deb_libc_hdr_dir}/usr/include/${host_arch}/
>   }
>   
> -# the kernel does not seem to provide a way to cross-compile its tools, we however
> -# have qemu-user-static binaries in our buildchroot. Create a new build tree for the
> -# scripts and override HOSTCC to force a cross-compile
> -kernel_tools_build() {
> -    odir="${S}/build-scripts"
> -    mflags="HOSTCC=${CROSS_COMPILE}gcc O=${odir} NOSTDINC_FLAGS="
> -    rm -rf ${odir} && mkdir -p ${odir} && cp ${S}/${KERNEL_BUILD_DIR}/.config ${odir}
> -    (unset LD_PRELOAD; cd ${odir} && make -C ${S} ${mflags} olddefconfig scripts)
> -    (cd ${odir}; find scripts -type f -executable -exec file {} \;|grep ELF|cut -d: -f1) >${src_hdr_files}
> -    tar -C ${odir} -cf - -T - <${src_hdr_files} | tar -C ${destdir} -xf -
> -}
> -
>   kernel_tools() {
>       # remove object files
>       find ${destdir}/scripts -type f -name '*.o' |xargs rm -f
> -
> -    # we're all done if we aren't cross-compiling
> -    [ -n "${CROSS_COMPILE}" ] || return 0
> -
> -    # remove ELF executables from the linux-headers package
> -    find ${destdir}/scripts -type f -exec file {} \;|grep ELF|cut -d: -f1|xargs rm -fv
> -
> -    # cross-compile kernel tools to be shipped with linux-headers
> -    kernel_tools_build
>   }
>   
>   kernel_headers() {
> diff --git a/meta/recipes-kernel/linux/files/debian/rules.tmpl b/meta/recipes-kernel/linux/files/debian/rules.tmpl
> index c024768..bea21f9 100755
> --- a/meta/recipes-kernel/linux/files/debian/rules.tmpl
> +++ b/meta/recipes-kernel/linux/files/debian/rules.tmpl
> @@ -36,4 +36,4 @@ override_dh_auto_test:
>   
>   PHONY: override_dh_strip
>   override_dh_strip:
> -	dh_strip -Xvmlinux --no-automatic-dbgsym
> +	unset DEB_HOST_GNU_TYPE && dh_strip -Xvmlinux --no-automatic-dbgsym
>
>
> Then we can introduce the correct building of linux-headers once we can
> generate both host and target packages with Isar. And we do not need to
> infect the host buildchroot.

Hi Jan,

Thanks for checking our options and devising this patch. Much 
appreciated. How should we proceed? Would you like to post v5 or should 
I? Should I add your Signed-off-by to the last commit (the one that 
heavily changes linux-custom.inc) to give you review/contribution credits?


>
> Jan
>

  reply	other threads:[~2019-11-26  7:42 UTC|newest]

Thread overview: 83+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-11-05 13:55 [PATCH 0/7] linux-custom recipe rework Cedric Hombourger
2019-11-05 13:55 ` [PATCH 1/7] recipes-kernel/linux: make KERNEL_DEFCONFIG support in-tree defconfigs Cedric Hombourger
2019-11-05 13:55 ` [PATCH 2/7] linux-mainline: fix stripping of .0 from the kernel version Cedric Hombourger
2019-11-05 13:55 ` [PATCH 3/7] linux-mainline: update from 4.19.0 to 4.19.80 Cedric Hombourger
2019-11-05 13:55 ` [PATCH 4/7] linux-custom: add support for kernel config fragments Cedric Hombourger
2019-11-05 13:57 ` [PATCH 5/7] linux-mainline: disable support for HFS to demonstrate use of " Cedric Hombourger
2019-11-05 13:57   ` [PATCH 6/7] buildchroot-host: install qemu-static to support hybrid cross-compiles Cedric Hombourger
2019-11-05 14:52     ` Jan Kiszka
2019-11-05 15:00       ` Cedric Hombourger
2019-11-05 15:27         ` Jan Kiszka
2019-11-05 13:57   ` [PATCH 7/7] linux-custom: rewrite to no longer depend on the kernel's builddeb Cedric Hombourger
2019-11-05 15:26     ` Jan Kiszka
2019-11-05 16:20       ` Cedric Hombourger
2019-11-05 16:22       ` Jan Kiszka
2019-11-05 16:25         ` Jan Kiszka
2019-11-05 20:16       ` chombourger
2019-11-05 20:24         ` Jan Kiszka
2019-11-07 11:44     ` Gylstorff Quirin
2019-11-07 11:55       ` Cedric Hombourger
2019-11-07 13:20       ` Cedric Hombourger
2019-11-07 15:43         ` Gylstorff Quirin
2019-11-05 15:32 ` [PATCH 0/7] linux-custom recipe rework Jan Kiszka
2019-11-05 15:55 ` Henning Schild
2019-11-05 16:00   ` Cedric Hombourger
2019-11-05 16:19     ` Henning Schild
2019-11-07  9:23 ` [PATCH L-C v2 " Cedric Hombourger
2019-11-07  9:23   ` [PATCH L-C v2 1/7] recipes-kernel/linux: make KERNEL_DEFCONFIG support in-tree defconfigs Cedric Hombourger
2019-11-07  9:23   ` [PATCH L-C v2 2/7] linux-mainline: fix stripping of .0 from the kernel version Cedric Hombourger
2019-11-07  9:23   ` [PATCH L-C v2 3/7] linux-mainline: update from 4.19.0 to 4.19.80 Cedric Hombourger
2019-11-07  9:23   ` [PATCH L-C v2 4/7] linux-custom: add support for kernel config fragments Cedric Hombourger
2019-11-07  9:23   ` [PATCH L-C v2 5/7] linux-mainline: disable support for HFS to demonstrate use of " Cedric Hombourger
2019-11-07  9:23   ` [PATCH L-C v2 6/7] buildchroot-host: install qemu-static to support hybrid cross-compiles Cedric Hombourger
2019-11-07  9:23   ` [PATCH L-C v2 7/7] linux-custom: rewrite to no longer depend on the kernel's builddeb Cedric Hombourger
2019-11-07 11:50     ` Jan Kiszka
2019-11-07 11:52       ` Jan Kiszka
2019-11-07 11:53       ` Cedric Hombourger
2019-11-07 12:14         ` Jan Kiszka
2019-11-09  8:51     ` Jan Kiszka
2019-11-09 13:43       ` Cedric Hombourger
2019-11-22 18:58         ` Jan Kiszka
2019-11-25 16:04           ` [PATCH L-C v4 0/5] linux-custom recipe rework Cedric Hombourger
2019-11-25 16:04             ` [PATCH L-C v4 1/5] recipes-kernel/linux: make KERNEL_DEFCONFIG support in-tree defconfigs Cedric Hombourger
2019-11-25 16:04             ` [PATCH L-C v4 2/5] linux-mainline: fix stripping of .0 from the kernel version Cedric Hombourger
2019-11-25 16:04             ` [PATCH L-C v4 3/5] linux-mainline: update from 4.19.0 to 4.19.80 Cedric Hombourger
2019-11-25 16:04             ` [PATCH L-C v4 4/5] buildchroot-host: install qemu-static to support hybrid cross-compiles Cedric Hombourger
2019-11-25 16:06             ` [PATCH L-C v4 5/5] linux-custom: rewrite to no longer depend on the kernel's builddeb Cedric Hombourger
2019-11-25 19:55               ` Jan Kiszka
2019-11-26  7:42                 ` Cedric Hombourger [this message]
2019-11-26  9:13                   ` Jan Kiszka
2019-11-26 17:10               ` Gylstorff Quirin
2019-11-25 16:16             ` [PATCH L-C v4 0/5] linux-custom recipe rework Jan Kiszka
2019-11-27 15:49             ` Gylstorff Quirin
2019-12-05 17:01             ` Baurzhan Ismagulov
2019-12-09  7:29               ` Jan Kiszka
2019-12-09  7:40                 ` Cedric Hombourger
2019-11-07 11:39   ` [PATCH L-C v2 0/7] " Jan Kiszka
2019-11-07 11:47     ` chombourger
2019-11-07 11:48     ` Jan Kiszka
2019-11-08  7:07   ` [PATCH L-C v3 " Cedric Hombourger
2019-11-08  7:07     ` [PATCH L-C v3 1/7] recipes-kernel/linux: make KERNEL_DEFCONFIG support in-tree defconfigs Cedric Hombourger
2019-11-08  7:07     ` [PATCH L-C v3 2/7] linux-mainline: fix stripping of .0 from the kernel version Cedric Hombourger
2019-11-08  7:07     ` [PATCH L-C v3 3/7] linux-mainline: update from 4.19.0 to 4.19.80 Cedric Hombourger
2019-11-08  7:07     ` [PATCH L-C v3 4/7] linux-custom: add support for kernel config fragments Cedric Hombourger
2019-11-08  7:07     ` [PATCH L-C v3 5/7] linux-mainline: disable support for HFS to demonstrate use of " Cedric Hombourger
2019-11-08  7:07     ` [PATCH L-C v3 6/7] buildchroot-host: install qemu-static to support hybrid cross-compiles Cedric Hombourger
2019-11-08  7:14       ` Jan Kiszka
2019-11-08  7:22         ` Jan Kiszka
2019-11-08  7:23           ` Cedric Hombourger
2019-11-08  7:22         ` Cedric Hombourger
2019-11-08  7:35           ` Jan Kiszka
2019-11-08  7:59             ` Cedric Hombourger
2019-11-08  8:28               ` Jan Kiszka
2019-11-08  7:07     ` [PATCH L-C v3 7/7] linux-custom: rewrite to no longer depend on the kernel's builddeb Cedric Hombourger
2019-11-08  7:19       ` Jan Kiszka
2019-11-08  7:36         ` Cedric Hombourger
2019-11-08  7:41           ` Jan Kiszka
2019-11-08  7:12     ` [PATCH L-C v3 0/7] linux-custom recipe rework Jan Kiszka
2019-11-08  7:27       ` Cedric Hombourger
2019-11-08  7:37         ` Jan Kiszka
2019-11-08  7:42           ` Cedric Hombourger
2019-11-08  7:54             ` Jan Kiszka
2019-11-08  8:01               ` Cedric Hombourger
2019-11-08  8:16                 ` Cedric Hombourger

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=56f1a41c-2c1a-0b68-b40c-9a61a3972298@mentor.com \
    --to=cedric_hombourger@mentor.com \
    --cc=isar-users@googlegroups.com \
    --cc=jan.kiszka@siemens.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox