public inbox for isar-users@googlegroups.com
 help / color / mirror / Atom feed
From: Raphael Lisicki <raphael.lisicki@siemens.com>
To: "[ext] Henning Schild" <henning.schild@siemens.com>,
	Jan Kiszka <jan.kiszka@siemens.com>
Cc: Felix Moessbauer <felix.moessbauer@siemens.com>,
	isar-users@googlegroups.com
Subject: Re: [PATCH 1/1] Add support to build binary version of DKMS kernel modules
Date: Thu, 15 Apr 2021 14:41:35 +0200	[thread overview]
Message-ID: <ddc8a4be-958d-d2b6-6924-95bd411387b2@siemens.com> (raw)
In-Reply-To: <20210415142627.04646da2@md1za8fc.ad001.siemens.net>

Hi,

maybe V4L2 loopback could be this example module:
https://packages.debian.org/buster/v4l2loopback-dkms

best regards
Raphael


On 15.04.21 14:26, [ext] Henning Schild wrote:
> Am Wed, 14 Apr 2021 11:03:50 +0200
> schrieb Jan Kiszka <jan.kiszka@siemens.com>:
> 
>> 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 <felix.moessbauer@siemens.com>:
>>>    
>>>> 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 <felix.moessbauer@siemens.com>
>>>> ---
>>>>   .../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
>>>    
>>
> 

  reply	other threads:[~2021-04-15 12:52 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-14  8:36 [PATCH 0/1] Add support to build binary version of DKMS kernel Felix Moessbauer
2021-04-14  8:36 ` [PATCH 1/1] Add support to build binary version of DKMS kernel modules Felix Moessbauer
2021-04-14  8:52   ` Henning Schild
2021-04-14  9:03     ` Jan Kiszka
2021-04-15 12:26       ` Henning Schild
2021-04-15 12:41         ` Raphael Lisicki [this message]
2021-04-15 12:52         ` Jan Kiszka
2021-04-19 12:45           ` Moessbauer, Felix
2021-04-19 13:33             ` Jan Kiszka
2021-04-22 10:44   ` Anton Mikanovich
2021-04-22 16:02     ` [PATCH v2 0/1] " Felix Moessbauer
2021-04-23  6:03       ` Jan Kiszka
2021-04-22 16:02     ` [PATCH v2 1/1] " Felix Moessbauer
2021-04-26 16:16     ` [PATCH v3 0/1] " Felix Moessbauer
2021-04-26 16:16     ` [PATCH v3 1/1] " Felix Moessbauer
2021-04-28 11:03       ` Anton Mikanovich

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=ddc8a4be-958d-d2b6-6924-95bd411387b2@siemens.com \
    --to=raphael.lisicki@siemens.com \
    --cc=felix.moessbauer@siemens.com \
    --cc=henning.schild@siemens.com \
    --cc=isar-users@googlegroups.com \
    --cc=jan.kiszka@siemens.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