From mboxrd@z Thu Jan 1 00:00:00 1970 X-GM-THRID: 6755821036247187456 X-Received: by 2002:a17:90a:234c:: with SMTP id f70mr11217423pje.109.1573198582632; Thu, 07 Nov 2019 23:36:22 -0800 (PST) X-BeenThere: isar-users@googlegroups.com Received: by 2002:a62:e70a:: with SMTP id s10ls2179635pfh.6.gmail; Thu, 07 Nov 2019 23:36:22 -0800 (PST) X-Google-Smtp-Source: APXvYqyxUDW2OVdR+IFk6MxfQ6YW0dWEeQrjLMepjR+70POx6rGyBMJS7Jne64Jhucw8RjqavxKW X-Received: by 2002:aa7:930c:: with SMTP id 12mr10129537pfj.33.1573198582005; Thu, 07 Nov 2019 23:36:22 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1573198582; cv=none; d=google.com; s=arc-20160816; b=Xfc1xl5B6y7bTYTblOMwEeUZhBeMqpXS+4Zk4jhA/KaQIStZjCE7CUGKb97X8YaQdG UUbR9opd0d8RdjDvmcv2+go9hLQoRc8UosS2UmbmRLhlNk7+PPCWuUM8MwgEthulAadR rNG4ZyedbeAheaKhzOINLdGDWwTlD8BxM0rzb5140xEXTorCKhl/z4YhLX13Zw4+ptnZ n5+X1k+N5ToOtUScGNRAyUfynl753QgGUmwASLL/rBWmR5Cw3B7k8K+qHp4ukX7V0Vhn YJ46z3xXZjFGbQAnzl0WGmdNNVoZkbebGajhk/PRGC8TiO2Y5QkQh/seuEAP9aQcFOJj GOAw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-language:content-transfer-encoding:in-reply-to:mime-version :user-agent:date:message-id:from:references:to:subject:ironport-sdr :ironport-sdr; bh=Qo9j+M0Ditikr7/nsMUUGGe4pnlYjSg5xUGfJJS6HdE=; b=Rqo9Iq7kp3h6VapQ9RpPlGSa9p1stDE7oXh2zcPhmlKJoudfVFejoLx5bAWnWLnV/8 uVVY1iY1jt0Wt8Ai121i2BytQYcg7xrcTKm6TMlFrrI1cSKSyE7oqbyNXngQ0B2pOUPR 5zexLW1/hyEuBY489D7Eioai7p6LOQOGiFAAJptnMAn6jIFq81bJuWcRlEimR3DobP8w 2V2qYSu3zkHfyas6Jgso/dCbrJeMcJGp3TsJD9sCOwy1H5jGDF3VOkTmaOlkyqZ/+I7l 9nhKaVGsHDsl6/UJsRRu0Zwh/zxVbAt52zaA8L5w36mZ8NY8jeoR6GvR0i66rjghUPFf UzCQ== ARC-Authentication-Results: i=1; gmr-mx.google.com; spf=pass (google.com: domain of cedric_hombourger@mentor.com designates 68.232.129.153 as permitted sender) smtp.mailfrom=Cedric_Hombourger@mentor.com Return-Path: Received: from esa1.mentor.iphmx.com (esa1.mentor.iphmx.com. [68.232.129.153]) by gmr-mx.google.com with ESMTPS id n10si321698pjp.0.2019.11.07.23.36.21 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 07 Nov 2019 23:36:21 -0800 (PST) Received-SPF: pass (google.com: domain of cedric_hombourger@mentor.com designates 68.232.129.153 as permitted sender) client-ip=68.232.129.153; Authentication-Results: gmr-mx.google.com; spf=pass (google.com: domain of cedric_hombourger@mentor.com designates 68.232.129.153 as permitted sender) smtp.mailfrom=Cedric_Hombourger@mentor.com IronPort-SDR: LIKAHyif1njmDYz55ctQhklpzMPZEJKJUd286HINjSd6Z1FcZTus178iyScAtojIpfivLU8pGZ DmgNCoqNZeU2qoOqLRhM39iDANOKy+LJuepoExp0oAUGle+S8T4ICjn66ZLS6ZrJzstLQ/w59l 9PdDOnWkBfE2JwiTNUv61gYr5+N/523Vwi+U+JacRBGUEUvke2uy9GDo62l6iaQ1r9MsXtd4nH ZYmzzIvUF6Im9H6TIvxC8KsIYKjLHaSTjDcwa+7Bj88vSKRnOYUO9/PM6YExr1eXa1fMQl4o1C rZ0= X-IronPort-AV: E=Sophos;i="5.68,280,1569312000"; d="scan'208";a="44844610" Received: from orw-gwy-02-in.mentorg.com ([192.94.38.167]) by esa1.mentor.iphmx.com with ESMTP; 07 Nov 2019 23:36:19 -0800 IronPort-SDR: Gl7aZUoE1/782m3kH9SLM+p+U7nzDmnTW9qlltTcZOKt36wp4kR3hF3rFTIIXKo0+QTzvZ3qvg ych5BS2BbcH+s1q1db6yGtsOuNnwpVsoV5DtvuENmoWYT7P5qXXS8HQcyz5iGJB1I6xg4Fn0gT XrL7GDiI++uTqi8VlXvsynHoId1TuSFjT/wTcPtdNHU/RK0Nm4Lt+Oo4xNFvsDXcn0Z7kt3P3A IpFOq4xee/Q6BCrUk/NLMuXJY8IH4KY+/5VnfpZBubRfIOozQ/N17YSbD5PKLL4adQaNIugkjG Vik= Subject: Re: [PATCH L-C v3 7/7] linux-custom: rewrite to no longer depend on the kernel's builddeb To: Jan Kiszka , References: <1573118604-909-1-git-send-email-Cedric_Hombourger@mentor.com> <1573196839-1143-1-git-send-email-Cedric_Hombourger@mentor.com> <1573196839-1143-8-git-send-email-Cedric_Hombourger@mentor.com> From: Cedric Hombourger Message-ID: <817df519-9d7b-5ec7-5fd6-55f37efee0a9@mentor.com> Date: Fri, 8 Nov 2019 08:36:11 +0100 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:60.0) Gecko/20100101 Thunderbird/60.9.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US Return-Path: Cedric_Hombourger@mentor.com X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: SVR-IES-MBX-07.mgc.mentorg.com (139.181.222.7) To svr-ies-mbx-02.mgc.mentorg.com (139.181.222.2) X-TUID: XRKV5QdJbxAc On 11/8/19 8:19 AM, Jan Kiszka wrote: > On 08.11.19 08:07, 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 >> --- >>   doc/custom_kernel.md                          |  80 +++++++ >>   .../linux/files/build-kernel.sh               | 128 ----------- >>   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      | 206 ++++++++++++++++++ >>   .../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    | 180 ++++++++++----- >>   14 files changed, 712 insertions(+), 185 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/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 f56e96c..0000000 >> --- a/meta/recipes-kernel/linux/files/build-kernel.sh >> +++ /dev/null >> @@ -1,128 +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 ${?} >> -if [ -n "${KERNEL_FRAGMENTS}" ]; then >> -    scripts/kconfig/merge_config.sh -m .config ${KERNEL_FRAGMENTS} >> -fi >> - >> -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..d55096b >> --- /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} >> + This package contains the Linux kernel, modules and corresponding >> other >> + files, version: ${PV}. >> + >> +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} >> + This package provides kernel header files for ${PV} on ${DISTRO_ARCH} >> + . >> + This is useful for people who need to build external modules >> + >> +Package: linux-libc-dev >> +Build-Profiles: >> +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} >> + 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..4ea18d5 >> --- /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}" != "${KR}" -a "${PV}${CONFIG_LOCALVERSION}" != >> "${KR}" ]; then >> +        echo "ERROR: Recipe PV (${PV}) does not seem to match the >> kernelrelease (${KR})!" 1>&2 >> +        echo "ERROR: Make sure the kernel version in your PV setting >> 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 <> +# 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_ 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..8ccda68 >> --- /dev/null >> +++ b/meta/recipes-kernel/linux/files/debian/isar/install.tmpl >> @@ -0,0 +1,206 @@ >> +#!/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 <> +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} >> +    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/linux-image.postinst.tmpl >> b/meta/recipes-kernel/linux/files/debian/linux-image.postinst.tmpl >> new file mode 100644 >> index 0000000..8e8636a >> --- /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} >> +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..4d8a7d9 >> --- /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} >> +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..7465197 >> --- /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} >> +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..1992b32 >> --- /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} >> +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 ca91f64..ecf0e66 100644 >> --- a/meta/recipes-kernel/linux/linux-custom.inc >> +++ b/meta/recipes-kernel/linux/linux-custom.inc >> @@ -2,22 +2,107 @@ >>   # >>   # 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 >> +# ------------------------------------------------------------------- >>     DESCRIPTION ?= "Custom kernel" >> +MAINTAINER ?= "isar-users " >> + >> +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_DTB_DIR ?= "usr/lib/linux-${KERNEL_NAME_PROVIDED}-${PV}" > > Here is the bug that breaks U-boot setups here: Must be > linux-image-${PV} in order to stay compatible with Debian. > > Did you compare some content of the new packages against that of the > original package build? > Yes but I had not anticipated this one as being an issue (so thanks for pointing that out). I have limited hardware available here (mostly Siemens IPCs or non supported boards such as Xilinx ref boards). will check if I can get remote access to some of the boards supported by Isar. I have made the change locally and started a build. I hope I can check it out on the de0-nano-soc board that we have in meta-isar > Jan > >> +KERNEL_HEADERS_DIR ?= "usr/src/linux-headers-${PV}" >>   -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/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_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) >>   } >>   +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() >> @@ -31,57 +116,37 @@ def config_fragments(d): >>               fragments.append(local) >>       return fragments >>   -inherit dpkg-base >> - >> -SRC_URI += "file://build-kernel.sh" >> +do_prepare_build_prepend() { >> +    # copy meta-data over to source tree >> +    rm -rf ${S}/debian >> +    cp -r ${WORKDIR}/debian ${S}/ >>   -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" >> +    # remove templates from the source tree >> +    find ${S}/debian -name *.tmpl | xargs rm -f >>   -KERNEL_LIBC_DEV_DEPLOY ?= "0" >> +    # 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 >>   -do_install_builddeps() { >> -    dpkg_do_mounts >> -    E="${@ bb.utils.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 >> +    # 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 >>         # copy config fragments over to the kernel tree >> @@ -92,22 +157,23 @@ dpkg_runbuild() { >>           mkdir -p ${S}/debian/fragments >>           (cd ${WORKDIR} && cp ${src_frags} ${S}/debian/fragments/) >>       fi >> -    export KERNEL_FRAGMENTS="${out_frags}" >>   -    E="${@ bb.utils.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}" >> - >> -    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}                                           \ >> +        " >> +} >>   +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 >>   } >> > >