The Linux Kernel
What Does the Kernel Do?
You've probably heard people talking about compiling the kernel or
building a kernel, but what exactly is the kernel and what does it do?
The kernel is the center of your computer. It is the foundation for the
entire operating system. The kernel acts as a bridge between the
hardware and the applications. This means that the kernel is (usually)
the sole piece of software responsible for ordering around the hardware
components of your computer. It is the kernel that instructs the hard
drive to search for a certain data stream. It is the kernel that
instructs your network card to transmit rapid changes in voltage. The
kernel also listens to hardware as well. When the network card detects
a remote computer sending information, it forwards that information to
the kernel. This makes the kernel both the single most important piece
of software on your computer and the most complex.
Working with Modules
The complexity of a modern linux kernel is staggering. The source code
for the kernel weighs in at nearly 400MB uncompressed. There are
thousands of developers, hundreds of options, and if everything were
built together, the kernel would soon pass 100MB in size itself. In
order to keep the size of the kernel down (as well as the amount of RAM
needed for the kernel), most of the kernel options are built as
modules. You can think of these modules as device drivers which can be
inserted or removed from a running kernel at will. In truth, many of
them aren't device drivers at all, but contain support for things such
as network protocols, security measures, and even filesystems. In
short, nearly any piece of the linux kernel can be built as a loadable
module.
It's important to realize that Slackware will automatically handle
loading most modules for you. When your system boots,
udevd(8) is started and begins to probe your
system's hardware. For each device it finds, it loads the proper module
and created a device node in /dev. This usually
means that you will not need to load any modules in order to use your
computer, but occasionally this is necessary.
So what modules are currently loaded on your computer and how do we
load and unload them? Fortunately we have a full suite of tools for
handling this. As you might have guessed, the tool for listing modules
is lsmod(8).
darkstar:~# lsmod
Module Size Used by
nls_utf8 1952 1
cifs 240600 2
i915 168584 2
drm 168128 3 i915
i2c_algo_bit 6468 1 i915
tun 12740 1
... many more lines ommitted ...
In addition to showing you what modules are loaded, it displays the
size of each module and tells you what other modules are using it.
There are two applications for loading modules:
insmod(8) and
modprobe(8). Both will load modules and
report any errors (such as loading a module for a device that isn't
present in your system), but modprobe is
preferred because it can load any module dependencies. Using either is
straight-forward.
darkstar:~# insmod ext3
darkstar:~# modprobe ext4
darkstar:~# lsmod | grep ext
ext4 239928 1
jbd2 59088 1 ext4
crc16 1984 1 ext4
ext3 139408 0
jbd 48520 1 ext3
mbcache 8068 2 ext4,ext3
Removing modules can be a tricky process, and once again we have two
programs for removing them: rmmod(8) and
modprobe. In order to remove a module with
modprobe, you'll need to use the -r argument.
darkstar:~# rmmod ext3
darkstar:~# modprobe -r ext4
darkstar:~# lsmod | grep ext
Compiling A Kernel and Why to do So
Most Slackware users will never need to compile a kernel. The huge and
generic kernels contain virtually all the support you will need.
However, some users may need to compile a kernel. If your computer
contains bleeding edge hardware, a newer kernel may offer improved
support. Sometimes a kernel patch my be available that corrects a
problem you are experiencing. In these cases a kernel compile is
probably warranted.