diff options
Diffstat (limited to 'kernel/modules.pl')
| -rw-r--r-- | kernel/modules.pl | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/kernel/modules.pl b/kernel/modules.pl index 3b68b4039..9ec6f5356 100644 --- a/kernel/modules.pl +++ b/kernel/modules.pl @@ -56,6 +56,20 @@ sub list_needed_modules { } } +sub list_fake_modules { + my ($kern_ver) = @_; + + load_dependencies("/lib/modules/$kern_ver/modules.dep"); + + my @all = map { category2modules($_) } split(' ', 'multimedia/*'); + my %wanted_modules = map { (list_modules::modname2filename($_) => 1) } @all; + foreach (`find /lib/modules/$kern_ver -name '*.ko.?z'`) { + my $modfile = basename($_); + $modfile =~ s/\.ko\.xz//; + $wanted_modules{$modfile} and print "$modfile\n"; + } +} + sub get_main_modules() { my $base = dirname($0); my $main = chomp_(cat_("$base/RPMS/.main")); @@ -136,3 +150,23 @@ sub check() { exit $error; } + +sub list_additional_firmware { + my ($kern_ver) = @_; + + # The firmware reported by 'modinfo iwlwifi' is the latest supported version of each firmware + # type. Sometimes the latest supported version is not available, and the driver falls back to + # an older version. This means dracut doesn't automatically identify and include the necessary + # firmware files, so we need to list them here (mga#9541). + foreach (map { /^firmware:\s+(.*)/ ? $1 : () } split("\n", `modinfo -k $kern_ver iwlwifi`)) { + next if -f "/lib/firmware/$_"; + my ($basename, $version) = /(.*)-([0-9]+).ucode/; + while ($version-- > 0) { + my $filepath = "/lib/firmware/$basename-$version.ucode"; + if (-f $filepath) { + print "$filepath\n"; + last; + } + } + } +} |
