From: chombourger@gmail.com
To: isar-users <isar-users@googlegroups.com>
Subject: Re: [PATCH 7/7] linux-custom: rewrite to no longer depend on the kernel's builddeb
Date: Tue, 5 Nov 2019 12:16:38 -0800 (PST) [thread overview]
Message-ID: <6736dd6f-1a6f-4367-8fed-bdacc63ec2de@googlegroups.com> (raw)
In-Reply-To: <8b757aec-9994-683d-8ac4-1c83718373ce@siemens.com>
[-- Attachment #1.1: Type: text/plain, Size: 44926 bytes --]
On Tuesday, November 5, 2019 at 4:26:33 PM UTC+1, Jan Kiszka wrote:
>
> On 05.11.19 14:57, 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_H...@mentor.com <javascript:>>
> > ---
> > doc/custom_kernel.md | 181 ++++++++++++++++
> > .../linux/files/build-kernel.sh | 128 ------------
> > meta/recipes-kernel/linux/files/debian/compat | 1 +
> > .../linux/files/debian/control.tmpl | 36 ++++
> > meta/recipes-kernel/linux/files/debian/files | 5 +
> > .../linux/files/debian/isar/build.tmpl | 36 ++++
> > .../linux/files/debian/isar/clean.tmpl | 20 ++
> > .../linux/files/debian/isar/common.tmpl | 60 ++++++
> > .../linux/files/debian/isar/install.tmpl | 197 ++++++++++++++++++
> > .../files/debian/linux-image.postinst.tmpl | 22 ++
> > .../files/debian/linux-image.postrm.tmpl | 18 ++
> > .../linux/files/debian/rules.tmpl | 39 ++++
> > meta/recipes-kernel/linux/linux-custom.inc | 172 ++++++++++-----
> > 13 files changed, 732 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/files
> > 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 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..5ab2599
> > --- /dev/null
> > +++ b/doc/custom_kernel.md
> > @@ -0,0 +1,181 @@
> > +# Custom kernel recipe for Isar
> > +
> > +## Contents
> > +
> > + - [Summary](#summary)
> > + - [Proposal owners](#proposal-owners)
> > + - [Current status](#current-status)
> > + - [Detailed description](#detailed-description)
> > + - [Benefit to Isar](#benefit-to-isar)
> > + - [How can I help?](#how-can-i-help)
> > + - [Scope](#scope)
> > + - [How to test](#how-to-test)
> > + - [Dependencies](#dependencies)
> > + - [Documentation](#documentation)
> > + - [Questions and answers](#questions-and-answers)
> > +
> > +## Summary
> > +
> > +Isar currently uses the Linux kernel's builddeb script to generate
> linux-image,
> > +linux-headers and linux-libc-dev packages for your custom kernel
> sources. The
> > +main benefit of this approach was that the low level details of how to
> package
> > +the Linux kernel image, modules and headers were left in the kernel.
> There are
> > +however some drawbacks: Isar had to repack generated packages to
> introduce some
> > +of the changes it needs such as suffixing the kernel packages with the
> name of
> > +the custom kernel (e.g. with "mainline" for the "linux-mainline"
> recipe), lack
> > +of automatic dependencies (the builddeb script from the kernel does not
> use
> > +debhelper), it was difficult to add packages especially distribution
> specific
> > +packages (maintain version specific patch in Isar vs being able to
> upstream
> > +distribution specific changes upstream), etc. This change is about
> being less
> > +dependent on the kernel packaging scripts (which aren't used by major
> distros
> > +anyway) and regain control on how we want or need the Linux kernel
> packaged.
> > +
> > +## Proposal owners
> > +
> > + * name: [Cedric Hombourger](https://github.com/chombourger)
> > +
> > +## Current status
> > +
> > +### Tests
> > +
> > +The following were recently checked:
> > +
> > + * Custom kernels in meta-isar build without (known) failures
> > + * initrd image gets generated when the kernel is added to the rootfs
> > + * `ISAR_CROSS_COMPILE` is supported
> > + * `KERNEL_FILE` is honored
> > + * `KERNEL_DEFCONFIG` may either be a file (specified via `SRC_URI`) or
> a
> > + kernel-provided defconfig
> > + * Config fragments get merged with the user-specified kernel
> configuration
> > + * Path to installed DTBs may be configured (new)
> > + * Configuration and build from a `devshell`
> > + * Support for the `KERNEL_LIBC_DEV_DEPLOY` directive
> > +
> > +while the following needs work:
> > +
> > + * Check if custom-kernel builds are reproducible
> > +
> > +### Remaining work items
> > +
> > + * Check if there is a better way to cross compile kernel "scripts"
> such as
> > + `fixdep` or `modpost` than manually compiling them (they are
> compiled for
> > + the build machine (amd64) and not for the target (e.g. armhf) even
> though
> > + we are cross-compiling - yet the linux-headers package should be
> shipping
> > + "scripts" for the target machine)
> > +
> > +## Detailed description
> > +
> > +### Requirements
> > +
> > +#### Current
> > +
> > +Isar has had a `linux-custom` recipe for a long time and counts many
> users. It is therefore
> > +paramount to maintain features that it has today with no or little
> changes to the APIs. The
> > +following requirements were identified and will be maintained:
> > +
> > + 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`
>
> Reference to KERNEL_DEFCONFIG is missing.
>
> > +
> > + 3. Support 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
>
> One package to serve them all? Is that the use case for patch 6? IOW, we
> are now building linux-headers for the target, not the host OS anymore?
> What's the slowdown compare to cross-linux-headers?
>
> The current policy is that, when cross-building, our -dev packagages
> (which is what linux-headers falls under) will work natively with the
> buildchroot. The future path is clearly generating fitting packages for
> both host and target. Or is there anything in the linux-headers that
> prevents providing both?
>
> > +
> > + 10. Produce a `linux-libc-dev` package to support user-land builds
>
> This should be opt-in only: No need to build it when we don't ship it.
> Just add the related fragement to debian/control when
> KERNEL_LIBC_DEV_DEPLOY is set.
>
> > +
> > + 11. Only 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)
> > +
> > +#### New requirements (proposed)
> > +
> > +This proposal includes the following new requirements:
> > +
> > + 1. Support creation of additional packages
> > +
> > + 2. Allow per-distro packaging tweaks
> > +
> > +### Approach
> > +
> > +The new implementation will have the `builddeb` code ported from the
> Linux kernel included to the
> > +Isar environment. It will be refactor to support pre and post hooks.
> Hooks may be used by external
> > +layers to extend the kernel packaging instructions provided by "stock"
> Isar or by Isar itself to
> > +implement distro-specific packages or tweaks.
> > +
> > +Hooks need the ability to add `build` and `install` steps which can be
> achieved by having the main
> > +`build` and `install` steps call pre and post scripts. This will
> however solve only one side of the
> > +problem: new packages should be declared in the `debian/control` file.
> The packaging process
> > +(initiated by `debian/rules`) will use a baseline `control` file when
> started and a mechanism will
> > +be provided for hooks to append `control` blocks as they are processed.
>
> Is this a section addressing users or reviewers? The latter audience is
> better addressed via the commit log.
>
> > +
> > +### Future work
> > +
> > +In the event where this proposal is accepted, here are a few future
> projects that are being
> > +considered:
> > +
> > + 1. Package `perf` as Debian does
> > +
> > + 2. Add `ubuntu` as an Isar supported target distro and validate
> `linux-custom` recipe
> > +
> > +## Benefit to Isar
> > +
> > + * Control the kernel build and packaging process
> > +
> > + * No longer need to repack packages
> > +
> > + * Provide hooks for custom kernel recipes to add build/install
> directives
>
> Careful with hooks! They tend to pile up mess. Where exactly do you want
> them? What for?
>
> > +
> > +## How can I help?
> > +
> > + * Check if you are able to build your own linux-custom recipes with
> this change
> > + * Check if packages generated by this recipe are compatible with your
> Debian-based distro
> > + * Review and provide comments on this changeset
> > + * Create templates for distro-specific packages (e.g. perf)
> > +
> > +## Scope
> > +
> > + * Proposal owners: proposal owners are to communicate the idea to
> isar-users and make sure
> > + that all of their requirements are met (to the extent they are
> already supported with the
> > + current solution) or may be met in the future.
> > +
> > + * Other developers: port your out-of-tree linux-custom recipes to this
> new solution and
> > + report issues.
> > +
> > +## How to test?
> > +
> > +The linux-mainline recipe may be used for some basic testing. This
> recipe is being used by the
> > +following machines:
> > +
> > + * de0-nano-soc
> > + * qemumipsel
> > +
> > +## Dependencies
> > +
> > + * None
> > +
> > +## Documentation
> > +
> > + * Document user-visible variables added by this proposal
> > +
> > +## Questions and answers
> > +
> > + * None
> > 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..1295466
> > --- /dev/null
> > +++ b/meta/recipes-kernel/linux/files/debian/control.tmpl
> > @@ -0,0 +1,36 @@
> > +Source: linux-${KERNEL_NAME_PROVIDED}
> > +Section: kernel
> > +Priority: optional
> > +Maintainer: ${MAINTAINER}
> > +Build-Depends: bc, kmod, cpio, ${KBUILD_DEPENDS}
> > +Homepage: http://www.kernel.org/
>
> Standard-Version?
>
> > +
> > +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
>
> See above, should not be here by default.
>
> > +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/files
> b/meta/recipes-kernel/linux/files/debian/files
> > new file mode 100644
> > index 0000000..a8ace32
> > --- /dev/null
> > +++ b/meta/recipes-kernel/linux/files/debian/files
> > @@ -0,0 +1,5 @@
> > +linux-headers_4.19.80-1_mipsel.deb kernel optional
> > +linux-image-dbg_4.19.80-1_mipsel.deb debug optional
> > +linux-image_4.19.80-1_mipsel.deb kernel optional
> > +linux-libc-dev_4.19.80-1_mipsel.deb devel optional
> > +linux_4.19.80-1_mipsel.buildinfo kernel optional
>
> Looks like an accidentally added file.
>
> > 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..ce79d56
> > --- /dev/null
> > +++ b/meta/recipes-kernel/linux/files/debian/isar/build.tmpl
> > @@ -0,0 +1,36 @@
> > +#!/bin/sh
> > +# 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
> > +
> > + # Trace what we do here
> > + set -x
> > +
> > + # Process existing kernel configuration to make sure it is complete
> > + # (use defaults for options that were not specified)
> > + ${MAKE} O=${KERNEL_BUILD_DIR} olddefconfig || exit ${?}
> > +
> > + # 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..2aa3742
> > --- /dev/null
> > +++ b/meta/recipes-kernel/linux/files/debian/isar/clean.tmpl
> > @@ -0,0 +1,20 @@
> > +#!/bin/sh
> > +# 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} ${deb_libc_hdr_dir}
>
> I suppose we rather (or also?) want "make clean" here for the build
> artifacts. Just make sure to save/restore the debian folder across that
> step.
>
> > +
> > + # 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..b392b46
> > --- /dev/null
> > +++ b/meta/recipes-kernel/linux/files/debian/isar/common.tmpl
> > @@ -0,0 +1,60 @@
> > +#!/bin/sh
> > +# 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}
> > +
> > +main() {
> > + target=${1}
> > +
> > + if [ ! -f ${S}/debian/isar/${target} ]; then
> > + echo "error: ${target} is not a supported build target!" >&2
> > + return 1
> > + fi
> > +
> > + # check for scripts to be sourced
> > + for f in ${S}/debian/isar/defaults.d/${target}/*; do
> > + [ -f ${f} ] || continue
> > + . ${f} || return ${?}
> > + 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
> > +
> > + # check for pre-target scripts
> > + for f in ${S}/debian/isar/pre.d/${target}/*; do
> > + [ -f ${f} ] || continue
> > + sh ${f} || return ${?}
> > + done
> > +
> > + # call the actual target script
> > + do_${target} || return ${?}
> > +
> > + # check for post-target scripts
> > + for f in ${S}/debian/isar/post.d/${target}/*; do
> > + [ -f ${f} ] || continue
> > + sh ${f} || return ${?}
> > + done
> > +}
> > 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..2055669
> > --- /dev/null
> > +++ b/meta/recipes-kernel/linux/files/debian/isar/install.tmpl
> > @@ -0,0 +1,197 @@
> > +#!/bin/sh
> > +# Copyright (c) Mentor Graphics, a Siemens business, 2019
> > +# SPDX-License-Identifier: MIT
> > +
> > +# Load common stuff
> > +. ${S}/debian/isar/common || exit ${?}
> > +
> > +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)"
> > + case "${ARCH}" in
> > + mips|powerpc) kimage_path="boot/vmlinux-${PV}" ;;
> > + um) kimage_path="usr/bin/vmlinux-${PV}" ;;
> > + *) kimage_path="boot/vmlinuz-${PV}" ;;
> > + esac
> > +
> > + print_settings
> > +
> > + # Stop on error
> > + set -e
> > +
> > + # 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}
> > + 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/${PV}/
> > + cp vmlinux ${deb_dbg_dir}/usr/lib/debug/lib/modules/${PV}/
> > + # systemtap
> > + mkdir -p ${deb_dbg_dir}/usr/lib/debug/boot/
> > + ln -s ../lib/modules/$version/vmlinux
> ${deb_dbg_dir}/usr/lib/debug/boot/vmlinux-${PV}
> > + # kdump-tools
> > + ln -s lib/modules/${PV}/vmlinux
> ${deb_dbg_dir}/usr/lib/debug/vmlinux-${PV}
> > +}
> > +
> > +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
> > +}
> > +
> > +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/${PV}/.fresh-install
> > + rm -fv ${deb_img_dir}/lib/modules/${PV}/build
> > + rm -fv ${deb_img_dir}/lib/modules/${PV}/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/${PV}
> > +
> > + (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/${PV}/build
> > +}
> > +
> > +install_headers() {
> > + headers_check
> > + 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..fd89121
> > --- /dev/null
> > +++ b/meta/recipes-kernel/linux/files/debian/linux-image.postinst.tmpl
> > @@ -0,0 +1,22 @@
> > +#!/bin/sh
> > +
> > +set -e
> > +set -x
> > +
> > +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
> > +
> > +# Pass maintainer script parameters to hook scripts
> > +export DEB_MAINT_PARAMS="$*"
> > +
> > +# Tell initramfs builder whether it's wanted
> > +export INITRD=Yes
>
> I've noticed while hacking my version that this should follow
> CONFIG_BLK_DEV_INITRD.
>
> > +
> > +test -d /etc/kernel/postinst.d && run-parts --arg="${PV}"
> --arg="/boot/${KERNEL_FILE}-${PV}" /etc/kernel/postinst.d
> > +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..9d88218
> > --- /dev/null
> > +++ b/meta/recipes-kernel/linux/files/debian/linux-image.postrm.tmpl
> > @@ -0,0 +1,18 @@
> > +#!/bin/sh
> > +
> > +set -e
> > +
> > +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
> > +
> > +# Pass maintainer script parameters to hook scripts
> > +export DEB_MAINT_PARAMS="$*"
> > +
> > +# Tell initramfs builder whether it's wanted
> > +export INITRD=Yes
> > +
> > +test -d /etc/kernel/postrm.d && run-parts --arg="${PV}"
> --arg="/boot/${KERNEL_FILE}-${PV}" /etc/kernel/postrm.d
> > +exit 0
> > diff --git a/meta/recipes-kernel/linux/files/debian/rules.tmpl
> b/meta/recipes-kernel/linux/files/debian/rules.tmpl
>
> There is quite some duplication between postinst and postrm already.
> Moreover, I think you are missing preinst and prerm. I think all four
> should probably be generated from one template.
>
Ok I have checked upstream scripts and it seems that they all differ
see https://salsa.debian.org/kernel-team/linux/tree/master/debian/templates
I would recommend we just copy over their scripts but use our templating
system instead of theirs
(use ${var} instead of @var@)
>
> > new file mode 100755
> > index 0000000..93c8a5b
> > --- /dev/null
> > +++ b/meta/recipes-kernel/linux/files/debian/rules.tmpl
> > @@ -0,0 +1,39 @@
> > +#!/usr/bin/make -f
> > +
> > +export CROSS_COMPILE=$(DEB_HOST_GNU_TYPE)-
> > +
> > +O:=$(CURDIR)/${KERNEL_BUILD_DIR}
> > +S:=$(CURDIR)
> > +deb_top_dir:=$(S)/debian
> > +
> > +DH_VERBOSE=1
> > +
> > +# Dynamic variables to be passed to Isar build scripts
> > +isar_env=$(strip \
> > + export CROSS_COMPILE='$(CROSS_COMPILE)' && \
> > + export MAKE='$(MAKE)' && \
> > + export O='${O}' \
> > + export S='${S}' \
> > +)
> > +
> > +%:
> > + dh $(@)
> > +
> > +.PHONY: override_dh_auto_clean
> > +override_dh_auto_clean:
> > + $(isar_env) && sh $(deb_top_dir)/isar/clean
> > +
> > +.PHONY: override_dh_auto_build
> > +override_dh_auto_build:
> > + $(isar_env) && sh $(deb_top_dir)/isar/build
> > +
> > +override_dh_auto_install:
> > + $(isar_env) && sh $(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..36086be 100644
> > --- a/meta/recipes-kernel/linux/linux-custom.inc
> > +++ b/meta/recipes-kernel/linux/linux-custom.inc
> > @@ -2,22 +2,104 @@
> > #
> > # 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 <isar-...@googlegroups.com <javascript:>>"
> > +
> > +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}"
> > +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/rules.tmpl \
> > +"
> > +
> > +TEMPLATE_VARS += " \
> > + 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 +113,35 @@ 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
> >
> > -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,21 +152,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}
> 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}
> \
> > + "
> > +}
> >
> > - sudo -E chroot --userspec=$( id -u ):$( id -g )
> ${BUILDCHROOT_DIR} ${PP}/build-kernel.sh ${PP}/${PPS} ${DISTRO_ARCH}
> > +dpkg_runbuild_prepend() {
> > + dpkg_configure_kernel
> > +}
> >
> > +dpkg_runbuild_append() {
> > if [ "${KERNEL_LIBC_DEV_DEPLOY}" != "1" ]; then
> > rm -f ${WORKDIR}/linux-libc-dev_${PV}*.deb
> > fi
> >
>
> Valuable step forward! I still need to check some more details against
> my unfinished prototype, but it seems it generally a superset of it.
>
> Jan
>
> --
> Siemens AG, Corporate Technology, CT RDA IOT SES-DE
> Corporate Competence Center Embedded Linux
>
[-- Attachment #1.2: Type: text/html, Size: 56839 bytes --]
next prev parent reply other threads:[~2019-11-05 20:16 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 [this message]
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
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=6736dd6f-1a6f-4367-8fed-bdacc63ec2de@googlegroups.com \
--to=chombourger@gmail.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