Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 22 Sep 2003 15:30:52 +0200
From:      Erik Trulsson <ertr1013@student.uu.se>
To:        David Fleck <david.fleck@mchsi.com>
Cc:        FreeBSD Questions <freebsd-questions@freebsd.org>
Subject:   Re: What determines if kernel modules are auto-loaded?
Message-ID:  <20030922133052.GA7702@falcon.midgard.homeip.net>
In-Reply-To: <20030922074442.J430@grond.sourballs.org>
References:  <20030921083559.U1534@grond.sourballs.org> <20030921190832.51ab0169.doublef@tele-kom.ru> <20030922074442.J430@grond.sourballs.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, Sep 22, 2003 at 07:58:27AM -0500, David Fleck wrote:
> On Sun, 21 Sep 2003, Sergey DoubleF Zaharchenko wrote:
> > On Sun, 21 Sep 2003 18:53:31 +0000 Sergey "DoubleF" Zaharchenko <double=
f@tele-kom.ru> probably wrote:
> > > Mostly the program which uses the device. For instance, vnconfig and
> > > mount will load the necessary modules because they are supposed to be
> > > run as root and expect to have the necessary priveleges. Why would a
> > > programmer make a mp3 player that would auto-load the sound module? An
> > > mp3 player should be portable and should not depend on such things as=
 a
> > > kernel module. Moreover, the player is not supposed to run as
> > > root, which is required to load kernel modules.
> >
> > You should read kldload(2), etc. if you want to load modules in your pr=
ogram.
>=20
> Thanks for the response - it helps shed some more light on things.  But I
> don't want to load modules for 'my' program - I'm far less interested in
> this from a development point of view than from a system admin. point of
> view.
>=20
> Why, for instance, does my (4.6.2-RELEASE-p20) system have a nfs.ko kernel
> module, and a line in /boot/defaults/loader.conf to enable this module,
> but (apparently) no way to *use* the module?  If I compile a kernel with
> 'options NFS' uncommented in the kernel config file, the nfs module gets
> built into the kernel, and loading the module is pointless - however, if I
> comment out 'options NFS', the kernel can't compile because of missing
> symbols.  So I have a chunk of code that gets built by the makefile as a
> module, but can't be used as a module?  I find this all very unintuitive.

What do you mean "can't compile"?  I have built kernels without
'options NFS' before without any problems, and it certainly is supposed
to be possible to build a kernel without NFS support, and later load
the NFS code via the module.  AFAIK all the modules built can be used
as modules, otherwise, as you note, there wouldn't be much point in
having them as modules and the developers are generally not that
stupid.

In some circumstances it is necessary to have code built into the
kernel rather than loaded from the corresponding module, but these are
exceptions rather than the rule.

One example is the ipfw.ko module. All modules are built with a fixed
set of options and this module is built without 'options IPDIVERT'
which is required to used natd. So if you want to use natd you need to
have both 'options IPFIREWALL' and 'options IPDIVERT' in the kernel
config, while if you just want a firewall without NAT support you can
compile the kernel without either option and load the ipfw.ko module at
runtime.
Another example is if you want to boot from an NFS-mounted filesystem,
in which case you need NFS support in the kernel, since otherwise the
system can=E4t load any modules.



>=20
> What seems to be happening during the kernel compile process is that a
> certain number of modules are always compiled, regardless of config file
> settings - the settings only determine if a given chunk of code makes it
> into the kernel itself.  If the module is compiled into a .ko file, and if
> the code isn't present in the kernel, then it can be loaded by kldload. Is
> this correct?

Yes, that is essentially correct.


--=20
<Insert your favourite quote here.>
Erik Trulsson
ertr1013@student.uu.se



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030922133052.GA7702>