Skip to content

Commit

Permalink
Merge pull request #3312 from hundeboll/modules-and-firmware-includes
Browse files Browse the repository at this point in the history
Modules and firmware includes
  • Loading branch information
DaanDeMeyer authored Jan 6, 2025
2 parents 7051715 + a37fd6d commit 64897fd
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 6 deletions.
10 changes: 10 additions & 0 deletions mkosi/kmod.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@

from mkosi.log import complete_step, log_step
from mkosi.run import chroot_cmd, run
from mkosi.sandbox import chase
from mkosi.util import chdir, parents_below


Expand Down Expand Up @@ -180,6 +181,15 @@ def gen_required_kernel_modules(
mods = set(modulesd.rglob("*.ko*"))
firmware = set()

# Some firmware dependencies are symbolic links, so the targets for those must be included in the list
# of required firmware files too. Intermediate symlinks are not included, and so links pointing to links
# results in dangling symlinks in the final image.
for fw in firmware.copy():
if (root / fw).is_symlink():
target = Path(chase(os.fspath(root), os.fspath(fw)))
if target.exists():
firmware.add(target.relative_to(root))

yield from sorted(
itertools.chain(
{
Expand Down
8 changes: 4 additions & 4 deletions mkosi/resources/man/mkosi.1.md
Original file line number Diff line number Diff line change
Expand Up @@ -1016,10 +1016,10 @@ boolean argument: either `1`, `yes`, or `true` to enable, or `0`, `no`,

`KernelModulesInclude=`, `--kernel-modules-include=`
: Takes a list of regex patterns that specify kernel modules to include in the image. Patterns should be
relative to the `/usr/lib/modules/<kver>/kernel` directory. mkosi checks for a match anywhere in the module
path (e.g. `i915` will match against `drivers/gpu/drm/i915.ko`). All modules that match any of the
specified patterns are included in the image. All module and firmware dependencies of the matched modules
are included in the image as well.
relative to `/usr/lib/modules/<kver>/<subdir>` paths. mkosi checks for a match anywhere in the module path
(e.g. `i915` will match against `drivers/gpu/drm/i915.ko`). All modules that match any of the specified
patterns are included in the image. All module and firmware dependencies of the matched modules are included
in the image as well.

If the special value `default` is used, the default kernel modules
defined in the `mkosi-initrd` configuration are included as well.
Expand Down
4 changes: 2 additions & 2 deletions tests/test_initrd.py
Original file line number Diff line number Diff line change
Expand Up @@ -225,9 +225,9 @@ def test_initrd_size(config: ImageConfig) -> None:
maxsize = 1024**2 * {
Distribution.fedora: 63,
Distribution.debian: 62,
Distribution.ubuntu: 56,
Distribution.ubuntu: 57,
Distribution.arch: 83,
Distribution.opensuse: 64,
}.get(config.distribution, 57)
}.get(config.distribution, 58)

assert (Path(image.output_dir) / "image.initrd").stat().st_size <= maxsize

0 comments on commit 64897fd

Please sign in to comment.