1 This file describes the strategy for dynamically loadable modules
2 in the Linux kernel. This is not a technical description on
3 the internals of module, but mostly a sample of how to compile
6 Note: You should ensure that the modutils-X.Y.Z.tar.gz you are using
7 is the most up to date one for this kernel. The "X.Y.Z" will reflect
8 the kernel version at the time of the release of the modules package.
9 Some older modules packages aren't aware of some of the newer modular
10 features that the kernel now supports. The current required version
11 is listed in the file linux/Documentation/Changes.
14 The kernel has been changed to remove kerneld support and use
15 the new kmod support. Keep this in mind when reading this file. Kmod
16 does the exact same thing as kerneld, but doesn't require an external
17 program (see Documentation/kmod.txt)
22 Anyway, your first step is to compile the kernel, as explained in the
23 file linux/README. It generally goes like:
28 make zImage or make zlilo
30 In "make config", you select what you want to include in the "resident"
31 kernel and what features you want to have available as loadable modules.
32 You will generally select the minimal resident set that is needed to boot:
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!
40 plus those things that you just can't live without...
42 The set of modules is constantly increasing, and you will be able to select
43 the option "m" in "make config" for those features that the current kernel
44 can offer as loadable modules.
46 You also have a possibility to create modules that are less dependent on
47 the kernel version. This option can be selected during "make config", by
48 enabling CONFIG_MODVERSIONS, and is most useful on "stable" kernel versions,
49 such as the kernels from the 1.2 and 2.0 series.
50 If you have modules that are based on sources that are not included in
51 the official kernel sources, you will certainly like this option...
53 Here is a sample of the available modules included in the kernel sources:
55 Most filesystems: minix, msdos, umsdos, sysv, isofs, hpfs,
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.
62 Most Ethernet drivers: (too many to list, please see the file
63 ./Documentation/networking/net-modules.txt)
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
72 sbpcd: Matsushita/Panasonic CR52x, CR56x, CD200,
73 Longshine LCS-7260, TEAC CD-55A
74 sonycd535: Sony CDU-531/535, CDU-510/515
76 And a lot of misc modules, such as:
78 binfmt_elf: elf loader
79 binfmt_java: java loader
80 isp16: cdrom interface
81 serial: the serial (tty) interface
83 When you have made the kernel, you create the modules by doing:
87 This will compile all modules and update the linux/modules directory.
88 In this directory you will then find a bunch of symbolic links,
89 pointing to the various object files in the kernel tree.
90 Now, after you have created all your modules, you should also do:
94 This will copy all newly made modules into subdirectories under
95 "/lib/modules/kernel_release/", where "kernel_release" is something
96 like 2.0.1, or whatever the current kernel version is...
98 As soon as you have rebooted the newly made kernel, you can install
99 and remove modules at will with the utilities: "insmod" and "rmmod".
100 After reading the man-page for insmod, you will also know how easy
101 it is to configure a module when you do "insmod" (hint: symbol=value).
107 You also have access to two utilities: "modprobe" and "depmod", where
108 modprobe is a "wrapper" for (or extension to) "insmod".
109 These utilities use (and maintain) a set of files that describe all the
110 modules that are available for the current kernel in the /lib/modules
111 hierarchy as well as their interdependencies.
113 Using the modprobe utility, you can load any module like this:
115 /sbin/modprobe module
117 without paying much attention to which kernel you are running, or what
118 other modules this module depends on.
120 With the help of the modprobe configuration file: "/etc/modules.conf"
121 you can tune the behaviour of modprobe in many ways, including an
122 automatic setting of insmod options for each module.
123 And, yes, there _are_ man-pages for all this...
125 To use modprobe successfully, you generally place the following
126 command 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".)
131 This computes the dependencies between the different modules.
132 Then if you do, for example
134 /sbin/modprobe umsdos
136 you will automatically load _both_ the msdos and umsdos modules,
137 since umsdos runs piggyback on msdos.
140 The "ultimate" utility:
141 -----------------------
143 OK, you have read all of the above, and feel amply impressed...
144 Now, we tell you to forget all about how to install and remove
146 With the kerneld daemon, all of these chores will be taken care of
147 automatically. Just answer "Y" to CONFIG_KERNELD in "make config",
148 and make sure that /sbin/kerneld is started as soon as possible
149 after boot and that "/sbin/depmod -a" has been executed for the
150 current kernel. (Read more about this in the module utilities package.)
152 Whenever a program wants the kernel to use a feature that is only
153 available as a loadable module, and if the kernel hasn't got the
154 module installed yet, the kernel will ask the kerneld daemon to take
155 care of the situation and make the best of it.
157 This is what happens:
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/modules.conf".
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/modules.conf".
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.
176 The icing of the cake is that when an automatically installed module
177 has been unused for a period of time (usually 1 minute), the module
178 will be automatically removed from the kernel as well.
180 This makes the kernel use the minimal amount of memory at any given time,
181 making it available for more productive use than as just a placeholder for
184 Actually, this is only a side-effect from the _real_ benefit of kerneld:
185 You only have to create a minimal kernel, that is more or less independent
186 of the actual hardware setup. The setup of the "virtual" kernel is
187 instead controlled by a configuration file as well as the actual usage
188 pattern of the current machine and its kernel.
189 This should be good news for maintainers of multiple machines as well as
190 for maintainers of distributions.
192 To use kerneld with the least amount of "hassle", you need modprobe from
193 a release that can be considered "recent" w.r.t. your kernel, and also
194 a configuration file for modprobe ("/etc/modules.conf").
195 Since modprobe already knows about most modules, the minimal configuration
196 file could look something like this:
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
205 You could add these lines as well, but they are only "cosmetic":
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
213 Jacques Gelinas <jacques@solucorp.qc.ca>
214 Bjorn Ekwall <bj0rn@blox.se>