6f03065dce
* Add a slash to the end of $MODULE_DIR, as expected by depmod. (Not that running depmod from the command line is all that useful, since you can't use it to update the tree in the Nix store. But at least commands like "depmod -n" work now.) Reported by Kirill Elagin on IRC. svn path=/nixos/trunk/; revision=33312
113 lines
3.1 KiB
Nix
113 lines
3.1 KiB
Nix
{ config, pkgs, ... }:
|
|
|
|
with pkgs.lib;
|
|
|
|
{
|
|
|
|
###### interface
|
|
|
|
options = {
|
|
|
|
system.sbin.modprobe = mkOption {
|
|
# should be moved in module-init-tools
|
|
internal = true;
|
|
default = pkgs.writeTextFile {
|
|
name = "modprobe";
|
|
destination = "/sbin/modprobe";
|
|
executable = true;
|
|
text =
|
|
''
|
|
#! ${pkgs.stdenv.shell}
|
|
export MODULE_DIR=${config.system.modulesTree}/lib/modules/
|
|
|
|
# Fall back to the kernel modules used at boot time if the
|
|
# modules in the current configuration don't match the
|
|
# running kernel.
|
|
if [ ! -d "$MODULE_DIR/$(${pkgs.coreutils}/bin/uname -r)" ]; then
|
|
MODULE_DIR=/var/run/booted-system/kernel-modules/lib/modules/
|
|
fi
|
|
|
|
exec ${pkgs.module_init_tools}/sbin/modprobe "$@"
|
|
'';
|
|
};
|
|
description = ''
|
|
Wrapper around modprobe that sets the path to the modules
|
|
tree.
|
|
'';
|
|
};
|
|
|
|
boot.blacklistedKernelModules = mkOption {
|
|
default = [];
|
|
example = [ "cirrusfb" "i2c_piix4" ];
|
|
description = ''
|
|
List of names of kernel modules that should not be loaded
|
|
automatically by the hardware probing code.
|
|
'';
|
|
};
|
|
|
|
boot.extraModprobeConfig = mkOption {
|
|
default = "";
|
|
example =
|
|
''
|
|
options parport_pc io=0x378 irq=7 dma=1
|
|
'';
|
|
description = ''
|
|
Any additional configuration to be appended to the generated
|
|
<filename>modprobe.conf</filename>. This is typically used to
|
|
specify module options. See
|
|
<citerefentry><refentrytitle>modprobe.conf</refentrytitle>
|
|
<manvolnum>5</manvolnum></citerefentry> for details.
|
|
'';
|
|
};
|
|
|
|
};
|
|
|
|
|
|
###### implementation
|
|
|
|
config = {
|
|
|
|
environment.etc = singleton
|
|
{ source = pkgs.writeText "modprobe.conf"
|
|
''
|
|
${flip concatMapStrings config.boot.blacklistedKernelModules (name: ''
|
|
blacklist ${name}
|
|
'')}
|
|
${config.boot.extraModprobeConfig}
|
|
'';
|
|
target = "modprobe.d/nixos.conf";
|
|
};
|
|
|
|
boot.blacklistedKernelModules =
|
|
[ # This module is for debugging and generates gigantic amounts
|
|
# of log output, so it should never be loaded automatically.
|
|
"evbug"
|
|
|
|
# This module causes ALSA to occassionally select the wrong
|
|
# default sound device, and is little more than an annoyance
|
|
# on modern machines.
|
|
"snd_pcsp"
|
|
|
|
# !!! Hm, Ubuntu blacklists all framebuffer devices because
|
|
# they're "buggy" and cause suspend problems. Maybe we should
|
|
# too?
|
|
];
|
|
|
|
system.activationScripts.modprobe =
|
|
''
|
|
# Allow the kernel to find our wrapped modprobe (which searches
|
|
# in the right location in the Nix store for kernel modules).
|
|
# We need this when the kernel (or some module) auto-loads a
|
|
# module.
|
|
echo ${config.system.sbin.modprobe}/sbin/modprobe > /proc/sys/kernel/modprobe
|
|
'';
|
|
|
|
environment.shellInit =
|
|
''
|
|
export MODULE_DIR=${config.system.modulesTree}/lib/modules/
|
|
'';
|
|
|
|
};
|
|
|
|
}
|