On 15/02/2023 03:20, Masahiro Yamada wrote: > Improve the source package support in case the dpkg-buildpackage is > directly used to build binary packages. > > For cross-compiling, you can set CROSS_COMPILE via the environment > variable, but it is better to set it automatically - set it to > ${DEB_HOST_GNU_TYPE}- if we are cross-compiling but not from the top > Makefile. > > The generated source package may be carried to a different build > environment, which may have a different compiler installed. > Run olddefconfig first to set new CONFIG options to their default > values without prompting. > > Take KERNELRELEASE and KBUILD_BUILD_VERSION from the version field of > debian/changelog in case it is updated afterwards. I just arrived to this patch when trying to update the kernel for SOF from 6.2.0 base to 6.3.0-rc1: https://github.com/thesofproject/linux/pull/4223#issuecomment-1459997676 Our CI is building a kernel deb package from PRs to test with this command: make bindeb-pkg LOCALVERSION=-$PRIDV-default KDEB_PKGVERSION=$(make kernelversion)-$GITSHA The files, directories and the name of the deb package follows the rule set up by scripts/setlocalversion, taking into account the LOCALVERSION, CONFIG_LOCALVERSION and CONFIG_LOCALVERSION_AUTO, but the built kernel is using the version derived from KDEB_PKGVERSION and the system is not able to boot up since the modules are in a different directory then they should be. Something like this: make bindeb-pkg LOCALVERSION=-testbuild vmlinuz-6.3.0-rc1-testbuild-05827-g863ad81a6aa9-dirty /lib/modules/6.3.0-rc1-testbuild-05827-g863ad81a6aa9-dirty/ strings vmlinuz-6.3.0-rc1-testbuild-05827-g863ad81a6aa9-dirty | grep 6.3 6.3.0-rc1-testbuild-05827-g863ad81a6aa9-dirty Then with the KDEB_PKGVERSION: make bindeb-pkg LOCALVERSION=-testbuild KDEB_PKGVERSION=$(make kernelversion)-notworking vmlinuz-6.3.0-rc1-testbuild-05827-g863ad81a6aa9-dirty /lib/modules/6.3.0-rc1-testbuild-05827-g863ad81a6aa9-dirty/ strings vmlinuz-6.3.0-rc1-testbuild-05827-g863ad81a6aa9-dirty | grep 6.3 6.3.0-rc1 in this case modprobe will not find the modules, it is looking for them under /lib/modules/6.3.0-rc1 Reverting this patch makes the created deb package usable, the system is bootable. We use the LOCALVERSION to feed in PR inforamtion and the KDEB_PKGVERSION is used fro additional information, like build ID. Do you have any suggestion on how to get the functionality back or we must stop using the KDEB_PKGVERSION altogether? Thank you, -- Péter > > Signed-off-by: Masahiro Yamada <masahiroy@xxxxxxxxxx> > --- > > Changes in v6: > - New patch > > scripts/package/deb-build-option | 16 ++++++++++++++++ > scripts/package/mkdebian | 9 ++++----- > 2 files changed, 20 insertions(+), 5 deletions(-) > create mode 100755 scripts/package/deb-build-option > > diff --git a/scripts/package/deb-build-option b/scripts/package/deb-build-option > new file mode 100755 > index 000000000000..b079b0d121d4 > --- /dev/null > +++ b/scripts/package/deb-build-option > @@ -0,0 +1,16 @@ > +#!/bin/sh > +# SPDX-License-Identifier: GPL-2.0-only > + > +# Set up CROSS_COMPILE if we are cross-compiling, but not called from the > +# kernel toplevel Makefile > +if [ -z "${CROSS_COMPILE}${cross_compiling}" -a "${DEB_HOST_ARCH}" != "${DEB_BUILD_ARCH}" ]; then > + echo CROSS_COMPILE=${DEB_HOST_GNU_TYPE}- > +fi > + > +version=$(dpkg-parsechangelog -S Version) > +version_upstream="${version%-*}" > +debian_revision="${version#${version_upstream}}" > +debian_revision="${debian_revision#*-}" > + > +echo KERNELRELEASE=${version_upstream} > +echo KBUILD_BUILD_VERSION=${debian_revision} > diff --git a/scripts/package/mkdebian b/scripts/package/mkdebian > index eef20d5dc288..f74380036bb5 100755 > --- a/scripts/package/mkdebian > +++ b/scripts/package/mkdebian > @@ -90,10 +90,8 @@ rm -rf debian > version=$KERNELRELEASE > if [ -n "$KDEB_PKGVERSION" ]; then > packageversion=$KDEB_PKGVERSION > - revision=${packageversion##*-} > else > - revision=$($srctree/init/build-version) > - packageversion=$version-$revision > + packageversion=$version-$($srctree/init/build-version) > fi > sourcename=${KDEB_SOURCENAME:-linux-upstream} > > @@ -244,8 +242,9 @@ srctree ?= . > > build-indep: > build-arch: > - \$(MAKE) KERNELRELEASE=${version} ARCH=${ARCH} \ > - KBUILD_BUILD_VERSION=${revision} -f \$(srctree)/Makefile > + \$(MAKE) -f \$(srctree)/Makefile ARCH=${ARCH} \ > + \$(shell \$(srctree)/scripts/package/deb-build-option) \ > + olddefconfig all > > build: build-arch > -- Péter