Wissensdatenbank
Digital Devices > Digital Devices Support > Wissensdatenbank

Suchbegriff(e)


Build a ddbridge kernel module with DKMS on Linux Ubuntu

Lösung

Build the dddvb driver with DKMS

The dddvb package contains the Linux driver for all Digital Devices DVB cards (Octopus, Cine, MAX, RESI, Octopus NET). It is an out-of-tree driver, which means it is compiled against the kernel you are running. Every time the kernel is updated, the driver has to be compiled again – otherwise your cards disappear after a reboot.

DKMS (Dynamic Kernel Module Support) automates exactly that. You register the driver source once, and from then on DKMS rebuilds and installs it automatically whenever a new kernel is installed.

This guide uses the current release dddvb 0.9.41. If a newer version is available at github.com/DigitalDevices/dddvb/tags, simply replace 0.9.41 with that version number everywhere below.

Before you start

  • A supported Linux distribution with root access (all commands below are run with sudo).
  • An internet connection on the machine, to fetch the packages and the driver source.
  • The kernel headers matching the running kernel. Without them nothing can be compiled.
  • About 300 MB of free space in /usr/src and /var/lib/dkms.
Secure Boot: if your server boots with Secure Boot enabled, self-compiled modules will not load until you enroll a signing key. See Secure Boot below.

Quick install – one script

If you just want the driver installed, use the script below. It performs every step of this guide: installs the prerequisites, downloads the source, writes dkms.conf, and registers, builds and installs the module.

sudo wget -O dddvb-dkms-install.sh http://linuxsupport.digital-devices.eu/u_scr/dkms/dddvb-dkms-install.sh
sudo chmod +x dddvb-dkms-install.sh
sudo ./dddvb-dkms-install.sh

Options:

sudo ./dddvb-dkms-install.sh                       # install 0.9.41 (default)
sudo ./dddvb-dkms-install.sh 0.9.40                # install a different release
sudo ./dddvb-dkms-install.sh 0.9.41 --kernel-dvb-core   # keep the kernel's own dvb-core
sudo ./dddvb-dkms-install.sh --uninstall           # remove every dddvb version

The complete script, if you prefer to copy it by hand or review it first:

#!/bin/bash
#
# dddvb-dkms-install.sh
# ---------------------------------------------------------------------------
# Download, register and build the Digital Devices "dddvb" driver with DKMS,
# so that every future kernel update rebuilds the driver automatically.
#
#   Usage:  sudo ./dddvb-dkms-install.sh [VERSION] [--kernel-dvb-core]
#           sudo ./dddvb-dkms-install.sh --uninstall
#
#   sudo ./dddvb-dkms-install.sh                       # install 0.9.41 (default)
#   sudo ./dddvb-dkms-install.sh 0.9.40                # install a different release
#   sudo ./dddvb-dkms-install.sh 0.9.41 --kernel-dvb-core
#                                                      # keep the kernel's own dvb-core
#   sudo ./dddvb-dkms-install.sh --uninstall           # remove every dddvb version
#
# Tested with DKMS 3.x on Debian/Ubuntu; also handles Fedora and Arch.
# Digital Devices support - https://support.digital-devices.eu
# ---------------------------------------------------------------------------

set -euo pipefail

VERSION="0.9.41"
KERNEL_DVB_CORE="no"
UNINSTALL="no"

PKG="dddvb"

# Every module this package can produce. Used to clean up leftovers.
ALL_MODULES="dvb-core ddbridge octonet drxk lnbp21 stv090x stv6110x cxd2099 \
tda18271c2dd stv0367dd tda18212dd cxd2843 stv6111 stv0910 lnbh25 mxl5xx"

# The 13 frontend/tuner modules, in the order they are written to dkms.conf.
FRONTENDS="drxk lnbp21 stv090x stv6110x cxd2099 tda18271c2dd stv0367dd \
tda18212dd cxd2843 stv6111 stv0910 lnbh25 mxl5xx"

say() { printf '\n\033[1;32m==> %s\033[0m\n' "$*"; }
warn() { printf '\n\033[1;33m!!! %s\033[0m\n' "$*"; }
die() { printf '\n\033[1;31mERROR: %s\033[0m\n' "$*" >&2; exit 1; }

for arg in "$@"; do
    case "$arg" in
        --kernel-dvb-core) KERNEL_DVB_CORE="yes" ;;
        --uninstall)       UNINSTALL="yes" ;;
        --help|-h)         sed -n '2,19p' "$0"; exit 0 ;;
        -*)                die "Unknown option: $arg" ;;
        *)                 VERSION="$arg" ;;
    esac
done

[ "$(id -u)" -eq 0 ] || die "Please run this script as root:  sudo $0 $*"

# ---------------------------------------------------------------------------
# Helper: unregister every dddvb version DKMS currently knows about.
# This must run BEFORE a new dkms.conf is written, so that DKMS deletes the
# modules listed in the OLD configuration.
# ---------------------------------------------------------------------------
remove_registered_versions() {
    command -v dkms >/dev/null || return 0
    local v
    for v in $(dkms status -m "$PKG" 2>/dev/null | sed -n "s|^$PKG[/,] *\([^,]*\),.*|\1|p" | sort -u); do
        say "Unregistering ${PKG}/${v} from DKMS"
        dkms remove "${PKG}/${v}" --all || true
    done
}

# ---------------------------------------------------------------------------
# Helper: delete dddvb modules left over in /lib/modules/*/updates/
# Old dvb-core.ko or octonet.ko files here will be loaded instead of the
# kernel's own modules and are a classic source of "it used to work" reports.
# ---------------------------------------------------------------------------
purge_stale_modules() {
    local found=0 d m f
    for d in /lib/modules/*/updates /lib/modules/*/updates/dkms; do
        [ -d "$d" ] || continue
        for m in $ALL_MODULES; do
            for f in "$d/$m.ko" "$d/$m.ko.zst" "$d/$m.ko.xz" "$d/$m.ko.gz"; do
                if [ -f "$f" ]; then
                    echo "    removing $f"
                    rm -f "$f"
                    found=1
                fi
            done
        done
    done
    if [ "$found" = "1" ]; then
        for d in /lib/modules/*/; do
            [ -d "${d}kernel" ] && depmod "$(basename "$d")" 2>/dev/null || true
        done
    fi
}

# ---------------------------------------------------------------------------
# Uninstall mode
# ---------------------------------------------------------------------------
if [ "$UNINSTALL" = "yes" ]; then
    say "Removing all dddvb DKMS modules"
    remove_registered_versions
    say "Cleaning leftover module files"
    purge_stale_modules
    say "Source trees left in place (delete manually if you want them gone):"
    ls -d /usr/src/${PKG}-* 2>/dev/null || echo "    none"
    echo ""
    echo "Done. Reboot to make sure the in-kernel driver is used again."
    exit 0
fi

SRC="/usr/src/${PKG}-${VERSION}"
TARBALL="https://github.com/DigitalDevices/dddvb/archive/refs/tags/${VERSION}.tar.gz"

# ---------------------------------------------------------------------------
# 1. Install DKMS, a compiler and the headers of the running kernel
# ---------------------------------------------------------------------------
say "Installing build prerequisites"
if command -v apt-get >/dev/null; then
    apt-get update
    apt-get install -y dkms build-essential wget "linux-headers-$(uname -r)"
elif command -v dnf >/dev/null; then
    dnf install -y dkms kernel-devel kernel-headers gcc make wget
elif command -v pacman >/dev/null; then
    pacman -S --needed --noconfirm dkms base-devel wget linux-headers
else
    die "Unsupported distribution. Install dkms, gcc, make and the kernel headers manually, then re-run."
fi

[ -d "/lib/modules/$(uname -r)/build" ] || die \
"No kernel headers found for the running kernel $(uname -r).
Install the matching linux-headers package (or reboot into the kernel you have headers for) and run this script again."

# ---------------------------------------------------------------------------
# 2. Fetch the source into /usr/src/dddvb-<version>
# ---------------------------------------------------------------------------
say "Downloading dddvb ${VERSION}"
if [ -d "$SRC" ]; then
    echo "    $SRC already exists - reusing it."
else
    wget -q --show-progress -O "/tmp/${PKG}-${VERSION}.tar.gz" "$TARBALL" \
        || die "Download failed. Check that tag ${VERSION} exists: https://github.com/DigitalDevices/dddvb/tags"
    tar -xf "/tmp/${PKG}-${VERSION}.tar.gz" -C /usr/src
    rm -f "/tmp/${PKG}-${VERSION}.tar.gz"
    [ -d "$SRC" ] || die "The archive did not unpack to $SRC"
fi

# ---------------------------------------------------------------------------
# 3. Clean up any previous installation (before the new dkms.conf is written)
# ---------------------------------------------------------------------------
remove_registered_versions
say "Cleaning leftover module files from earlier installations"
purge_stale_modules

# ---------------------------------------------------------------------------
# 4. Generate dkms.conf
# ---------------------------------------------------------------------------
say "Writing ${SRC}/dkms.conf"
{
    echo "# Generated by dddvb-dkms-install.sh on $(date -u '+%Y-%m-%d %H:%M UTC')"
    echo "PACKAGE_NAME=\"${PKG}\""
    echo "PACKAGE_VERSION=\"${VERSION}\""
    echo 'AUTOINSTALL="yes"'
    echo ""
    if [ "$KERNEL_DVB_CORE" = "yes" ]; then
        echo 'MAKE[0]="make -j$(nproc) KERNEL_DVB_CORE=y KDIR=/lib/modules/${kernelver}/build kernelver=${kernelver}"'
        echo 'CLEAN="make KERNEL_DVB_CORE=y clean"'
    else
        echo 'MAKE[0]="make -j$(nproc) KDIR=/lib/modules/${kernelver}/build kernelver=${kernelver}"'
        echo 'CLEAN="make clean"'
    fi
    echo ""

    i=0
    # dvb-core and octonet are only built when dddvb uses its own dvb-core
    if [ "$KERNEL_DVB_CORE" != "yes" ]; then
        echo "BUILT_MODULE_NAME[$i]=\"dvb-core\""
        echo "BUILT_MODULE_LOCATION[$i]=\"dvb-core\""
        echo "DEST_MODULE_LOCATION[$i]=\"/updates/dkms\""
        echo ""
        i=$((i + 1))
    fi

    echo "BUILT_MODULE_NAME[$i]=\"ddbridge\""
    echo "BUILT_MODULE_LOCATION[$i]=\"ddbridge\""
    echo "DEST_MODULE_LOCATION[$i]=\"/updates/dkms\""
    echo ""
    i=$((i + 1))

    if [ "$KERNEL_DVB_CORE" != "yes" ]; then
        echo "BUILT_MODULE_NAME[$i]=\"octonet\""
        echo "BUILT_MODULE_LOCATION[$i]=\"ddbridge\""
        echo "DEST_MODULE_LOCATION[$i]=\"/updates/dkms\""
        echo ""
        i=$((i + 1))
    fi

    for m in $FRONTENDS; do
        echo "BUILT_MODULE_NAME[$i]=\"${m}\""
        echo "BUILT_MODULE_LOCATION[$i]=\"frontends\""
        echo "DEST_MODULE_LOCATION[$i]=\"/updates/dkms\""
        echo ""
        i=$((i + 1))
    done
} > "${SRC}/dkms.conf"

# ---------------------------------------------------------------------------
# 5. Register, build and install with DKMS
# ---------------------------------------------------------------------------
say "dkms add ${PKG}/${VERSION}"
dkms add "${PKG}/${VERSION}"

say "dkms build ${PKG}/${VERSION}"
dkms build "${PKG}/${VERSION}"

say "dkms install ${PKG}/${VERSION}"
dkms install "${PKG}/${VERSION}" --force

# ---------------------------------------------------------------------------
# 6. Report
# ---------------------------------------------------------------------------
say "Result"
dkms status -m "$PKG"

if [ -d /sys/firmware/efi ] && command -v mokutil >/dev/null 2>&1 \
   && mokutil --sb-state 2>/dev/null | grep -qi enabled; then
    warn "Secure Boot is ENABLED on this machine - unsigned DKMS modules will not load."
    cat <<'EOF'
    Either enroll a signing key:
        sudo apt install shim-signed
        sudo update-secureboot-policy --new-key
        sudo update-secureboot-policy --enroll-key
        # reboot and confirm the key in the blue MOK Manager screen
    or turn Secure Boot off in the BIOS/UEFI setup.
EOF
fi

cat <<'EOF'

Done. Reboot, or load the driver right now:

    sudo modprobe ddbridge
    dmesg | grep -i ddbridge
    ls /dev/dvb/

EOF

Everything after this point explains the same procedure step by step, so you can run it manually or understand what the script does.

Step 1 – Install DKMS and the build tools

Installing DKMS also pulls in the compiler toolchain (gcc, make). The kernel headers are a separate package and are listed explicitly below, because a missing header package is the most common reason for a failed build.

Ubuntu, Debian or Linux Mint

sudo apt update
sudo apt install dkms build-essential wget linux-headers-$(uname -r)

Fedora, RHEL, Rocky, AlmaLinux

sudo dnf install dkms kernel-devel kernel-headers gcc make wget

Arch Linux

sudo pacman -S dkms base-devel wget linux-headers

Check that DKMS is there and that the headers for your running kernel are in place:

dkms --version
ls -d /lib/modules/$(uname -r)/build
The second command must print a path. If it says No such file or directory, the headers do not match the running kernel – install the correct package or reboot into the kernel you have headers for.

Step 2 – Download the driver source

DKMS expects the source of a package called dddvb at version 0.9.41 to live in /usr/src/dddvb-0.9.41. The directory name must match package-version exactly.

cd /usr/src
sudo wget -O dddvb-0.9.41.tar.gz https://github.com/DigitalDevices/dddvb/archive/refs/tags/0.9.41.tar.gz
sudo tar -xf dddvb-0.9.41.tar.gz
sudo rm dddvb-0.9.41.tar.gz
ls -d /usr/src/dddvb-0.9.41
The -O option is important. Without it wget saves the file as 0.9.41.tar.gz and the following tar command fails. The archive itself already unpacks into a directory named dddvb-0.9.41, which is exactly what DKMS needs.

Step 3 – Create dkms.conf

dkms.conf tells DKMS how to build the package and which modules come out of the build. Create it inside the source directory:

sudo nano /usr/src/dddvb-0.9.41/dkms.conf

Paste the following content. It is valid for dddvb 0.9.41 and builds all 16 modules the package provides.

# dkms.conf for the Digital Devices dddvb driver, version 0.9.41
# Place as /usr/src/dddvb-0.9.41/dkms.conf
PACKAGE_NAME="dddvb"
PACKAGE_VERSION="0.9.41"
AUTOINSTALL="yes"

MAKE[0]="make -j$(nproc) KDIR=/lib/modules/${kernelver}/build kernelver=${kernelver}"
CLEAN="make clean"

BUILT_MODULE_NAME[0]="dvb-core"
BUILT_MODULE_LOCATION[0]="dvb-core"
DEST_MODULE_LOCATION[0]="/updates/dkms"

BUILT_MODULE_NAME[1]="ddbridge"
BUILT_MODULE_LOCATION[1]="ddbridge"
DEST_MODULE_LOCATION[1]="/updates/dkms"

BUILT_MODULE_NAME[2]="octonet"
BUILT_MODULE_LOCATION[2]="ddbridge"
DEST_MODULE_LOCATION[2]="/updates/dkms"

BUILT_MODULE_NAME[3]="drxk"
BUILT_MODULE_LOCATION[3]="frontends"
DEST_MODULE_LOCATION[3]="/updates/dkms"

BUILT_MODULE_NAME[4]="lnbp21"
BUILT_MODULE_LOCATION[4]="frontends"
DEST_MODULE_LOCATION[4]="/updates/dkms"

BUILT_MODULE_NAME[5]="stv090x"
BUILT_MODULE_LOCATION[5]="frontends"
DEST_MODULE_LOCATION[5]="/updates/dkms"

BUILT_MODULE_NAME[6]="stv6110x"
BUILT_MODULE_LOCATION[6]="frontends"
DEST_MODULE_LOCATION[6]="/updates/dkms"

BUILT_MODULE_NAME[7]="cxd2099"
BUILT_MODULE_LOCATION[7]="frontends"
DEST_MODULE_LOCATION[7]="/updates/dkms"

BUILT_MODULE_NAME[8]="tda18271c2dd"
BUILT_MODULE_LOCATION[8]="frontends"
DEST_MODULE_LOCATION[8]="/updates/dkms"

BUILT_MODULE_NAME[9]="stv0367dd"
BUILT_MODULE_LOCATION[9]="frontends"
DEST_MODULE_LOCATION[9]="/updates/dkms"

BUILT_MODULE_NAME[10]="tda18212dd"
BUILT_MODULE_LOCATION[10]="frontends"
DEST_MODULE_LOCATION[10]="/updates/dkms"

BUILT_MODULE_NAME[11]="cxd2843"
BUILT_MODULE_LOCATION[11]="frontends"
DEST_MODULE_LOCATION[11]="/updates/dkms"

BUILT_MODULE_NAME[12]="stv6111"
BUILT_MODULE_LOCATION[12]="frontends"
DEST_MODULE_LOCATION[12]="/updates/dkms"

BUILT_MODULE_NAME[13]="stv0910"
BUILT_MODULE_LOCATION[13]="frontends"
DEST_MODULE_LOCATION[13]="/updates/dkms"

BUILT_MODULE_NAME[14]="lnbh25"
BUILT_MODULE_LOCATION[14]="frontends"
DEST_MODULE_LOCATION[14]="/updates/dkms"

BUILT_MODULE_NAME[15]="mxl5xx"
BUILT_MODULE_LOCATION[15]="frontends"
DEST_MODULE_LOCATION[15]="/updates/dkms"

What the settings mean:

SettingMeaning
PACKAGE_NAME / PACKAGE_VERSION Must match the directory name /usr/src/dddvb-0.9.41.
AUTOINSTALL="yes" Rebuild automatically for every newly installed kernel. This is the whole point of using DKMS.
MAKE[0] The build command. ${kernelver} is filled in by DKMS with the kernel it is building for – which is not always the running kernel. Passing KDIR and kernelver is what makes an automatic rebuild target the right kernel.
BUILT_MODULE_NAME[n] / BUILT_MODULE_LOCATION[n] Name of each module and the subdirectory it is built in (dvb-core, ddbridge or frontends).
DEST_MODULE_LOCATION[n] Where the module is installed: /lib/modules/<kernel>/updates/dkms/. Modules there take priority over the kernel’s own versions.
Older versions of this article used MAKE="make -j 4 KERNELDIR=/lib/modules/${kernelver}/build". The dddvb Makefile does not know a variable called KERNELDIR – it uses KDIR and kernelver. With the old line the build silently used the running kernel, so an automatic rebuild after a kernel update produced modules for the wrong kernel. Please use the configuration above.

The 16 modules are:

DirectoryModulesPurpose
dvb-core dvb-core The DVB subsystem shipped with dddvb. It replaces the kernel’s own dvb-core and contains Digital Devices fixes and extensions.
ddbridge ddbridge, octonet The PCIe bridge driver for the cards, and the driver for the Octopus NET network tuner.
frontends cxd2099, cxd2843, drxk, lnbh25, lnbp21, mxl5xx, stv0367dd, stv090x, stv0910, stv6110x, stv6111, tda18212dd, tda18271c2dd Demodulator, tuner and LNB-control drivers. Which ones are actually loaded depends on the card you have.
stv0367 and tda18212 exist in the source tree but are disabled in the dddvb Makefile – the *dd variants are used instead. Do not add them to dkms.conf, the build will not produce them.

Step 4 – Add, build and install the module

Register the source tree with DKMS:

sudo dkms add dddvb/0.9.41

Compile it against the running kernel:

sudo dkms build dddvb/0.9.41

Install the resulting modules and refresh the module dependency database:

sudo dkms install dddvb/0.9.41
On a machine that already has the in-kernel ddbridge driver, dkms install prints “Original module found” and saves a backup of it. This is expected – the DKMS version in /updates/dkms/ is used from now on.

Step 5 – Check that it worked

1. DKMS should report the package as installed for your kernel:

dkms status -m dddvb
dddvb/0.9.41, 6.8.0-79-generic, x86_64: installed

2. The 16 modules should be present:

ls /lib/modules/$(uname -r)/updates/dkms/

3. Load the driver and confirm the version really comes from DKMS:

sudo modprobe ddbridge
modinfo ddbridge | grep -E 'filename|version'
filename:       /lib/modules/6.8.0-79-generic/updates/dkms/ddbridge.ko.zst
version:        0.9.41
If filename points to .../kernel/drivers/media/pci/ddbridge/ instead of .../updates/dkms/, the kernel’s own driver is still being used. Run sudo depmod -a and reboot.

4. Your card should show up in the kernel log and as DVB adapters:

dmesg | grep -i ddbridge
ls /dev/dvb/

A reboot at this point is recommended, so that you confirm the card also comes up cleanly on a cold start.

What happens on the next kernel update

Because AUTOINSTALL="yes" is set, installing a new kernel package triggers DKMS automatically: the driver is compiled for the new kernel and installed before you reboot. Nothing has to be done by hand.

Two conditions must be met for this to work:

  • The headers for the new kernel must be installed. On Debian/Ubuntu this is guaranteed by the meta-package linux-headers-generic (or linux-headers-amd64 on Debian) – make sure it is installed, not just a single pinned version.
  • DKMS must still be installed. Do not remove it when cleaning up packages.

After a kernel upgrade you can verify that both kernels are covered:

dkms status -m dddvb
dddvb/0.9.41, 6.8.0-79-generic, x86_64: installed
dddvb/0.9.41, 6.8.0-84-generic, x86_64: installed

If a kernel is missing from that list, build for all installed kernels with:

sudo dkms autoinstall

Rebuild manually

You can trigger a rebuild at any time, for example after installing missing headers:

sudo apt install linux-headers-$(uname -r)
sudo dkms build dddvb/0.9.41 --force
sudo dkms install dddvb/0.9.41 --force

To build for a kernel that is not currently running, name it explicitly:

sudo dkms install dddvb/0.9.41 -k 6.8.0-84-generic --force

Upgrade to a newer dddvb version

Remove the old version first. If you only install the new one, the modules of the old version stay behind in /lib/modules/&lt;kernel&gt;/updates/dkms/ and may be loaded instead of the new ones. This is the number one cause of “I updated the driver but nothing changed” tickets.

Example: moving from 0.9.39 to 0.9.41.

# 1. unregister the old version - this deletes its modules
sudo dkms remove dddvb/0.9.39 --all

# 2. make sure nothing was left behind
ls /lib/modules/$(uname -r)/updates/dkms/

# 3. install the new version (steps 2-4 of this guide)
cd /usr/src
sudo wget -O dddvb-0.9.41.tar.gz https://github.com/DigitalDevices/dddvb/archive/refs/tags/0.9.41.tar.gz
sudo tar -xf dddvb-0.9.41.tar.gz
sudo rm dddvb-0.9.41.tar.gz
sudo nano /usr/src/dddvb-0.9.41/dkms.conf     # PACKAGE_VERSION="0.9.41"
sudo dkms add dddvb/0.9.41
sudo dkms build dddvb/0.9.41
sudo dkms install dddvb/0.9.41

# 4. reboot, then confirm the new version is loaded
modinfo ddbridge | grep -E 'filename|version'

If step 2 still lists .ko files after the removal, delete them manually and run sudo depmod -a. The install script at the top of this page does this cleanup for you.

Uninstall

To go back to the driver that ships with your kernel:

sudo dkms remove dddvb/0.9.41 --all
ls /lib/modules/$(uname -r)/updates/dkms/     # should no longer list dddvb modules
sudo rm -rf /usr/src/dddvb-0.9.41
sudo depmod -a
sudo reboot
Pay special attention to dvb-core.ko and octonet.ko in /lib/modules/&lt;kernel&gt;/updates/. A forgotten dvb-core from dddvb will be loaded in place of the kernel’s own dvb-core and can cause hard to explain behaviour long after the rest of the driver is gone.

Secure Boot

With Secure Boot enabled, the kernel refuses to load modules that are not signed with a trusted key. The build and install succeed, but the driver never loads and dmesg shows something like Loading of unsigned module is rejected or Key was rejected by service.

Check the current state:

mokutil --sb-state

You have two options.

Option A – enroll a signing key (recommended)

Debian/Ubuntu can generate a Machine Owner Key and use it to sign every DKMS module automatically:

sudo apt install shim-signed mokutil
sudo update-secureboot-policy --new-key
sudo update-secureboot-policy --enroll-key
# you will be asked for a one-time password, then reboot

During the next boot the blue MOK Manager screen appears. Choose Enroll MOK → Continue → Yes, enter the one-time password and let the machine boot. Then rebuild once so the modules get signed:

sudo dkms build dddvb/0.9.41 --force
sudo dkms install dddvb/0.9.41 --force

Option B – disable Secure Boot

Turn Secure Boot off in the BIOS/UEFI setup of the server. This is usually the simplest choice for a headend machine in a rack.

Option: build against the kernel’s own dvb-core

By default dddvb brings its own dvb-core and it replaces the one from your kernel. That is the configuration Digital Devices tests and recommends.

On very recent mainline kernels you may prefer to keep the kernel’s dvb-core, for example to avoid replacing a subsystem used by other tuner hardware in the same machine. The driver supports this through make KERNEL_DVB_CORE=y.

According to the Digital Devices README, some functionality is reduced in this mode:
  • The octonet module is not built at all – Octopus NET devices are not supported this way.
  • Some devices enumerate fewer delivery systems.
  • The DTV_INPUT property does not work.
  • Bug fixes that Digital Devices made in their own dvb-core are missing.
  • Some device names differ, because they do not exist in the mainline kernel.

If you want this variant, use this dkms.conf instead. It builds 14 modules – no dvb-core, no octonet:

# dkms.conf for the Digital Devices dddvb driver, version 0.9.41
# Variant: build against the KERNEL'S own dvb-core (make KERNEL_DVB_CORE=y)
# Place as /usr/src/dddvb-0.9.41/dkms.conf
PACKAGE_NAME="dddvb"
PACKAGE_VERSION="0.9.41"
AUTOINSTALL="yes"

MAKE[0]="make -j$(nproc) KERNEL_DVB_CORE=y KDIR=/lib/modules/${kernelver}/build kernelver=${kernelver}"
CLEAN="make KERNEL_DVB_CORE=y clean"

BUILT_MODULE_NAME[0]="ddbridge"
BUILT_MODULE_LOCATION[0]="ddbridge"
DEST_MODULE_LOCATION[0]="/updates/dkms"

BUILT_MODULE_NAME[1]="drxk"
BUILT_MODULE_LOCATION[1]="frontends"
DEST_MODULE_LOCATION[1]="/updates/dkms"

BUILT_MODULE_NAME[2]="lnbp21"
BUILT_MODULE_LOCATION[2]="frontends"
DEST_MODULE_LOCATION[2]="/updates/dkms"

BUILT_MODULE_NAME[3]="stv090x"
BUILT_MODULE_LOCATION[3]="frontends"
DEST_MODULE_LOCATION[3]="/updates/dkms"

BUILT_MODULE_NAME[4]="stv6110x"
BUILT_MODULE_LOCATION[4]="frontends"
DEST_MODULE_LOCATION[4]="/updates/dkms"

BUILT_MODULE_NAME[5]="cxd2099"
BUILT_MODULE_LOCATION[5]="frontends"
DEST_MODULE_LOCATION[5]="/updates/dkms"

BUILT_MODULE_NAME[6]="tda18271c2dd"
BUILT_MODULE_LOCATION[6]="frontends"
DEST_MODULE_LOCATION[6]="/updates/dkms"

BUILT_MODULE_NAME[7]="stv0367dd"
BUILT_MODULE_LOCATION[7]="frontends"
DEST_MODULE_LOCATION[7]="/updates/dkms"

BUILT_MODULE_NAME[8]="tda18212dd"
BUILT_MODULE_LOCATION[8]="frontends"
DEST_MODULE_LOCATION[8]="/updates/dkms"

BUILT_MODULE_NAME[9]="cxd2843"
BUILT_MODULE_LOCATION[9]="frontends"
DEST_MODULE_LOCATION[9]="/updates/dkms"

BUILT_MODULE_NAME[10]="stv6111"
BUILT_MODULE_LOCATION[10]="frontends"
DEST_MODULE_LOCATION[10]="/updates/dkms"

BUILT_MODULE_NAME[11]="stv0910"
BUILT_MODULE_LOCATION[11]="frontends"
DEST_MODULE_LOCATION[11]="/updates/dkms"

BUILT_MODULE_NAME[12]="lnbh25"
BUILT_MODULE_LOCATION[12]="frontends"
DEST_MODULE_LOCATION[12]="/updates/dkms"

BUILT_MODULE_NAME[13]="mxl5xx"
BUILT_MODULE_LOCATION[13]="frontends"
DEST_MODULE_LOCATION[13]="/updates/dkms"

Or, with the script from the top of this page:

sudo ./dddvb-dkms-install.sh 0.9.41 --kernel-dvb-core
When switching from the default build to this one, remove the old installation before replacing dkms.conf. Otherwise the old dvb-core.ko and octonet.ko stay in /lib/modules/&lt;kernel&gt;/updates/dkms/ and are still loaded. sudo dkms remove dddvb/0.9.41 --all first, then edit the file.

Troubleshooting

SymptomCause and fix
Your kernel headers for kernel ... cannot be found The header package for the running kernel is missing. sudo apt install linux-headers-$(uname -r), then build again. If no such package exists you are running a kernel that is no longer in the repository – update and reboot first.
Bad return status for module build Read /var/lib/dkms/dddvb/0.9.41/build/make.log – it contains the real compiler error. A very new kernel with an older dddvb release is the usual cause; try the latest dddvb version, or the master branch.
Module ... .ko not found in the build directory A module name in dkms.conf does not exist in this release, or you are using the default dkms.conf together with KERNEL_DVB_CORE=y (which does not build dvb-core or octonet). Use one of the two configurations from this page unchanged.
Build and install succeed, but modprobe ddbridge fails Almost always Secure Boot. Check mokutil --sb-state and dmesg | tail. See Secure Boot.
Driver loads, but the version is not the one you installed modinfo ddbridge | grep filename. If it does not point to /updates/dkms/, run sudo depmod -a and reboot. Also check for leftover modules from an older dddvb version.
Cards were working, then disappeared after a reboot A new kernel was installed without a DKMS rebuild – usually because the headers were missing at that moment. dkms status -m dddvb will show that the current kernel is not listed. Install the headers and run sudo dkms autoinstall.
No /dev/dvb/ directory No adapter was registered. Check dmesg | grep -i ddbridge and lspci -nn | grep -i "Digital Devices". If the card is not on the PCI bus at all, it is a hardware or slot problem, not a driver problem.
65535 packets lost due to low DMA performance in dmesg Not a DKMS issue. The system cannot keep up with the DMA transfer – check IOMMU settings, PCIe slot and lane count, power management and CPU governor. Contact support with the full dmesg output.

When you open a support ticket, please attach:

  • dkms status
  • uname -a and lsb_release -a
  • /var/lib/dkms/dddvb/<version>/build/make.log (if the build failed)
  • dmesg and lspci -vnn | grep -A3 -i "Digital Devices"

Use cases from users

Contributions and alternative approaches sent to us by customers.

These scripts and configuration files were only tested briefly and are not maintained by Digital Devices. Use them at your own risk. They may also target an older dddvb release than the one documented above.

1. From @Kai

Copy both files into the same directory and run ./install_dkms.sh from there. It performs the complete DKMS run, assuming DKMS is already installed (sudo apt install dkms).

wget http://linuxsupport.digital-devices.eu/u_scr/@kai/dkms.conf
wget http://linuxsupport.digital-devices.eu/u_scr/@kai/install_dkms.sh
chmod +x install_dkms.sh
./install_dkms.sh

If you find any mistake or have something to add, please write to the author and the article will be corrected.

Palii Dmytro
paliydmn@digitaldevices.de
Last updated: 21 September 2026 – dddvb 0.9.41

 
War dieser Artikel hilfreich? ja / nein
Artikeldetails
Artikel-ID: 187
Kategorie: Linux
Datum (erstellt): 21-12-2023 12:47:04
Aufrufe: 4507
Bewertung (Stimmen): Artikelbewertung 5.0/5.0 (14)

 
« Zurück

Datenschutzerklärung | Impressum