linux-old/Documentation/modules.txt
<<
>>
Prefs
   1This file describes the strategy for dynamically loadable modules
   2in the Linux kernel. This is not a technical description on
   3the internals of module, but mostly a sample of how to compile
   4and use modules.
   5
   6Note: You should ensure that the modutils-X.Y.Z.tar.gz you are using
   7is the most up to date one for this kernel. The "X.Y.Z" will reflect
   8the kernel version at the time of the release of the modules package.
   9Some older modules packages aren't aware of some of the newer modular
  10features that the kernel now supports.  The current required version
  11is listed in the file linux/Documentation/Changes.
  12
  13* * * NOTE * * *
  14The kernel has been changed to remove kerneld support and use
  15the new kmod support.  Keep this in mind when reading this file.  Kmod
  16does the exact same thing as kerneld, but doesn't require an external
  17program (see Documentation/kmod.txt)
  18
  19In the beginning...
  20-------------------
  21
  22Anyway, your first step is to compile the kernel, as explained in the
  23file linux/README.  It generally goes like:
  24
  25        make config
  26        make dep
  27        make clean
  28        make zImage or make zlilo
  29
  30In "make config", you select what you want to include in the "resident"
  31kernel and what features you want to have available as loadable modules.
  32You will generally select the minimal resident set that is needed to boot:
  33
  34        The filesystem of your root partition
  35        A scsi driver, but see below for a list of SCSI modules!
  36        Normal hard drive support
  37        Net support (CONFIG_NET)
  38        TCP/IP support (CONFIG_INET), but no drivers!
  39
  40        plus those things that you just can't live without...
  41
  42The set of modules is constantly increasing, and you will be able to select
  43the option "m" in "make config" for those features that the current kernel
  44can offer as loadable modules.
  45
  46You also have a possibility to create modules that are less dependent on
  47the kernel version.  This option can be selected during "make config", by
  48enabling CONFIG_MODVERSIONS, and is most useful on "stable" kernel versions,
  49such as the kernels from the 1.2 and 2.0 series.
  50If you have modules that are based on sources that are not included in
  51the official kernel sources, you will certainly like this option...
  52
  53Here is a sample of the available modules included in the kernel sources:
  54
  55        Most filesystems: minix, msdos, umsdos, sysv, isofs, hpfs,
  56                          smbfs, nfs
  57
  58        Mid-level SCSI support (required by top and low level scsi drivers).
  59        Most low-level SCSI drivers: (i.e. aha1542, in2000)
  60        All SCSI high-level drivers: disk, tape, cdrom, generic.
  61
  62        Most Ethernet drivers: (too many to list, please see the file
  63                                ./Documentation/networking/net-modules.txt)
  64
  65        Most CDROM drivers:
  66                aztcd:     Aztech,Orchid,Okano,Wearnes
  67                cm206:     Philips/LMS CM206
  68                gscd:      Goldstar GCDR-420
  69                mcd, mcdx: Mitsumi LU005, FX001
  70                optcd:     Optics Storage Dolphin 8000AT
  71                sjcd:      Sanyo CDR-H94A
  72                sbpcd:     Matsushita/Panasonic CR52x, CR56x, CD200,
  73                           Longshine LCS-7260, TEAC CD-55A
  74                sonycd535: Sony CDU-531/535, CDU-510/515
  75
  76        And a lot of misc modules, such as:
  77                lp: line printer
  78                binfmt_elf: elf loader
  79                binfmt_java: java loader
  80                isp16: cdrom interface
  81                serial: the serial (tty) interface
  82
  83When you have made the kernel, you create the modules by doing:
  84
  85        make modules
  86
  87This will compile all modules and update the linux/modules directory.
  88In this directory you will then find a bunch of symbolic links,
  89pointing to the various object files in the kernel tree.
  90Now, after you have created all your modules, you should also do:
  91
  92        make modules_install
  93
  94This will copy all newly made modules into subdirectories under
  95"/lib/modules/kernel_release/", where "kernel_release" is something
  96like 2.0.1, or whatever the current kernel version is...
  97
  98As soon as you have rebooted the newly made kernel, you can install
  99and remove modules at will with the utilities: "insmod" and "rmmod".
 100After reading the man-page for insmod, you will also know how easy
 101it is to configure a module when you do "insmod" (hint: symbol=value).
 102
 103
 104Nifty features:
 105---------------
 106
 107You also have access to two utilities: "modprobe" and "depmod", where
 108modprobe is a "wrapper" for (or extension to) "insmod".
 109These utilities use (and maintain) a set of files that describe all the
 110modules that are available for the current kernel in the /lib/modules
 111hierarchy as well as their interdependencies.
 112
 113Using the modprobe utility, you can load any module like this:
 114
 115        /sbin/modprobe module
 116
 117without paying much attention to which kernel you are running, or what
 118other modules this module depends on.
 119
 120With the help of the modprobe configuration file: "/etc/conf.modules"
 121you can tune the behaviour of modprobe in many ways, including an
 122automatic setting of insmod options for each module.
 123And, yes, there _are_ man-pages for all this...
 124
 125To use modprobe successfully, you generally place the following
 126command in your /etc/rc.d/rc.S script.  (Read more about this in the
 127"rc.hints" file in the module utilities package, "modules-x.y.z.tar.gz".)
 128
 129        /sbin/depmod -a
 130
 131This computes the dependencies between the different modules.
 132Then if you do, for example
 133
 134        /sbin/modprobe umsdos
 135
 136you will automatically load _both_ the msdos and umsdos modules,
 137since umsdos runs piggyback on msdos.
 138
 139
 140The "ultimate" utility:
 141-----------------------
 142
 143OK, you have read all of the above, and feel amply impressed...
 144Now, we tell you to forget all about how to install and remove
 145loadable modules...
 146With the kerneld daemon, all of these chores will be taken care of
 147automatically.  Just answer "Y" to CONFIG_KERNELD in "make config",
 148and make sure that /sbin/kerneld is started as soon as possible
 149after boot and that "/sbin/depmod -a" has been executed for the
 150current kernel. (Read more about this in the module utilities package.)
 151
 152Whenever a program wants the kernel to use a feature that is only
 153available as a loadable module, and if the kernel hasn't got the
 154module installed yet, the kernel will ask the kerneld daemon to take
 155care of the situation and make the best of it.
 156
 157This is what happens:
 158
 159        - The kernel notices that a feature is requested that is not
 160          resident in the kernel.
 161        - The kernel sends a message to kerneld, with a symbolic
 162          description of the requested feature.
 163        - The kerneld daemon asks e.g. modprobe to load a module that
 164          fits this symbolic description.
 165        - modprobe looks into its internal "alias" translation table
 166          to see if there is a match.  This table can be reconfigured
 167          and expanded by having "alias" lines in "/etc/conf.modules".
 168        - insmod is then asked to insert the module(s) that modprobe
 169          has decided that the kernel needs.  Every module will be
 170          configured according to the "options" lines in "/etc/conf.modules".
 171        - modprobe exits and kerneld tells the kernel that the request
 172          succeeded (or failed...)
 173        - The kernel uses the freshly installed feature just as if it
 174          had been configured into the kernel as a "resident" part.
 175
 176The icing of the cake is that when an automatically installed module
 177has been unused for a period of time (usually 1 minute), the module
 178will be automatically removed from the kernel as well.
 179
 180This makes the kernel use the minimal amount of memory at any given time,
 181making it available for more productive use than as just a placeholder for
 182unused code.
 183
 184Actually, this is only a side-effect from the _real_ benefit of kerneld:
 185You only have to create a minimal kernel, that is more or less independent
 186of the actual hardware setup.  The setup of the "virtual" kernel is
 187instead controlled by a configuration file as well as the actual usage
 188pattern of the current machine and its kernel.
 189This should be good news for maintainers of multiple machines as well as
 190for maintainers of distributions.
 191
 192To use kerneld with the least amount of "hassle", you need modprobe from
 193a release that can be considered "recent" w.r.t. your kernel, and also
 194a configuration file for modprobe ("/etc/conf.modules").
 195Since modprobe already knows about most modules, the minimal configuration
 196file could look something like this:
 197
 198        alias scsi_hostadapter aha1542  # or whatever SCSI adapter you have
 199        alias eth0 3c509        # or whatever net adapter you have
 200        # you might need an "options" line for some net adapters:
 201        options 3c509 io=0x300 irq=10
 202        # you might also need an "options" line for some other module:
 203        options cdu31a cdu31a_port=0x1f88 sony_pas_init=1
 204
 205You could add these lines as well, but they are only "cosmetic":
 206
 207        alias net-pf-3 off      # no ax25 module available (yet)
 208        alias net-pf-4 off      # if you don't use the ipx module
 209        alias net-pf-5 off      # if you don't use the appletalk module
 210
 211Finally, for the "purists":
 212You can name the modprobe configuration either "/etc/conf.modules" or
 213"/etc/modules.conf", since modprobe knows what to do in each case...
 214
 215
 216Written by:
 217        Jacques Gelinas <jacques@solucorp.qc.ca>
 218        Bjorn Ekwall <bj0rn@blox.se>
 219
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.