modules.conf (5)
NAME
modules.conf - configuration file for loading kernel modules
DESCRIPTION
The behavior 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
generic_stringfile=A_PATH
pcimapfile=A_PATH
isapnpmapfile=A_PATH
usbmapfile=A_PATH
parportmapfile=A_PATH
ieee1394mapfile=A_PATH
pnpbiosmapfile=A_PATH
[add] probe name module_list
[add] probeall name module_list
prune filename
post-install module command ...
post-remove module command ...
pre-install module command ...
pre-remove module command ...
remove module command ...
persistdir directory_name
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
DANGER: Applying shell expansion to user supplied input is a major
security risk. Modutils code only does meta expansion via shell
commands for trusted data. Basically this means only for data in the
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
(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 behavior 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.
Note that you must specify the keep directive to prevent any
path directives from over-riding the default paths.
isapnpmapfile=A_PATH
This is the path to the isapnpmap file that will be created by
depmod and used by install scripts to find the module that
supports an ISA PNP device. Normally the default value should
be used, see below.
usbmapfile=A_PATH
This is the path to the usbmap file that will be created by
depmod and used by install scripts to find the module that
supports an USB device. Normally the default value should be
used, see below.
parportmapfile=A_PATH
This is the path to the parportmap file that will be created by
depmod and used by install scripts to find the module that
supports an parport device. Normally the default value should
be used, see below.
ieee1394mapfile=A_PATH
This is the path to the ieee1394map file that will be created by
depmod and used by install scripts to find the module that
supports an ieee1394 device. Normally the default value should
be used, see below.
pnpbiosmapfile=A_PATH
This is the path to the pnpbiosmap file that will be created by
depmod and used by install scripts to find the module that
supports an pnpbios device. Normally the default value should
be used, see below.
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 /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 behavior
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 behavior 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.
prune filename
The top level module directory for a kernel install contains
files which are not modules. These include modules.dep,
modules.generic_string, modules.pcimap, modules.isapnpmap,
modules.usbmap, modules.parportmap, modules.ieee1394map,
modules.pnpbiosmap, the build symlink to the kernel source tree
and any other files that the install process wants to save from
a kernel build. To prevent depmod issuing warnings about "not
an ELF file", these non-module files should appear in the prune
list. depmod has a built in prune list which cannot be removed
because it lists files which will exist for any kernel build.
If you add your own files to the top level modules directory,
add a prune statement for each filename. Note: The prune list
is only used when scanning the top directory of a path, and only
if the directory contains at least one subdirectory from the
standard list of subdirectory names, i.e. it appears to be a top
level directory built from a kernel install. The prune list has
no effect on subdirectories of a path.
[add] options [-k] 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. If there
is -k before the module name, then the module won't be
when it is passed to the shell. For example,
abc='"def,ghi jkl (xyz)"'
[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
readable when modules are loaded and is writable when modules
are unloaded, the default value is /var/lib/modules/persist.
Many Linux distributions load their modules before mounting
filesystems, this can cause problems for persistent data. If
/var is a separate partition and it is mounted after modules are
loaded then insmod has nowhere to read persistent data from.
You have two choices when /var is on a separate partition.
1) Specify persistdir pointing at a directory in the root
partition, say /lib/modules/persist. This assumes that the
root partition is writable when rmmod runs.
2) Load any filesystem related modules first, mount the /var
partition then load the rest of the modules. This assumes that
the filesystem modules have no persistent data.
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
generic_stringfile=/lib/modules/`uname -r`/modules.generic_string
pcimapfile=/lib/modules/`uname -r`/modules.pcimap
isapnpmapfile=/lib/modules/`uname -r`/modules.isapnpmap
usbmapfile=/lib/modules/`uname -r`/modules.usbmap
parportmapfile=/lib/modules/`uname -r`/modules.parportmap
ieee1394mapfile=/lib/modules/`uname -r`/modules.ieee1394map
pnpbiosmapfile=/lib/modules/`uname -r`/modules.pnpbiosmap
path[boot]=/lib/modules/boot
path[toplevel]=/lib/modules/`uname -r`
path[toplevel]=/lib/modules/`kernelversion`
path[toplevel]=/lib/modules/default
path[toplevel]=/lib/modules
persistdir=/var/lib/modules/persist
There are also a set of default alias and options directives. Since
this set is continuously 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
SEE ALSO
depmod(8), modprobe(8), insmod(8)
AUTHOR
Bjorn Ekwall <bj0rn@blox.se>
Keith Owens <kaos@ocs.com.au>
4th Berkeley Distribution 07 December 1999 MODULES.CONF(5)