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: Mon, 25 Nov 2019 20:55:02 +0100 [thread overview]
Message-ID: <11e0da8e-f67c-f850-47b0-e16395dbca33@siemens.com> (raw)
In-Reply-To: <1574697960-879-1-git-send-email-Cedric_Hombourger@mentor.com>
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.
Jan
--
Siemens AG, Corporate Technology, CT RDA IOT SES-DE
Corporate Competence Center Embedded Linux
next prev parent reply other threads:[~2019-11-25 19:55 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 [this message]
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=11e0da8e-f67c-f850-47b0-e16395dbca33@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