Although kerneld comes with builtin knowledge about the
most common types of modules, there are situations where kerneld
will not know how to handle a request from the kernel. This is
the case with things like CD-ROM drivers or network drivers,
where there are more than one possible module that can be
loaded.
The requests that the kerneld daemon gets from the kernel
is for one of the following items:
a block-device driver
a character-device driver
a binary format
a tty line discipline
a filesystem
a network device
a network service (e.g. rarp)
a network protocol (e.g. IPX)
The kerneld determines what module should be loaded by
scanning the configuration file
/etc/conf.modules[1]. There are
two kinds of entries in this file: Paths where the module-files
are located, and aliases assigning the module to be loaded for a
given service. If you don't have this file already, you could
create it by running
/sbin/modprobe -c | grep -v '^path' /etc/conf.modules |
If you want to add yet another path directive to the
default paths, you must include all the default paths
as well, since a path directive in
/etc/conf.modules will
replaceall the ones that modprobe knows by
default!
Normally you don't want to add any paths by your own,
since the built-in set should take care of all normal setups
(and then some...), I promise!
On the other hand, if you just want to add an alias or an
option directive, your new entries in
/etc/conf.modules will be
added to the ones that modprobe already
knows. If you should redefine an alias or
an option, your new entries in
/etc/conf.modules will override the
built-in ones.
If you run /sbin/modprobe -c, you
will get a listing of the modules that kerneld knows about, and
what requests they correspond to. For instance, the request that
ends up loading the floppy driver is for the block-device that
has major number 2:
osiris:~ $ /sbin/modprobe -c | grep floppy
alias block-major-2 floppy |
Why block-major-2 ? Because the
floppy devices /dev/fd* use major device 2
and are block devices:
osiris:~ $ ls -l /dev/fd0 /dev/fd1
brw-rw-rw- 1 root root 2, 0 Mar 3 1995 /dev/fd0
brw-r--r-- 1 root root 2, 1 Mar 3 1995 /dev/fd1 |
Character devices are dealt with in a similar
way. E.g. the ftape floppy tape driver sits on major-device
27:
osiris:~ $ ls -lL /dev/ftape
crw-rw---- 1 root disk 27, 0 Jul 18 1994 /dev/ftape |
However, kerneld does not by default know about the
ftape driver - it is not listed in the output from
/sbin/modprobe -c. So to setup kerneld to
load the ftape driver, I must add a line to the kerneld
configuration file, /etc/conf.modules:
alias char-major-27 ftape |
You can also use the device name instead of the
char-major-xxx or
block-major-yyy setup. This is especially
useful for network drivers. For example, a driver for an
ne2000 netcard acting as eth0 would be
loaded with
If you need to pass some options to the driver, for
example to tell the module about what IRQ the netcard is
using, you must add an "options" line:
This will cause kerneld to load the NE2000 driver with
the command
Of course, the actual options available are specific to
the module you are loading.
Binary formats are handled in a similar way. Whenever
you try to run a program that the kernel does not know how to
load, kerneld gets a request for
binfmt-xxx, where
xxx is a number determined from the first
few bytes of the executable. So, the kerneld configuration to
support loading the binfmt_aout module for ZMAGIC (a.out)
executables is
alias binfmt-267 binfmt_aout |
Since the magic number for ZMAGIC files is 267, if you
check /etc/magic, you will see the number
0413; keep in mind that /etc/magic uses
octal numbers where kerneld uses decimal, and octal 413 =
decimal 267. There are actually three slightly different
variants of a.out executables (NMAGIC, QMAGIC and ZMAGIC), so
for full support of the binfmt_aout module we need
alias binfmt-264 binfmt_aout # pure executable (NMAGIC)
alias binfmt-267 binfmt_aout # demand-paged executable (ZMAGIC)
alias binfmt-204 binfmt_aout # demand-paged executable (QMAGIC) |
a.out, Java and iBCS binary formats are recognized
automatically by kerneld, without any configuration.
Line disciplines are requested with
tty-ldisc-x, with
x
being usually 1 (for SLIP) or 3 (for PPP). Both of these are
known by kerneld automatically.
Speaking of ppp, if you want kerneld to load the
bsd_comp data compression module for ppp, then you must add
the following two lines to your
/etc/conf.modules:
alias tty-ldisc-3 bsd_comp
alias ppp0 bsd_comp |
Some network protocols can be loaded as modules as
well. The kernel asks kerneld for a protocol family (e.g. IPX)
with a request for
net-pf-X where
X is a number indicating what family is
wanted. E.g. net-pf-3 is AX.25,
net-pf-4 is IPX and
net-pf-5 is AppleTalk; These numbers are
determined by the AF_AX25, AF_IPX etc. definitions in the
linux source file include/linux/socket.h.
So to autoload the IPX module, you would need an entry like
this in /etc/conf.modules:
See Common Problems for information
about how you can avoid some annoying boot-time messages
related to undefined protocol families.
kerneld requests for filesystems are simply the name of
the filesystem type. A common use of this would be to load the
isofs module for CD-ROM filesystems, i.e. filesystems of type
iso9660: