MODULES.CONF(5)

NAME
modules.conf - configuration file for loading kernel modules

DESCRIPTION
The behaviour of modprobe(8) (and depmod(8) ) can be modified by the (optional) configuration file /etc/modules.conf.

The configuration file consists of a set of lines.
All empty lines, and all text on a line after a '#', will be ignored.
Lines may be continued by ending the line with a '\'.
The remaining lines should all conform to one of the following formats:
  [add] above module module_list
  alias alias_name result
  [add] below module module_list
  define VARIABLE WORD
  depfile=A_PATH
  else
  elseif EXPRESSION
  endif
  if EXPRESSION
  include PATH_TO_CONFIG_FILE
  insmod_opt=GENERIC_OPTIONS_TO_INSMOD
  install module command ...
  keep
  [add] options module MODULE_SPECIFIC_OPTIONS
  path=A_PATH
  path[TAG]=A_PATH
  [add] probe name module_list
  [add] probeall name module_list
  post-install module command ...
  post-remove module command ...
  pre-install module command ...
  pre-remove module command ...
  remove module command ...

All arguments to a directive will be processed to handle shell meta-characters, which means that "shell tricks" like wild-cards and commands enclosed in back-quotes can be used:
  path[misc]=/lib/modules/1.1.5?/local
  path[net]=/lib/modules/`uname -r`/net
Directives may be repeated multiple times. Note that some directives can have an optional prefix: add. When this prefix is used, the new module_list will be added to the previous module_list instead of replacing it.

SEMANTICS
A_PATH is the fully qualified path to the target. It is possible to use shell meta-characters in A_PATH including command output, such as `uname -r` and `kernelversion`.
These two commands are also understood internally in these utilities as meaning the version number of the current kernel and the current kernel version respectively (e.g.: 2.2.3 and 2.2).

WORD is a sequence if non-white characters. If ' " or ` is found in the string, all characters up to the matching ' " or ` will also be included, even whitespace. Every WORD will then be expanded w.r.t. meta-characters. If the expanded result gives more than one word then only the first word of the result will be used.

EXPRESSION below can be:

WORD compare_op WORD
    where compare_op is one of ==, !=, <, <=, >= or >. The string values of the WORDs are compared.

-n WORD compare_op WORD
    where compare_op is one of ==, !=, <, <=, >= or >. The numeric values of the WORDs are compared.

WORD
    If the expansion of WORD fails, or if the expansion is "0" (zero), "false" or "" (empty) then the expansion has the value FALSE. Otherwise the expansion has the value TRUE

-f FILENAME
    Test if the file FILENAME exists.

-k  Test if "autoclean" is enabled (i.e. called from the kernel).

! EXPRESSION
    A negated expression is also an expression.

SYNTAX
This is a description of the legal directives.

define VARIABLE WORD
    Do a putenv("VARIABLE=WORD"). Variables can be created and modified by this directive. The variables will be available in the environment, which makes them usable for all commands executed in the current session.

depfile=A_PATH
    This is the path to the dependency file that will be created by depmod and used by modprobe to find the modules and their dependent modules. Normally the default value should be used, see below.

if EXPRESSION
    If the expression is evaluated to be TRUE then all directives up to the matching else, elseif or endif are processed. Otherwise they are ignored. if directives may be nested up to an internal maximum of 20.
    Note: please avoid having any path directives conditionally processed. Since modprobe has enough built-in "smarts", a conditionally processed path directive will gain you nothing but confusion. Really.

else
    If the previous matching if or elseif directive evaluated its expression to be FALSE then the directives enclosed by the (optional) else directive and its matching endif directive will be processed.

elseif EXPRESSION
    If the previous matching if or elseif directives evaluated their expression to be FALSE and if the expression for this directive evaluates to TRUE then the directives up to the next matching elseif, else or endif directive will be processed.

endif
    This directive ends the chain of matching if, elseif or else directive(s) controlling the conditional processing of configuration file directives.
      if EXPRESSION
          any config lines
      elseif EXPRESSION
          any config lines
      else
          any config lines
      endif
    The else and elseif directives are optional.

include PATH_TO_CONFIG_FILE
    To handle different platforms or configurations with a single configuration file can be quite complex. With the use of the include directive, conditionally processed by if directives, this is now easier to handle.

insmod_opt=GENERIC_OPTIONS_TO_INSMOD
    If insmod should need some special options, not specified elsewhere, this directive makes it possible to add such an option, to be used for every invocation. The standard default options to insmod does normally not have to be modified unless some special situation needs to be handled.

keep
    If this word is found on a line before any lines that contain the path descriptions, the default set of paths will be saved, and thus added to. Otherwise the normal behaviour is that the default set will be replaced by the set of paths in the configuration file.

path=A_PATH

path[TAG]=A_PATH
    The A_PATH argument specifies an additional directory to search for modules. The path directive can carry an optional tag. This tells us a little more about the purpose of the modules in this directory and allows some automated operations by modprobe. The tag is appended to the "path" keyword enclosed in square brackets. If the tag is missing, the tag "misc" is assumed.
    One very useful tag is boot, which can be used to mark all directories containing modules that should be loaded at boot-time.

alias alias_name result
    The "alias" directive can be used to give alias names to modules. A line in /etc/modules.conf that looks like this:
      alias iso9660 isofs
    makes it possible to write modprobe iso9660 although there is no object file for such a module available.
    Note that the line:
      alias some_module off
    will make modprobe ignore requests to load that module. Another special alias is:
      alias some_module null
    which will make requests for some_module always succeed, but no module will actually be installed. This can be used as a base for stacks created via the above and below directives.
    It is possible to have a large number of levels of alias directives, since all aliases will be recursively expanded in order to find the physical module actually referred to. There is an arbitrary limit of 1000 on alias depth to detect loops like:
      alias a b
      alias b a
    If the final result of an alias mapping does not match the name of any module then modprobe applies probe and probeall mappings to the result. If those do not succeed then the module is not found. This makes constructs like this give sensible results (from devfs).
      alias           /dev/sg*        /dev/sg
      probeall        /dev/sg         scsi-hosts sg
    It is legal for an alias to map module A to module B and for module A to exist at the same time but this construct is ambiguous and is not recommended. For historical reasons, the kernel sound system has a module called sound.o but the sound developers also want an alias from sound to the module for the user's sound card, e.g. "alias sound sb". In an attempt to support this requirement but still maintain the defined behaviour where options can be applied to aliases, modprobe bypasses alias expansion when processing a module name if the name was obtained via modules.dep, otherwise aliases are expanded. This is not guaranteed to give the expected behaviour on all combinations of aliases and real modules, you should avoid using an alias with the same name as a real module.

[add] probe name module_list

[add] probeall name module_list
    These directives can only be used when name is the name of the module requested on the command line of modprobe. The effect is that when a request for name is made, the modules in module_list will be tried, in the specified order. The difference between the directives is that probe will continue until the first successful module insertion, while probeall will continue until the end of the list. The exit status reflects whether any module has been successfully installed or not. The optional add prefix adds the new list to the previous list instead of replacing it.

[add] options module MODULE_SPECIFIC_OPTIONS
    All module names, including aliased names, can have their own options directives. Options specified for an alias have higher priority than the options specified for more "basic" names. This rule is used to resolve conflicting options directives. Options given on the command line have the highest priority. The optional add prefix adds the new list to the previous list instead of replacing it. If the result of an alias is not a real module then any options that were constructed from the alias chain are discarded before invoking probe[all].

[add] above module module_list
    This directive makes it possible for one module to "pull in" another set of modules on top of itself in a module stack, as seen in the output of the lsmod(8) command. The above directive is useful for those circumstances when the dependencies are more complex than what can be described in the modules.dep dependency file. This is an optimized case of the post-install and pre-remove directives. Note that failure of installing the module will not influence the exit status of modprobe. The optional add prefix adds the new list to the previous list instead of replacing it.

[add] below module module_list
    This directive makes it possible for one module to "push" another set of modules below itself in a module stack, as seen in the output of the lsmod(8) command. The below directive is useful for those circumstances when the dependencies are more complex than what can be described in the modules.dep dependency file. This is an optimized case of the pre-install and post-remove directives. Note that failure of installing the module will not influence the exit status of modprobe. The optional add prefix adds the new list to the previous list instead of replacing it.

The following directives are useful for (optionally) executing specific commands when loading and unloading a module. Note that even aliased module names can have these directives, which will be executed in the proper order together with any directives for the unaliased module name.

pre-install module command
    Execute command before installing the specified module. See the below directive as well.

install module command
    Execute command instead of the default insmod when installing the specified module.

post-install module command
    Execute command after installing the specified module. See the above directive as well.

pre-remove module command
    Execute command before removing the specified module. See the above directive as well.

remove module command
    Execute command instead of the default (built-in) rmmod when removing the specified module.

post-remove module command
    Execute command after removing the specified module. See the below directive as well.

DEFAULT CONFIGURATION
If the configuration file '/etc/modules.conf' is missing, or if any directive is not overridden, the following defaults are assumed:

  depfile=/lib/modules/`uname -r`/modules.dep
  path[boot]=/lib/modules/boot
  path[fs]=/lib/modules/`uname -r`/fs
  path[net]=/lib/modules/`uname -r`/net
  path[scsi]=/lib/modules/`uname -r`/scsi
  path[block]=/lib/modules/`uname -r`/block
  path[cdrom]=/lib/modules/`uname -r`/cdrom
  path[ipv4]=/lib/modules/`uname -r`/ipv4
  path[ipv6]=/lib/modules/`uname -r`/ipv6
  path[sound]=/lib/modules/`uname -r`/sound
  path[fc4]=/lib/modules/`uname -r`/fc4
  path[video]=/lib/modules/`uname -r`/video
  path[misc]=/lib/modules/`uname -r`/misc
  path[pcmcia]=/lib/modules/`uname -r`/pcmcia
  path[atm]=/lib/modules/`uname -r`/atm
  path[usb]=/lib/modules/`uname -r`/usb
  path[ide]=/lib/modules/`uname -r`/ide
  path[ieee1394]=/lib/modules/`uname -r`/ieee1394
  path[fs]=/lib/modules/`kernelversion`/fs
  path[net]=/lib/modules/`kernelversion`/net
  path[scsi]=/lib/modules/`kernelversion`/scsi
  path[block]=/lib/modules/`kernelversion`/block
  path[cdrom]=/lib/modules/`kernelversion`/cdrom
  path[ipv4]=/lib/modules/`kernelversion`/ipv4
  path[ipv6]=/lib/modules/`kernelversion`/ipv6
  path[sound]=/lib/modules/`kernelversion`/sound
  path[fc4]=/lib/modules/`kernelversion`/fc4
  path[video]=/lib/modules/`kernelversion`/video
  path[misc]=/lib/modules/`kernelversion`/misc
  path[pcmcia]=/lib/modules/`kernelversion`/pcmcia
  path[atm]=/lib/modules/`kernelversion`/atm
  path[usb]=/lib/modules/`kernelversion`/usb
  path[ide]=/lib/modules/`kernelversion`/ide
  path[ieee1394]=/lib/modules/`kernelversion`/ieee1394
  path[fs]=/lib/modules/default/fs
  path[net]=/lib/modules/default/net
  path[scsi]=/lib/modules/default/scsi
  path[block]=/lib/modules/default/block
  path[cdrom]=/lib/modules/default/cdrom
  path[ipv4]=/lib/modules/default/ipv4
  path[ipv6]=/lib/modules/default/ipv6
  path[sound]=/lib/modules/default/sound
  path[fc4]=/lib/modules/default/fc4
  path[video]=/lib/modules/default/video
  path[misc]=/lib/modules/default/misc
  path[pcmcia]=/lib/modules/default/pcmcia
  path[atm]=/lib/modules/default/atm
  path[usb]=/lib/modules/default/usb
  path[ide]=/lib/modules/default/ide
  path[ieee1394]=/lib/modules/default/ieee1394
  path[fs]=/lib/modules/fs
  path[net]=/lib/modules/net
  path[scsi]=/lib/modules/scsi
  path[block]=/lib/modules/block
  path[cdrom]=/lib/modules/cdrom
  path[ipv4]=/lib/modules/ipv4
  path[ipv6]=/lib/modules/ipv6
  path[sound]=/lib/modules/sound
  path[fc4]=/lib/modules/fc4
  path[video]=/lib/modules/video
  path[misc]=/lib/modules/misc
  path[pcmcia]=/lib/modules/pcmcia
  path[atm]=/lib/modules/atm
  path[usb]=/lib/modules/usb
  path[ide]=/lib/modules/ide
  path[ieee1394]=/lib/modules/ieee1394

There are also a set of default alias and options directives. Since this set is continously extended, no list will be given here. The (current) default set can be viewed by using the modprobe -c command with an empty /etc/modules.conf file.

All options directives specify the options needed for a module, as in:
  modprobe de620 bnc=1
These options will be overridden by any options given in the /etc/modules.conf file, and on the modprobe command line.

Remember that it is possible to have an options directive for aliased module names as well as for the non-aliased name. This is useful for e.g. the dummy module:
  alias dummy0 dummy
  options dummy0 -o dummy0

ALTERNATIVE CONFIGURATION FILE
For historical reasons, if /etc/modules.conf does not exist, modutils will read /etc/conf.modules instead. However the use of this historical name is depreciated and it should be replaced with /etc/modules.conf. This version of modutils issues a warning message if /etc/conf.modules exists, later versions will give an error message and refuse to load modules.

SEE ALSO
depmod(8), modprobe(8), insmod(8)

AUTHOR
Bjorn Ekwall <bj0rn@blox.se>
Keith Owens <kaos@ocs.com.au>