From mboxrd@z Thu Jan 1 00:00:00 1970 X-GM-THRID: 6950929522725224448 X-Received: by 2002:aa7:cc03:: with SMTP id q3mr40379368edt.366.1618391249606; Wed, 14 Apr 2021 02:07:29 -0700 (PDT) X-BeenThere: isar-users@googlegroups.com Received: by 2002:a05:6402:4c2:: with SMTP id n2ls288147edw.2.gmail; Wed, 14 Apr 2021 02:07:28 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzrtQPaEmK4MtPuC2klZhu2My2yf9RPnVYjtUP4mD4pCCq4YqwwMJWzthhk5xitvn+YyHxz X-Received: by 2002:a05:6402:4242:: with SMTP id g2mr39686606edb.329.1618391248704; Wed, 14 Apr 2021 02:07:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1618391248; cv=none; d=google.com; s=arc-20160816; b=BFxrTWNk9ZyQFAW/LQg/ISV5WQ8MW/YY+X2N1lXe7RwnJwrO4WNH5V+hOCHGxdfAMj clz8qy8vRN0f18suuSE8ghjozADsILGcya4+rGWP5smiKRc2xSOhmvI8Nwl4lqQeBzJL Xn92yHAE+T6I+RhixY0cFhbb90AORjBvMClk1zN6MxViRzfSTziwEHu8KBEhdNKjr4pP KnksbrFwEh5HwcP3JlNUXX9yfCaqGl3fU1YYDvHpieYuIFcBUzOLFVSW5/ptZFhXNdnq bcK4y3jS1/E/LSNeF8u6dDoTLMOuQsBWG687G0RvD0Wt+uTH63XKr72Hi9iA+izioykD 74xg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:content-language:in-reply-to:mime-version :user-agent:date:message-id:from:references:cc:to:subject; bh=X0eMBo56H2tDYiVLM7soSX3K3t2E3ahagdUOekDXqX4=; b=HFdhmhLkus2trg6qleztCGgZtMQp5lmv1ZcFb53FqHB59GGfKns2tE9JfZPTIlLwWG gia1cVM3Oq4x/Z9kvTTaZuJznb169IN2U7FjCJLSfEPrh68CwywGk92RKmK3HEHVxEoy Mbri11x5T6NP/xd9cJaKgXaJeySfIapbiFxmy/nm4cyXSLImHZSdF2nQu3cuMPuMnQtr N6dj1R97dYHpqVpryoNkuxC9oJwd6wJ7AlzSGbAWJRRciAvd+zDkWFBcsfdrb1+RmSHR /fmaaa68CXHm/w9RLgpb2RNBC5+eQ76BLXHGzttE9MfNiVKKEnYgD42rJsp33aizh96R YHVA== ARC-Authentication-Results: i=1; gmr-mx.google.com; spf=pass (google.com: domain of jan.kiszka@siemens.com designates 194.138.37.40 as permitted sender) smtp.mailfrom=jan.kiszka@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 r21si1287248ejo.0.2021.04.14.02.07.28 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 14 Apr 2021 02:07:28 -0700 (PDT) Received-SPF: pass (google.com: domain of jan.kiszka@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 jan.kiszka@siemens.com designates 194.138.37.40 as permitted sender) smtp.mailfrom=jan.kiszka@siemens.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=siemens.com Received: from mail2.sbs.de (mail2.sbs.de [192.129.41.66]) by gecko.sbs.de (8.15.2/8.15.2) with ESMTPS id 13E97SqB023689 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Wed, 14 Apr 2021 11:07:28 +0200 Received: from [139.22.45.180] ([139.22.45.180]) by mail2.sbs.de (8.15.2/8.15.2) with ESMTP id 13E93o1h013896; Wed, 14 Apr 2021 11:03:50 +0200 Subject: Re: [PATCH 1/1] Add support to build binary version of DKMS kernel modules To: Henning Schild , Felix Moessbauer Cc: isar-users@googlegroups.com References: <20210414083617.20940-1-felix.moessbauer@siemens.com> <20210414083617.20940-2-felix.moessbauer@siemens.com> <20210414105208.2cc99156@md1za8fc.ad001.siemens.net> From: Jan Kiszka Message-ID: Date: Wed, 14 Apr 2021 11:03:50 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.8.0 MIME-Version: 1.0 In-Reply-To: <20210414105208.2cc99156@md1za8fc.ad001.siemens.net> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-TUID: yoIJwfQY352W 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. 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 > -- Siemens AG, T RDA IOT Corporate Competence Center Embedded Linux