296 lines
13 KiB
Plaintext
296 lines
13 KiB
Plaintext
|
Linux Kernel Modules Installation HOWTO
|
|||
|
|
|||
|
|
|||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>rhw@bigfoot.com
|
|||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
Revision History
|
|||
|
Revision 1.0 Unknown date Revised by: rhw
|
|||
|
Initial Release
|
|||
|
|
|||
|
|
|||
|
Describes the installation of Linux kernel modules.
|
|||
|
|
|||
|
-----------------------------------------------------------------------------
|
|||
|
Table of Contents
|
|||
|
1. Purpose of this Document
|
|||
|
2. Pre-requisites
|
|||
|
3. Compiler Speed-up
|
|||
|
4. Recompiling the Kernel for Modules
|
|||
|
5.1. Configuring Debian or RedHat for Modules
|
|||
|
5.2. Configuring Slackware for Modules
|
|||
|
5.3. Configuring Other Distributions for Modules
|
|||
|
|
|||
|
|
|||
|
|
|||
|
1. Purpose of this Document
|
|||
|
|
|||
|
My experience with Linux and modules has been that the existing documents
|
|||
|
fail to provide a satisfactory explanation as to how to successfully set up
|
|||
|
Linux with modules configured and working. The procedure explained in this
|
|||
|
document has been successfully used several times, both on my own system and
|
|||
|
over the Internet to give directions to somebody trying to get some feature
|
|||
|
to work which requires a driver supplied only in module form.
|
|||
|
|
|||
|
My own system runs from a RedHat 4.1 distribution of Linux, and it was on
|
|||
|
this setup that I developed the procedure. I have since successfully
|
|||
|
installed it on systems running from various Slackware distributions, and on
|
|||
|
one system running from a Debian distribution, and the necessary procedure to
|
|||
|
correctly configure modules under Linux in all three is documented herein.
|
|||
|
|
|||
|
Warning I have recently used the same procedure with RedHat 4.2, but with
|
|||
|
inconsistent results on apparently identical systems. I have not yet
|
|||
|
determined what the problem is, so can make no guarantees at this
|
|||
|
stage as to whether or not it will work on your system.
|
|||
|
|
|||
|
This document is distributed under the terms of the GNU Free Documentation
|
|||
|
License. You should have received a copy along with it. If not, it is
|
|||
|
available from http://www.fsf.org/licenses/fdl.html.
|
|||
|
-----------------------------------------------------------------------------
|
|||
|
|
|||
|
2. Pre-requisites
|
|||
|
|
|||
|
<EFBFBD><EFBFBD>*<2A>Before the steps in this document can be applied, the reader must have a
|
|||
|
working Linux installation in which one can get to the Linux prompt as
|
|||
|
user root since the majority of the steps involved can only be undertaken
|
|||
|
by the said user.
|
|||
|
|
|||
|
<EFBFBD><EFBFBD>*<2A>The existing kernel may be compiled either to use modules or not to use
|
|||
|
modules, and can even display error messages during the boot-up procedure
|
|||
|
as a result of modules being configured which aren't available at the
|
|||
|
moment, providing the above condition is met.
|
|||
|
|
|||
|
<EFBFBD><EFBFBD>*<2A>The source tree for the current kernel is assumed to be found rooted at /
|
|||
|
usr/src/linux and that is also assumed to be the current directory
|
|||
|
throughout this document at the start of any sequence of commands to be
|
|||
|
issued.
|
|||
|
|
|||
|
|
|||
|
-----------------------------------------------------------------------------
|
|||
|
3. Compiler Speed-up
|
|||
|
|
|||
|
If your machine has 16 or more Megabytes of RAM, there is a useful speed-up
|
|||
|
that can be done, which is to permit the kernel to compile two or modules in
|
|||
|
parallel. This will increase the load on the machine whilst the kernel is
|
|||
|
being recompiled, but will reduce the time during which the compilation will
|
|||
|
be taking place.
|
|||
|
|
|||
|
Before you can use this method, you need to check the amount of RAM present
|
|||
|
in your machine, as if you set this too high, the compilation will actually
|
|||
|
slow down. Experience has shown that the optimum value depends on the amount
|
|||
|
of RAM in your system according to the following formula, at least for
|
|||
|
systems with up to 32 Megabytes of RAM, although it may be a little
|
|||
|
conservative for systems with larger amounts of RAM:
|
|||
|
|
|||
|
N = [RAM in Megabytes] / 8 + 1
|
|||
|
|
|||
|
For the benefit of those with a dislike of math, the values for the common
|
|||
|
amounts of RAM are as follows:
|
|||
|
|
|||
|
Table 1. Sample Table
|
|||
|
+------------+-------------+
|
|||
|
|RAM Size |Value to Use |
|
|||
|
+------------+-------------+
|
|||
|
|16 Megs |3 |
|
|||
|
+------------+-------------+
|
|||
|
|24 Megs |4 |
|
|||
|
+------------+-------------+
|
|||
|
|32 Megs |5 |
|
|||
|
+------------+-------------+
|
|||
|
|40 Megs |6 |
|
|||
|
+------------+-------------+
|
|||
|
|48 Megs |7 |
|
|||
|
+------------+-------------+
|
|||
|
|56 Megs |8 |
|
|||
|
+------------+-------------+
|
|||
|
|64 Megs |9 |
|
|||
|
+------------+-------------+
|
|||
|
|80 Megs |11 |
|
|||
|
+------------+-------------+
|
|||
|
|96 Megs |13 |
|
|||
|
+------------+-------------+
|
|||
|
|112 Megs |15 |
|
|||
|
+------------+-------------+
|
|||
|
|128 Megs |17 |
|
|||
|
+------------+-------------+
|
|||
|
|
|||
|
When you have decided on the correct number, edit the file /usr/src/linux/
|
|||
|
Makefile and find the line that currently reads:
|
|||
|
MAKE=make
|
|||
|
|
|||
|
|
|||
|
Replace it with one reading:
|
|||
|
MAKE=make -j N
|
|||
|
|
|||
|
|
|||
|
where N is the number determined above.
|
|||
|
-----------------------------------------------------------------------------
|
|||
|
|
|||
|
4. Recompiling the Kernel for Modules
|
|||
|
|
|||
|
The kernel can be reconfigured to use modules for everything other than the
|
|||
|
file system mounted as root (in most cases, this is the ext2 file system).
|
|||
|
|
|||
|
However, there are certain items that appear to be difficult to set up
|
|||
|
properly as modules, so I would recommend the following be compiled into the
|
|||
|
kernel:
|
|||
|
|
|||
|
<EFBFBD><EFBFBD>*<2A>Ethernet hardware drivers.
|
|||
|
|
|||
|
<EFBFBD><EFBFBD>*<2A>SCSI CD-ROM drivers.
|
|||
|
|
|||
|
|
|||
|
On the other hand, there are certain driver combinations that ONLY work as
|
|||
|
modules, especially combinations of two or more of the following group:
|
|||
|
|
|||
|
<EFBFBD><EFBFBD>*<2A>A Parallel Printer,
|
|||
|
|
|||
|
<EFBFBD><EFBFBD>*<2A>A Parallel Port drive, such as the IOMEGA ZipDrive or JazzDrive, or the
|
|||
|
BackPack CD-ROM drive, and
|
|||
|
|
|||
|
<EFBFBD><EFBFBD>*<2A>The PLIP Daemon.
|
|||
|
|
|||
|
|
|||
|
You will need to decide what you are compiling into the kernel, and what as
|
|||
|
modules, but should take the above points into consideration. The actual
|
|||
|
choices are made during the compilation, by the second of the following
|
|||
|
sequence of instructions:
|
|||
|
cd /usr/src/linux
|
|||
|
make menuconfig
|
|||
|
make dep clean modules modules_install zImage
|
|||
|
|
|||
|
|
|||
|
Having done that, the module dependencies need to be mapped out. This is done
|
|||
|
with the following command:
|
|||
|
depmod -a
|
|||
|
|
|||
|
|
|||
|
The new kernel now needs to be inserted in the boot chain. I am assuming the
|
|||
|
reader is using LILO for this purpose, since this is the only loader I have
|
|||
|
any experience with.
|
|||
|
|
|||
|
I recommend that one does NOT automatically insert the newly compiled kernel
|
|||
|
as the default Linux kernel since if it should fail, it is then extremely
|
|||
|
difficult to recover one's Linux setup without doing a complete
|
|||
|
reinstallation, which is not to be recommended. For this reason, I have the
|
|||
|
following entry in my /etc/lilo.conf file:
|
|||
|
image=/usr/src/linux/arch/i386/boot/zImage
|
|||
|
label=new
|
|||
|
alias=n
|
|||
|
read-only
|
|||
|
vga=ask
|
|||
|
optional
|
|||
|
|
|||
|
|
|||
|
This entry says that there is an OPTIONAL boot option (which will be ignored
|
|||
|
if the image in question does not exist) which boots the file /boot/newlinux
|
|||
|
if selected, and allows one to select the video mode it is to be booted in.
|
|||
|
|
|||
|
Assuming the existence of the above entry in /etc/lilo.conf the revised
|
|||
|
kernel is already correctly located at the end of compilation, and it can be
|
|||
|
installed via the following command:
|
|||
|
lilo
|
|||
|
|
|||
|
|
|||
|
Having done that, the reader needs to follow the further steps relevant to
|
|||
|
their selected distribution, as follows:
|
|||
|
-----------------------------------------------------------------------------
|
|||
|
|
|||
|
5.1. Configuring Debian or RedHat for Modules
|
|||
|
|
|||
|
Prior to carrying out the steps listed here, the steps listed in "Recompiling
|
|||
|
the Kernel for Modules" are assumed to have been carried out.
|
|||
|
|
|||
|
The Debian and RedHat distributions have identical boot procedures, so also
|
|||
|
have identical procedures for configuring modules into them.
|
|||
|
|
|||
|
1. Having logged in as root, use your favourite text editor to create a new
|
|||
|
file called /etc/rc.d/init.d/modules.init with the following contents
|
|||
|
therein:
|
|||
|
# Modules initialisation.
|
|||
|
#
|
|||
|
# Start up the module auto-loading daemon.
|
|||
|
/sbin/kerneld
|
|||
|
|
|||
|
# Mount all currently unmounted auto-mounted partitions.
|
|||
|
/sbin/mount -a
|
|||
|
|
|||
|
|
|||
|
2. Having created the above file, perform the following steps whilst logged
|
|||
|
on as root:
|
|||
|
cd /etc/rc.d
|
|||
|
chmod 755 init.d/*
|
|||
|
cd rc3.d
|
|||
|
ln -s ../init.d/modules.init 05modules.init
|
|||
|
|
|||
|
|
|||
|
|
|||
|
The system can now be rebooted, and on doing so, it will be found that
|
|||
|
modules are fully implemented
|
|||
|
-----------------------------------------------------------------------------
|
|||
|
|
|||
|
5.2. Configuring Slackware for Modules
|
|||
|
|
|||
|
Prior to carrying out the steps listed here, the steps listed in "Recompiling
|
|||
|
the Kernel for Modules" are assumed to have been carried out.
|
|||
|
|
|||
|
The file /etc/rc.d/rc.M needs to be edited as follows:
|
|||
|
|
|||
|
1. Around line 18, there is a section reading as follows:
|
|||
|
# Screen blanks after 15 minutes idle time.
|
|||
|
/bin/setterm -blank 15
|
|||
|
|
|||
|
|
|||
|
Immediately after this, insert the following paragraph, with the usual
|
|||
|
blank lines either side of it:
|
|||
|
# Load the kernel module auto-loader.
|
|||
|
/sbin/kerneld
|
|||
|
|
|||
|
|
|||
|
2. About 12 lines further down is the following:
|
|||
|
# if there is no /etc/HOSTNAME, fall back on this default:
|
|||
|
|
|||
|
|
|||
|
Immediately prior to this, insert the following paragraph, again with the
|
|||
|
usual blank lines either side of it:
|
|||
|
# Mount remaining unmounted auto-mount drives.
|
|||
|
/sbin/mount -a
|
|||
|
|
|||
|
|
|||
|
|
|||
|
When those changes have been made, save the file.
|
|||
|
|
|||
|
No further modifications are required for Slackware.
|
|||
|
-----------------------------------------------------------------------------
|
|||
|
|
|||
|
5.3. Configuring Other Distributions for Modules
|
|||
|
|
|||
|
Prior to carrying out the steps listed here, the steps listed in "Recompiling
|
|||
|
the Kernel for Modules" are assumed to have been carried out.
|
|||
|
|
|||
|
The precise procedure for other distributions has not been ascertained, but
|
|||
|
is probably one of the above. To determine which one, display a directory of
|
|||
|
the contents of the /etc/rc.d directory, as follows:
|
|||
|
cd /etc/rc.d
|
|||
|
ls -l *.d rc.*
|
|||
|
|
|||
|
|
|||
|
From this resulting display, you can select one of the following three
|
|||
|
options:
|
|||
|
|
|||
|
1. If this list includes a directory named init.d and some directories with
|
|||
|
names matching rc?.d where the question mark is replaced by single
|
|||
|
digits, and does NOT include a file with the name rc.M, that distribution
|
|||
|
can be configured for modules by following the procedure listed under the
|
|||
|
title "Configuring Debian or RedHat for Modules".
|
|||
|
|
|||
|
2. If this list does not include a directory named init.d but includes a
|
|||
|
file named rc.M then that distribution can be configured for modules by
|
|||
|
following the procedure listed under the title "Configuring Slackware for
|
|||
|
Modules".
|
|||
|
|
|||
|
3. If this list matches neither of the above criteria, then the distribution
|
|||
|
has a boot script not covered by this HowTo. In that case, you are
|
|||
|
invited to contact the author of this document for advice.
|
|||
|
|
|||
|
|