Updated description to reflect cause identified in comment #7 (the
framebuffer-nvidia
initramfs hook matches only "*.ko"), DKMS compression mechanism from comment
#11, and a
correction: initramfs-tools does handle compressed modules correctly; the
initramfs-tools task
is likely invalid. Original description is retained below the new.
New information: the identical hook is also shipped by nvidia-kernel-common-580
(580.178.04-0ubuntu0.24.04.1), so the 580 branch is affected as well. The
original report
was on nvidia-dkms-580.
** Description changed:
+ DKMS-built NVIDIA modules installed as .ko.zst are not included in the
+ initramfs, so the driver is unavailable at early boot (e.g., wrong-
+ resolution splash; early Vulkan apps may fall back to llvmpipe -- Zed
+ does). Driver still loads later from the root filesystem.
+
+ CAUSE: the framebuffer-nvidia initramfs hook (nvidia-kernel-
+ common-<branch>) only matches "*.ko" (comment #7). initramfs-tools
+ itself handles .ko.zst correctly. DKMS compresses its output when the
+ kernel's modules.dep already lists .zst modules (comment #11).
+
+ AFFECTED: nvidia-kernel-common-580 and -595 (identical hook).
+
+ SUGGESTED FIX (/usr/share/initramfs-tools/hooks/framebuffer-nvidia):
+ - for kmod in $(find "${MODULESDIR}/${dir}" ${exclude:-} -name
"$pattern*.ko" -print); do
+ - manual_add_modules $(basename ${kmod} .ko)
+ + for kmod in $(find "${MODULESDIR}/${dir}" ${exclude:-} -name
"$pattern*.ko*" -print); do
+ + kmod="${kmod##*/}"
+ + manual_add_modules "${kmod%%.ko*}"
+
+ WORKAROUND: unzstd the .ko.zst files in
/usr/lib/modules/<kernel>/updates/dkms/ and
+ /var/lib/dkms/nvidia/<ver>/<kernel>/x86_64/module/, then depmod and
update-initramfs.
+
+ --- Original description (2026-05-27) ---
+
DKMS-built kernel modules are installed as .ko.zst (zstd-compressed)
rather than uncompressed .ko files. The initramfs-tools module inclusion
code does not handle .ko.zst files — it finds and includes only
uncompressed .ko files. As a result, DKMS-managed modules are absent
from the initramfs, and drivers depending on them fail to load at early
boot.
The current workaround are manual steps to run unzstd --rm on the
modules, depmod -a, and update-initramfs to include them.
Affected kernels (confirmed on this system):
- 6.8.0-50-generic: broken (first occurrence)
- 6.11.0-24-generic: broken
- 6.11.0-25-generic: broken
- 6.11.0-26-generic: working (uncompressed .ko files present after upgrade)
- 6.11.0-28-generic: broken (regression)
- All subsequent kernels through 6.17.0-29-generic: broken
+ 6.8.0-50-generic: broken (first occurrence)
+ 6.11.0-24-generic: broken
+ 6.11.0-25-generic: broken
+ 6.11.0-26-generic: working (uncompressed .ko files present after upgrade)
+ 6.11.0-28-generic: broken (regression)
+ All subsequent kernels through 6.17.0-29-generic: broken
Cause:
July 2023, a patch series by Dimitri John Ledkov was applied to Ubuntu's
kernel packaging to enable zstd-compressed modules:
https://lists.ubuntu.com/archives/kernel-team/2023-July/141412.html
The patch series description makes clear the intent was for DKMS-built
modules to remain uncompressed. It explicitly states: "the makefile is
patched to not attempt installing random modules compressed — this is to
ensure that any dkms / lrm / modules builds."
However, in practice, DKMS reads CONFIG_MODULE_COMPRESS_ZSTD from the
kernel configuration and compresses its output accordingly, regardless
of that intent. The result is that DKMS modules are installed as .ko.zst
rather than as .ko.
Investigation shows initramfs-tools does have .zst handling, but only in
the add_firmware() function (searching /lib/firmware/ paths). There is
no corresponding .zst handling in the module inclusion code path.
Confirmed by: $ grep -A 10 -B 10 "zst" /usr/share/initramfs-tools/hook-
functions
This leaves a conflict between the actions of the components:
- Ubuntu kernel packaging compresses modules and intends to exclude DKMS —
but does not fully achieve that exclusion
- DKMS follows CONFIG_MODULE_COMPRESS_ZSTD from the kernel config and
compresses its output
- initramfs-tools has no .zst handling in its module inclusion path, only in
its firmware path
Environment:
- Distribution: Linux Mint 22.3 (Ubuntu Noble/24.04 base)
- Kernel: Affects 6.8.0-50-generic and all subsequent kernels tested through
6.17.0-29-generic, with one exception noted above
- GPU: NVIDIA GeForce GTX 1660 Super
- NVIDIA driver: 580.159.03 (nvidia-dkms-580)
+ Distribution: Linux Mint 22.3 (Ubuntu Noble/24.04 base)
+ Kernel: Affects 6.8.0-50-generic and all subsequent kernels tested through
6.17.0-29-generic, with one exception noted above
+ GPU: NVIDIA GeForce GTX 1660 Super
+ NVIDIA driver: 580.159.03 (nvidia-dkms-580)
--
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2154307
Title:
framebuffer-nvidia initramfs hook skips compressed (.ko.zst) DKMS
modules
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/initramfs-tools/+bug/2154307/+subscriptions
--
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs