public inbox for isar-users@googlegroups.com
 help / color / mirror / Atom feed
From: Jan Kiszka <jan.kiszka@siemens.com>
To: Cedric Hombourger <cedric_hombourger@mentor.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 10:13:37 +0100	[thread overview]
Message-ID: <9f9da618-98ce-af38-0965-2560bd197aa0@siemens.com> (raw)
In-Reply-To: <56f1a41c-2c1a-0b68-b40c-9a61a3972298@mentor.com>

On 26.11.19 08:42, Cedric Hombourger wrote:
> 
> 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?

If you have the time, just fold my change in and send a v5. The only 
"substantial" addition of mine is the unset DEB_HOST_GNU_TYPE. Maybe we 
should also leave a comment in that line why this is currently needed.

BTW, build tests with this against jailhouse-images worked fine. I'll 
push this also to our LAVA lab later on (via xenomai-images) to have a 
boot test on all popular archs.

Jan

-- 
Siemens AG, Corporate Technology, CT RDA IOT SES-DE
Corporate Competence Center Embedded Linux

  reply	other threads:[~2019-11-26  9:13 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
2019-11-26  9:13                   ` Jan Kiszka [this message]
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=9f9da618-98ce-af38-0965-2560bd197aa0@siemens.com \
    --to=jan.kiszka@siemens.com \
    --cc=cedric_hombourger@mentor.com \
    --cc=isar-users@googlegroups.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