This file describes the strategy for dynamically loadable modules
in the Linux kernel. This is not a technical description on
the internals of module, but mostly a sample of how to compile
and use modules.

In this kernel you also have a possibility to create modules that are
less dependent on the kernel version.  This option can be selected
during "make config", by enabling CONFIG_MODVERSIONS.

Note: You should ensure that the modules-X.Y.Z.tar.gz you are using
is the most up to date one for this kernel. The "X.Y.Z" will reflect
the kernel version at the time of the release of the modules package.
Some older modules packages aren't aware of some of the newer modular
features that the kernel now supports. (If you are unsure, you can 
usually find out what the current release of the modules-X.Y.Z.tar.gz
package is by looking up the URL listed for "Bjorn Ekwall" in the 
file ./linux/CREDITS)

Anyway, your first step is to compile the kernel, as explained in the
file README.  It generally goes like:

	make config
	make dep
	make clean
	make zImage or make zlilo

In "make config", you select what you want to include in the kernel.
You will generally select the minimal set that is needed to boot:

	The filesystem of your root partition
	A scsi driver, but see below for a list of SCSI modules!
	Normal hard drive support
	Net support (CONFIG_NET)
	TCP/IP support (CONFIG_INET), but no drivers!

	plus those things that you just can't live without...

What has been left out is generally loadable as a modules.
The set of modules is rapidly increasing, but so far these are known:

	Most filesystems: minix, xiafs, msdos, umsdos, sysv, isofs, hpfs,
			  smbfs, nfs

	Mid-level SCSI support (required by top and low level scsi drivers).
	Most low-level SCSI drivers: (i.e. aha1542, in2000)
	All SCSI high-level drivers: disk, tape, cdrom, generic.

	Most ethernet drivers: (too many to list, please see the file
				./Documentation/networking/net-modules.txt)

	Most CDROM drivers:
		aztcd:     Aztech,Orchid,Okano,Wearnes
		cm206:     Philips/LMS CM206
		gscd:      Goldstar GCDR-420
		mcd, mcdx: Mitsumi LU005, FX001
		optcd:     Optics Storage Dolphin 8000AT
		sjcd:      Sanyo CDR-H94A
		sbpcd:     Matsushita/Panasonic CR52x, CR56x, CD200,
		           Longshine LCS-7260, TEAC CD-55A
		sonycd535: Sony CDU-531/535, CDU-510/515

	Some misc modules:
		lp: line printer
		binfmt_elf: elf loader
		binfmt_java: java loader
		isp16: cdrom interface

When you have made the kernel, you create the modules by doing:

	make modules

This will compile all modules and update the modules directory.
In this directory you will then find a bunch of symbolic links,
pointing to the various object files in the kernel tree.

As soon as you have rebooted the newly made kernel, you can install
and remove modules at will with the utilities: "insmod" and "rmmod".


Now, after you have made all modules, you can also do:

	make modules_install

This will copy all newly made modules into subdirectories under
"/lib/modules/kernel_release/", where "kernel_release" is something
like 2.0.1, or whatever the current kernel version is...


Nifty features:

You have access to two utilities: "modprobe" and "depmod".
Using the modprobe utility, you can load any module like this:

	/sbin/modprobe module

without paying much attention to which kernel you are running.
To use modprobe successfully, you generally place the following
command in your /etc/rc.d/rc.S script.

	/sbin/depmod -a

This computes the dependencies between the different modules.
Then if you do, for example

	/sbin/modprobe umsdos

you will automatically load _both_ the msdos and umsdos modules,
since umsdos runs piggyback on msdos.


Written by:
	Jacques Gelinas <jacques@solucorp.qc.ca>
	Bjorn Ekwall <bj0rn@blox.se>
