From mboxrd@z Thu Jan 1 00:00:00 1970 X-GM-THRID: 6950929522725224448 X-Received: by 2002:a2e:90d:: with SMTP id 13mr1680670ljj.186.1618489590305; Thu, 15 Apr 2021 05:26:30 -0700 (PDT) X-BeenThere: isar-users@googlegroups.com Received: by 2002:a2e:588:: with SMTP id 130ls1097319ljf.9.gmail; Thu, 15 Apr 2021 05:26:29 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwDBeU59Tlc9xdqZeFTf1fPD7WXkfQgQHK7Jegc37m8i/6ZuOzBqA11hwko5KuKAU+P8Goi X-Received: by 2002:a2e:8885:: with SMTP id k5mr1671014lji.27.1618489589287; Thu, 15 Apr 2021 05:26:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1618489589; cv=none; d=google.com; s=arc-20160816; b=mXPGHM9vZIjtTQWq3K1rIXIFRMchpOf63uULr/KzXS1mY5ywtnQ8WEywuN4oClcsaZ uyXtSW2iFW2Bi4yo0fP805k5F8UbelWHzRbr1QsDLbyvdIrLx2U7MQCYYyNwVNTGz97/ qkTq3jBV+gPz+L9JeZRNmo5om6NI8lRmh0miTtZnqFig3NkCqxW1Hr8L5fht4LBkIh7V HSjPjoy4IWc2je2bKzn/IbsphtAgYGnrsK13tDCLplF1NN1XdW/eHeT4dR/Vkn8fFjgi LHeM18KvjpCN5XJnVsxTve3ow27Hb5Ghyw5tO1lZjYEeqAbAwgStMk+nkjXQlfQLwLvo Y/9A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:subject:cc:to:from:date; bh=qjmkrwcXhqBzbZSVFFReYafcmw5OkfQkSHHCq2/ZGJo=; b=cOKEq2wOFURY6Oda2d2xhY14uFelnMssIZRggyuHUDyl2gpCgtM+rpJq1/5q5Qbvdr M6I9zJiJE0xoxd1y2AICRJXrOs02SUaG5//a0OpPG46KmxBLWH1lhHmkNqJljvlZChla Wpj67GiT187FJ9Wm5qj5q5BWsfg+7H1R2X1LatAjrP4odZ/WSEZ39BZb3yPO7VYt3Yrg MHGa1wbUdEQu8pGx+5SmM3DwLdEewq9RPK1Uh/vsnuBAmEqA68Q7br412NOvbIAjGAsd SqnTepluhlC6+XffWoBh7xbXcQklPyWFAcKaJTIl04bdVOsafr82gA51ooT2TZPLGYk/ Czww== ARC-Authentication-Results: i=1; gmr-mx.google.com; spf=pass (google.com: domain of henning.schild@siemens.com designates 194.138.37.40 as permitted sender) smtp.mailfrom=henning.schild@siemens.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=siemens.com Return-Path: Received: from gecko.sbs.de (gecko.sbs.de. [194.138.37.40]) by gmr-mx.google.com with ESMTPS id z2si94544ljm.0.2021.04.15.05.26.29 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 15 Apr 2021 05:26:29 -0700 (PDT) Received-SPF: pass (google.com: domain of henning.schild@siemens.com designates 194.138.37.40 as permitted sender) client-ip=194.138.37.40; Authentication-Results: gmr-mx.google.com; spf=pass (google.com: domain of henning.schild@siemens.com designates 194.138.37.40 as permitted sender) smtp.mailfrom=henning.schild@siemens.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=siemens.com Received: from mail1.sbs.de (mail1.sbs.de [192.129.41.35]) by gecko.sbs.de (8.15.2/8.15.2) with ESMTPS id 13FCQSKW016188 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 15 Apr 2021 14:26:28 +0200 Received: from md1za8fc.ad001.siemens.net ([139.22.41.180]) by mail1.sbs.de (8.15.2/8.15.2) with ESMTP id 13FCQSsX007343; Thu, 15 Apr 2021 14:26:28 +0200 Date: Thu, 15 Apr 2021 14:26:27 +0200 From: Henning Schild To: Jan Kiszka Cc: Felix Moessbauer , Subject: Re: [PATCH 1/1] Add support to build binary version of DKMS kernel modules Message-ID: <20210415142627.04646da2@md1za8fc.ad001.siemens.net> In-Reply-To: References: <20210414083617.20940-1-felix.moessbauer@siemens.com> <20210414083617.20940-2-felix.moessbauer@siemens.com> <20210414105208.2cc99156@md1za8fc.ad001.siemens.net> X-Mailer: Claws Mail 3.17.8 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-TUID: QlgJ1/YdeoA2 Am Wed, 14 Apr 2021 11:03:50 +0200 schrieb Jan Kiszka : > On 14.04.21 10:52, Henning Schild wrote: > > Hi Felix, > > > > thanks for pushing this one upstream. > > > > We will need a testcase for it, so make sure to enter into > > "scripts/ci_build.sh" > > > > I would suggest the virtualbox modules or maybe vmware modules > > instead. This way we would probably have more distro coverage and > > in fact have a useful example for people doing virtualbox (the one > > i would prefer). Not sure that is possible or why you picked dpdk. > > None of those crappy modules will build on non-x86. We should look > for a portable example. Yes ideally we find a dkms package that exists on all distros and arches, not sure that exists. Would also allow testing the Isar crossbuild on that feature. If cross causes issues ISAR_CROSS_COMPILE = "0" in the class might be acceptable, would be to me. If we do not find such a generic module, all i said is that vbox is probably more useful than igb_uio. And probably more available across distros. Henning > Jan > > > > > Am Wed, 14 Apr 2021 10:36:17 +0200 > > schrieb Felix Moessbauer : > > > >> This patch adds support to build and install a kernel module that > >> is available via a debian DKMS package. > >> As it is hard to directly build and install the package we create > >> and distribute a meta package that is independent of the kernel > >> version. In that package, we depend on the versioned prebuild > >> kernel module package. > >> > >> To build the dkms module, we add two tasks and directly > >> use dkms to build the debian package containing the binary module > >> Then we just copy the binary-module debian package to the workdir, > >> > >> Signed-off-by: Felix Moessbauer > >> --- > >> .../example-dkms-module/igb-uio_20.11.bb | 14 ++++ > >> meta/classes/dkms-module.bbclass | 68 > >> +++++++++++++++++++ 2 files changed, 82 insertions(+) > >> create mode 100644 > >> meta-isar/recipes-kernel/example-dkms-module/igb-uio_20.11.bb > >> create mode 100644 meta/classes/dkms-module.bbclass > >> > >> diff --git > >> a/meta-isar/recipes-kernel/example-dkms-module/igb-uio_20.11.bb > >> b/meta-isar/recipes-kernel/example-dkms-module/igb-uio_20.11.bb new > >> file mode 100644 index 0000000..abb9922 --- /dev/null > >> +++ b/meta-isar/recipes-kernel/example-dkms-module/igb-uio_20.11.bb > >> @@ -0,0 +1,14 @@ > >> +# Example recipe for building the binary version of a DKMS module > >> +# > >> +# This software is a part of ISAR. > >> +# Copyright (c) Siemens AG, 2018 > >> +# > >> +# SPDX-License-Identifier: MIT > >> + > >> +inherit dkms-module > >> + > >> +PN .= "-${KERNEL_NAME}" > >> + > >> +#package name (without -dkms. E.g "dpdk-kmods" for package > >> "dpdk-kmods-dkms") +DKMS_PACKAGE_NAME = "dpdk-kmods" > >> +AUTOLOAD += "igb_uio" > >> diff --git a/meta/classes/dkms-module.bbclass > >> b/meta/classes/dkms-module.bbclass new file mode 100644 > >> index 0000000..d1dbba9 > >> --- /dev/null > >> +++ b/meta/classes/dkms-module.bbclass > >> @@ -0,0 +1,68 @@ > >> +# This software is a part of ISAR. > >> +# Copyright (C) 2021 Siemens AG > >> +# > >> +# SPDX-License-Identifier: MIT > >> + > >> +inherit dpkg-raw > >> + > >> +# Build and install a kernel module that is available via a debian > >> DKMS package. +# As it is hard to directly build and install the > >> package we create and distribute +# a meta package that is > >> independent of the kernel version. +# In that package, we depend on > >> the versioned prebuild kernel module package. +# > >> +# To build the dkms module, we add two tasks and directly > >> +# use dkms to build the debian package containing the binary > >> module +# Then we just copy the binary-module debian package to > >> the workdir, +# so ISAR's do_deploy_deb picks it up. > >> + > >> +#package name (without -dkms. E.g "dpdk-kmods" for package > >> "dpdk-kmods-dkms") +DKMS_PACKAGE_NAME ?= "" > >> +AUTOLOAD ?= "" > >> + > >> +DESCRIPTION ?= "Kernel module from DKMS package for ${PN}" > >> +DEPENDS += "linux-headers-${KERNEL_NAME}" > >> +DEBIAN_DEPENDS += "${DKMS_PACKAGE_NAME}-modules," > >> +DEBIAN_BUILD_DEPENDS += "linux-headers-${KERNEL_NAME}, > >> ${DKMS_PACKAGE_NAME}-dkms," + > >> +# install configuration to auto-load the modules in ${AUTOLOAD} > >> +do_install() { > >> + # auto load the module > >> + install -v -d ${D}/etc/modules-load.d > >> + for module in "${AUTOLOAD}"; do > >> + echo $module > ${D}/etc/modules-load.d/${PN}.conf > >> + done > > > > I think this might need an "update-initramfs -u" in postinst, but i > > am not sure, check the other autoloader code and see if you can > > share. Such modules probably do not need early loading in initrd, > > but "/etc/modules-load.d" is mirrored into the initrd so we should > > not get out of sync. > > It is important that both autoloaders do the same or similar things, > > initrd could stay open if the other one also does not care. > > > > Henning > > > >> +} > >> + > >> +# build the binary kernel module and package as debian package > >> (versioned) +do_module_build() { > >> + # we have to find out the module version, e.g. > >> dpdk-kmods/0~20201113+git -k 5.10.0-3-rt-amd64/x86_64 > >> + REVISION=$(find > >> ${BUILDCHROOT_DIR}/usr/src/${DKMS_PACKAGE_NAME}-* -type d -exec > >> basename {} + | sed 's/${DKMS_PACKAGE_NAME}-//g') > >> + if ! dpkg -s --root=${BUILDCHROOT_DIR} > >> linux-headers-${KERNEL_NAME} | grep "Depends:.*linux-headers"; then > >> + # custom kernels directly place their files in > >> linux-image-KERNEL-NAME, instead > >> + # of using a meta package + a versioned package with the > >> resources > >> + # The prebuild DKMS binary package depends on the > >> versioned kernel package, > >> + # but that is not available on custom kernels. Hence, we > >> just remove the dependency. > >> + bbnote "Building ${DKMS_PACKAGE_NAME} for custom kernel > >> ${KERNEL_NAME}" > >> + cp > >> ${BUILDCHROOT_DIR}/etc/dkms/template-dkms-mkbmdeb/debian/control > >> ${WORKDIR}/control.dkms.orig > >> + sudo sed -i 's/, linux-image-KERNEL_VERSION//' > >> ${BUILDCHROOT_DIR}/etc/dkms/template-dkms-mkbmdeb/debian/control > >> + fi > >> + # build the module for all installed kernels (should be just > >> one) > >> + sudo -E chroot ${BUILDCHROOT_DIR} dkms mkbmdeb > >> ${DKMS_PACKAGE_NAME}/${REVISION} --all > >> + DKMS_PACKAGE_VERSIONED=$(find > >> ${BUILDCHROOT_DIR}/var/lib/dkms/${DKMS_PACKAGE_NAME}/ -name > >> "${DKMS_PACKAGE_NAME}-modules*.deb" -exec dpkg -I {} + | grep > >> "Package:" | awk '{print $2}') > >> + if [ -z "$DKMS_PACKAGE_VERSIONED" ]; then > >> + bberror "No prebuild dkms module found" > >> + exit 1 > >> + fi > >> + # restore dkms template (if any) > >> + cp ${WORKDIR}/control.dkms.orig > >> ${BUILDCHROOT_DIR}/etc/dkms/template-dkms-mkbmdeb/debian/control || > >> true +} + > >> +# simply copy our module from the build tree to the expected > >> output location +# of this recipe. Then, do_deploy_dep finds it > >> and adds it to the +# debian isar repo > >> +do_module_deploy() { > >> + cp > >> ${BUILDCHROOT_DIR}/var/lib/dkms/${DKMS_PACKAGE_NAME}/*/bmdeb/*.deb > >> ${S}/../ +} + > >> +addtask module_build after do_install_builddeps before > >> do_dpkg_build +addtask module_deploy after do_module_build before > >> do_deploy_deb > > >