8.3.1. Installation of the kernel
Building the kernel involves a few steps—configuration,
compilation, and installation. Read the README file in the kernel source tree for alternate
methods to the way this book configures the kernel.
Prepare for compilation by running the following command:
make mrproper
This ensures that the kernel tree is absolutely clean. The kernel
team recommends that this command be issued prior to each kernel
compilation. Do not rely on the source tree being clean after
un-tarring.
Also, ensure that the kernel does not attempt to pass hotplugging
events to userspace until userspace specifies that it is ready:
sed -i 's@/sbin/hotplug@/bin/true@' kernel/kmod.c
If, in Section 7.6,
“Configuring the Linux Console,” it was decided to
compile the keymap into the kernel, issue the command below:
loadkeys -m /usr/share/kbd/keymaps/[path to keymap] > \
drivers/char/defkeymap.c
For example, if using a Dutch keyboard, use /usr/share/kbd/keymaps/i386/qwerty/nl.map.gz.
Configure the kernel via a menu-driven interface:
make menuconfig
Alternatively, make oldconfig
may be more appropriate in some situations. See the README file for more information.
Note
When configuring the kernel, be sure to enable the
“Support for hot-pluggable
devices” option under the “General Setup” menu. This enables hotplug
events that are used by udev to populate the /dev directory with device nodes.
If desired, skip kernel configuration by copying the kernel config
file, .config, from the host system
(assuming it is available) to the unpacked linux-2.6.8.1 directory. However, we do not
recommend this option. It is often better to explore all the
configuration menus and create the kernel configuration from
scratch.
For POSIX-shared memory support, ensure that the kernel config
option “Virtual memory file system
support” is enabled. It resides within the
“File systems” menu and is
normally enabled by default.
LFS bootscripts make the assumption that either both
“Support for Host-side USB”
and “USB device filesystem”
have been compiled directly into the kernel, or that neither is
compiled at all. Bootscripts will not work properly if it is a
module (usbcore.ko).
Note
NPTL requires the kernel to be compiled with GCC 3.x, in this
case 3.4.1. Compiling with 2.95.x is known to cause failures in
the glibc test suite, so it is not recommended to compile the
kernel with gcc 2.95.x.
Compile the kernel image and modules:
make
If using kernel modules, an /etc/modprobe.conf file may be needed. Information
pertaining to modules and kernel configuration is located in the
kernel documentation in the linux-2.6.8.1/Documentation directory. The
modprobe.conf man page may
also be of interest.
Be very careful when reading other documentation because it usually
applies to 2.4.x kernels only. As far as we know, kernel
configuration issues specific to Hotplug and Udev are not
documented. The problem is that Udev will create a device node only
if Hotplug or a user-written script inserts the corresponding
module into the kernel, and not all modules are detectable by
Hotplug. Note that statements like the one below in the /etc/modprobe.conf file do not work with Udev:
alias char-major-XXX some-module
Because of the complications with Hotplug, Udev, and modules, we
strongly recommend starting with a completely non-modular kernel
configuration, especially if this is the first time using Udev.
Install the modules, if the kernel configuration uses them:
make modules_install
If there are many modules and very little space, consider stripping
and compressing the modules. For most users, such compression is
not worth the time, but if the system is pressed for space, see
http://www.linux-mips.org/archives/linux-mips/2002-04/msg00031.html.
After kernel compilation is complete, additional steps are required
to complete the installation. Some files need to be copied to the
/boot directory.
The path to the kernel image may vary depending on the platform
being used. Issue the following command to install the kernel:
cp arch/i386/boot/bzImage /boot/lfskernel-2.6.8.1
System.map is a symbol file for the
kernel. It maps the function entry points of every function in the
kernel API, as well as the addresses of the kernel data structures
for the running kernel. Issue the following command to install the
map file:
cp System.map /boot/System.map-2.6.8.1
The kernel configuration file .config
produced by the make menuconfig
step above contains all the configuration selections for the kernel
that was just compiled. It is a good idea to keep this file for
future reference:
cp .config /boot/config-2.6.8.1
It is important to note that the files in the kernel source
directory are not owned by root. Whenever a package is unpacked as
user root (like we did
inside chroot), the files have the user and group IDs of whatever
they were on the packager's computer. This is usually not a problem
for any other package to be installed because the source tree is
removed after the installation. However, the Linux source tree is
often retained for a long time. Because of this, there is a chance
that whatever user ID the packager used will be assigned to
somebody on the machine. That person would then have write access
to the kernel source.
If the kernel source tree is going to retained, run chown -R 0:0 on the linux-2.6.8.1 directory to ensure all files are
owned by user root.
Installed files: kernel, kernel headers, and System.map
Short Descriptions
-
kernel
-
The engine of the Linux system. When turning on the computer,
the kernel is the first part of the operating system that
gets loaded. It detects and initializes all components of the
computer's hardware, then makes these components available as
a tree of files to the software and turns a single CPU into a
multitasking machine capable of running scores of programs
seemingly at the same time.
-
kernel headers
-
Defines the interface to the services that the kernel
provides. The headers in the system's include directory should always be the ones against which
Glibc was compiled and therefore, should not be replaced when upgrading the
kernel.
-
System.map
-
A list of addresses and symbols; it maps the entry points and
addresses of all the functions and data structures in the
kernel