From mboxrd@z Thu Jan 1 00:00:00 1970 X-GM-THRID: 6950929522725224448 X-Received: by 2002:a1c:23d0:: with SMTP id j199mr1937538wmj.74.1618390330557; Wed, 14 Apr 2021 01:52:10 -0700 (PDT) X-BeenThere: isar-users@googlegroups.com Received: by 2002:a05:600c:4a04:: with SMTP id c4ls734287wmp.1.gmail; Wed, 14 Apr 2021 01:52:09 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyaG7vIzgRNRZi0jHoxNec22i95t/5psvNBqYga51kMgTWTFiercngfmkCqMARdiEKgufZ+ X-Received: by 2002:a1c:6887:: with SMTP id d129mr1930801wmc.114.1618390329783; Wed, 14 Apr 2021 01:52:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1618390329; cv=none; d=google.com; s=arc-20160816; b=qp275KUpGtZk2akXJAgRsI8JQVmhOcLb9x81BdVCin4H7gBhjU2FFPOkefG/YmntHa aJsIRpYZLg0AVJtB9zy09fVaCOM6sq7q4vfBQ8gyg+E1XJV0TFKMreEazZ+wi41Q7vxp VbB6Yg5kIizcnTjHOqtQoAy09LzcrmJgN/s4+HDbJkmBNRkhRRR+GQ6J4bdXQpjQNgnx ttrJGl4CjS0fl/oYbx65Yj7sd2tEu+1b6qbkQtw0Dr9uiHrWscfjN6Y69e073p9lPBtu BP2fdaVPZmDg0qA2+VpCEPvdBEk4kRGJxUbR7HFBGbTXPJeFak31AAIchIkRBYjfO2t/ i3JA== 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=KqNuiUUvueyE6MgZHmjnM2D/jL9Nr5lJyhqlBCYaQZk=; b=EyF81V3AVCVBK6BIcZGVXCat3mcKjC/FfBpigJMRvexOTWZrLM7Rp7lbGRoJXo/AME HzajvVQUB/iv54gxGLlcEBESuSndSL/2p7eSLORlEznpsSutH4GyYO+gLdH18FG2llOO z5uoXmJsICgu8T3gwB8GJDsGtp3Z5xTu4m6BVVfdEl4TWpc82nZG8O4lbid0+HFpNuVy 29pRR+SzIwVoyCts88KiayVbUfFeDui3r+bEQrGHSkeFP0M3Ipzed0R675avx/483h4W AIdE8EovAkgw8pC7dZHXM4fmRjYaVpcn9cq3S96vABhXjRD7rA0V691/o+oAzE40QNK2 C4EQ== ARC-Authentication-Results: i=1; gmr-mx.google.com; spf=pass (google.com: domain of henning.schild@siemens.com designates 194.138.37.39 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 lizzard.sbs.de (lizzard.sbs.de. [194.138.37.39]) by gmr-mx.google.com with ESMTPS id k187si239043wme.2.2021.04.14.01.52.09 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 14 Apr 2021 01:52:09 -0700 (PDT) Received-SPF: pass (google.com: domain of henning.schild@siemens.com designates 194.138.37.39 as permitted sender) client-ip=194.138.37.39; Authentication-Results: gmr-mx.google.com; spf=pass (google.com: domain of henning.schild@siemens.com designates 194.138.37.39 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 lizzard.sbs.de (8.15.2/8.15.2) with ESMTPS id 13E8q9aR022409 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Wed, 14 Apr 2021 10:52:09 +0200 Received: from md1za8fc.ad001.siemens.net ([167.87.7.134]) by mail1.sbs.de (8.15.2/8.15.2) with ESMTP id 13E8q9ga006494; Wed, 14 Apr 2021 10:52:09 +0200 Date: Wed, 14 Apr 2021 10:52:08 +0200 From: Henning Schild To: Felix Moessbauer Cc: , Subject: Re: [PATCH 1/1] Add support to build binary version of DKMS kernel modules Message-ID: <20210414105208.2cc99156@md1za8fc.ad001.siemens.net> In-Reply-To: <20210414083617.20940-2-felix.moessbauer@siemens.com> References: <20210414083617.20940-1-felix.moessbauer@siemens.com> <20210414083617.20940-2-felix.moessbauer@siemens.com> 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: iQz3yrPz0yl4 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. 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