summaryrefslogtreecommitdiffstats
path: root/chapter_18.xml
blob: 8f7b8a86798bd160a4e903ad6fa11363f7ff721b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
<?xml version="1.0"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
  "/usr/share/xml/docbook/xml-dtd-4.5/docbookx.dtd">

<chapter>
<title>The Linux Kernel</title>

<section>
<title>What Does the Kernel Do?</title>

<para>
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.
</para>

</section>

<section>
<title>Working with Modules</title>

<para>
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.
</para>

<para>
It's important to realize that Slackware will automatically handle
loading most modules for you. When your system boots,
<application>udevd</application>(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 <filename>/dev</filename>. This usually
means that you will not need to load any modules in order to use your
computer, but occasionally this is necessary.
</para>

<para>
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 <application>lsmod</application>(8).
</para>

<screen><prompt>darkstar:~# </prompt><userinput>lsmod</userinput>
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 ...
</screen>

<para>
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.
</para>

<para>
There are two applications for loading modules:
<application>insmod</application>(8) and
<application>modprobe</application>(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 <application>modprobe</application> is
preferred because it can load any module dependencies. Using either is
straight-forward.
</para>

<screen><prompt>darkstar:~# </prompt><userinput>insmod ext3</userinput>
<prompt>darkstar:~# </prompt><userinput>modprobe ext4</userinput>
<prompt>darkstar:~# </prompt><userinput>lsmod | grep ext</userinput>
ext4                  239928  1 
jbd2                   59088  1 ext4
crc16                   1984  1 ext4
ext3                  139408  0 
jbd                    48520  1 ext3
mbcache                 8068  2 ext4,ext3
</screen>

<para>
Removing modules can be a tricky process, and once again we have two
programs for removing them: <application>rmmod</application>(8) and
<application>modprobe</application>.  In order to remove a module with
modprobe, you'll need to use the <arg>-r</arg> argument.
</para>

<screen><prompt>darkstar:~# </prompt><userinput>rmmod ext3</userinput>
<prompt>darkstar:~# </prompt><userinput>modprobe -r ext4</userinput>
<prompt>darkstar:~# </prompt><userinput>lsmod | grep ext</userinput>
</screen>

</section>

<section>
<title>Compiling A Kernel and Why to do So</title>

<para>
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.
</para>

</section>

</chapter>