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:

On the other hand, there are certain driver combinations that ONLY work as modules, especially combinations of two or more of the following group:

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.