aboutsummaryrefslogtreecommitdiffstats
path: root/chapter08/kernel.xml
blob: 542272c6323614801cd13397e91660c2a2869b60 (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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [
  <!ENTITY % general-entities SYSTEM "../general.ent">
  %general-entities;
]>
<sect1 id="ch-bootable-kernel" xreflabel="Linux">
<title>Linux-&linux-version;</title>
<?dbhtml filename="kernel.html"?>

<indexterm zone="ch-bootable-kernel"><primary sortas="a-Linux">Linux</primary></indexterm>

<para>The Linux package contains the kernel and the header files.</para>

<screen>&buildtime; All default options: 4.20 SBU
&diskspace; All default options: 181 MB</screen>

<para>Linux installation depends on: Bash, Binutils, Coreutils, Findutils,
GCC, Glibc, Grep, Gzip, Make, Modutils, Perl, Sed.</para>



<sect2>
<title>Installation of the kernel</title>

<para>Building the kernel involves a few steps: configuration, compilation, and
installation. If you don't like the way this book configures the kernel, view
the <filename>README</filename> file in the kernel source tree for alternative
methods.</para>

<para>Prepare for compilation by running the following command:</para>

<screen><userinput>make mrproper</userinput></screen>

<para>This ensures that the kernel tree is absolutely clean. The kernel team
recommends that this command be issued prior to <emphasis>each</emphasis>
kernel compilation. You shouldn't rely on the source tree being clean after
un-tarring.</para>

<para>Configure the kernel via a menu-driven interface:</para>

<screen><userinput>make menuconfig</userinput></screen>

<para><userinput>make oldconfig</userinput> may be more appropriate in some
situations. See the <filename>README</filename> file for more
information.</para>

<para>If you wish, you may skip kernel configuration by simply copying the
kernel config file, <filename>.config</filename>, from your host system
(assuming it is available) to the unpacked <filename class="directory">linux-&linux-version;</filename>
directory. However, we
don't recommend this option. You're much better off exploring all the
configuration menus and creating your own kernel configuration from
scratch.</para>

<para>For POSIX shared memory support, ensure that the kernel config option
<quote>Virtual memory file system support</quote> is enabled. It resides within
the <quote>File systems</quote> menu and is normally enabled by default.</para>

<para>Verify dependencies and create dependency information files:</para>

<screen><userinput>make CC=/opt/gcc-2.95.3/bin/gcc dep</userinput></screen>

<para>Compile the kernel image:</para>

<screen><userinput>make CC=/opt/gcc-2.95.3/bin/gcc bzImage</userinput></screen>

<para>Compile the drivers which have been configured as modules:</para>

<screen><userinput>make CC=/opt/gcc-2.95.3/bin/gcc modules</userinput></screen>

<para>If you intend to use kernel modules, you will need an
<filename>/etc/modules.conf</filename> file. Information pertaining
to modules and to kernel configuration in general may be found in the
kernel documentation, which is found in the
<filename>linux-&linux-version;/Documentation</filename> directory. The
modules.conf man page and the kernel HOWTO at
<ulink url="http://www.tldp.org/HOWTO/Kernel-HOWTO.html"/> may also be of
interest to you.</para>

<para>Install the modules:</para>

<screen><userinput>make CC=/opt/gcc-2.95.3/bin/gcc modules_install</userinput></screen>

<para>If you have a lot of modules and very little space, you may want to
consider stripping and compressing the modules. For most people such compression
isn't worth the trouble, but if you're really pressed for space, then have a look at
<ulink url="http://www.linux-mips.org/archives/linux-mips/2002-04/msg00031.html"/>.</para>

<para>As nothing is complete without documentation, build the manual pages
that come with the kernel:</para>

<screen><userinput>make mandocs</userinput></screen>

<para>And install these pages:</para>

<screen><userinput>cp -a Documentation/man /usr/share/man/man9</userinput></screen>

<para>Kernel compilation has finished but more steps are required to complete
the installation. Some files need to be copied to the <filename>/boot</filename>
directory.</para>

<para>The path to the kernel image may vary depending on the platform you're
using. Issue the following command to install the kernel:</para>

<screen><userinput>cp arch/i386/boot/bzImage /boot/lfskernel</userinput></screen>

<para><filename>System.map</filename> is a symbol file for the kernel. It maps
the function entry points of every function in the kernel API (Application Programming Interface), as well as the
addresses of the kernel data structures for the running kernel. Issue the
following command to install the map file:</para>

<screen><userinput>cp System.map /boot</userinput></screen>

<para><filename>.config</filename> is the kernel configuration file that was
produced by the <command>make menuconfig</command> step above. It contains all
the config selections for the kernel that was just compiled. It's a good idea
to keep this file for future reference:</para>

<screen><userinput>cp .config /boot/config-lfskernel</userinput></screen>

<para>It is important to note that the files in the kernel source directory are
not owned by <emphasis>root</emphasis>. Whenever you unpack a package as user
<emphasis>root</emphasis> (like we did here inside chroot), the files end up
having the user and group IDs of whatever they were on the packager's computer.
This is usually not a problem for any other package you install because you
remove the source tree after the installation. But the Linux source tree is
often kept around for a long time, so there's a chance that whatever user ID
the packager used will be assigned to somebody on your machine and then that
person would have write access to the kernel source.</para>

<para>If you are going to keep the kernel source tree around, you may want to
run <userinput>chown -R 0:0</userinput> on the
<filename>linux-&linux-version;</filename> directory to ensure all files are
owned by user <emphasis>root</emphasis>.</para>

</sect2>


<sect2 id="contents-kernel"><title>Contents of Linux</title>

<para><emphasis>Installed files</emphasis>: the kernel, the kernel headers,
and the System.map</para>

</sect2>

<sect2><title>Short descriptions</title>

<indexterm zone="ch-bootable-kernel kernel"><primary sortas="b-kernel">kernel</primary></indexterm>
<para id="kernel">The <emphasis>kernel</emphasis> is the engine of your GNU/Linux system.
When switching on your box, the kernel is the first part of your operating
system that gets loaded. It detects and initializes all the components of your
computer's hardware, then makes these components available as a tree of files
to the software, and turns a single CPU into a multi-tasking machine capable
of running scores of programs seemingly at the same time.</para>

<indexterm zone="ch-bootable-kernel kernel-headers"><primary sortas="e-kernel-headers">kernel headers</primary></indexterm>
<para id="kernel-headers">The <emphasis>kernel headers</emphasis> define the interface to the
services that the kernel provides. The headers in your system's
<filename>include</filename> directory should <emphasis>always</emphasis> be
the ones against which Glibc was compiled and should therefore
<emphasis>not</emphasis> be replaced when upgrading the kernel.</para>

<indexterm zone="ch-bootable-kernel System.map"><primary sortas="e-/boot/System.map">/boot/System.map</primary></indexterm>
<para id="System.map">The <filename>System.map</filename> file is a list of addresses and
symbols. It maps the entry points and addresses of all the functions and data
structures in the kernel.</para>

</sect2>



</sect1>