source: chapter08/kernel.xml@ 1609da8

Last change on this file since 1609da8 was 1609da8, checked in by Matthew Burgess <matthew@…>, 19 years ago

Upgraded to DocBook 4.4 DTD

git-svn-id: http://svn.linuxfromscratch.org/LFS/branches/testing/BOOK@4604 4aa44e1e-78dd-0310-a6d2-fbcd4c07a689

  • Property mode set to 100644
File size: 10.5 KB
Line 
1<?xml version="1.0" encoding="ISO-8859-1"?>
2<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
3 <!ENTITY % general-entities SYSTEM "../general.ent">
4 %general-entities;
5]>
6<sect1 id="ch-bootable-kernel" role="wrap">
7<title>Linux-&linux-version;</title>
8<?dbhtml filename="kernel.html"?>
9
10<indexterm zone="ch-bootable-kernel"><primary sortas="a-Linux">Linux</primary></indexterm>
11
12<sect2 role="package"><title/>
13<para>The Linux package contains the kernel and the header files.</para>
14
15<segmentedlist>
16<segtitle>&buildtime;</segtitle>
17<segtitle>&diskspace;</segtitle>
18<seglistitem><seg>4.20 SBU</seg>
19<seg>181 MB</seg></seglistitem>
20</segmentedlist>
21
22<segmentedlist>
23<segtitle>Linux installation depends on</segtitle>
24<seglistitem><seg>Bash, Binutils, Coreutils, Findutils,
25GCC, Glibc, Grep, Gzip, Make, Modutils, Perl, and Sed</seg></seglistitem>
26</segmentedlist>
27</sect2>
28
29<sect2 role="installation">
30<title>Installation of the kernel</title>
31
32<para>Building the kernel involves a few steps&mdash;configuration,
33compilation, and installation. Read the <filename>README</filename>
34file in the kernel source tree for alternate methods to the way this
35book configures the kernel.</para>
36
37<para>Kernel version 2.6.10 has a security vulnerability that will allow user
38processes to gain root privledges upon loading of a kernel module. See:
39<ulink url="http://www.uwsg.iu.edu/hypermail/linux/kernel/0412.3/0679.html"/> for more information. The following patch fixes this problem:</para>
40
41<screen><userinput>patch -Np1 -i ../linux-&linux-version;-security_fix-1.patch</userinput></screen>
42
43<para>Prepare for compilation by running the following command:</para>
44
45<screen><userinput>make mrproper</userinput></screen>
46
47<para>This ensures that the kernel tree is absolutely clean. The
48kernel team recommends that this command be issued prior to each
49kernel compilation. Do not rely on the source tree being clean after
50un-tarring.</para>
51
52<para>Also, ensure that the kernel does not attempt to pass
53hotplugging events to userspace until userspace specifies that it is
54ready:</para>
55
56<screen><userinput>sed -i 's@/sbin/hotplug@/bin/true@' kernel/kmod.c</userinput></screen>
57
58<para>If, in <xref linkend="ch-scripts-console" role=","/> it was decided to
59compile the keymap into the kernel, issue the command below:</para>
60
61<screen><userinput>loadkeys -m /usr/share/kbd/keymaps/<replaceable>[path to keymap]</replaceable> &gt; \
62 drivers/char/defkeymap.c</userinput></screen>
63
64<para>For example, if using a Dutch keyboard, use
65<phrase
66condition="html"><filename>/usr/share/kbd/keymaps/i386/qwerty/nl.map.gz</filename></phrase><phrase
67condition="pdf"><filename>/usr/share/kbd/keymaps/i386/
68qwerty/nl.map.gz</filename></phrase>.</para>
69
70<para>Configure the kernel via a menu-driven interface:</para>
71
72<screen><userinput>make menuconfig</userinput></screen>
73
74<para>Alternatively, <command>make oldconfig</command> may be more appropriate in some
75situations. See the <filename>README</filename> file for more
76information.</para>
77
78<note><para>When configuring the kernel, be sure to enable the
79<quote>Support for hot-pluggable devices</quote> option under the
80<quote>General Setup</quote> menu. This enables hotplug events that
81are used by <command>udev</command> to populate the <filename
82class="directory">/dev</filename> directory with device
83nodes.</para></note>
84
85<para>If desired, skip kernel configuration by copying the kernel
86config file, <filename>.config</filename>, from the host system
87(assuming it is available) to the unpacked <filename
88class="directory">linux-&linux-version;</filename> directory. However,
89we do not recommend this option. It is often better to explore all the
90configuration menus and create the kernel configuration from
91scratch.</para>
92
93<para>For POSIX-shared memory support, ensure that the kernel config
94option <quote>Virtual memory file system support</quote> is enabled.
95It resides within the <quote>File systems</quote> menu and is normally
96enabled by default.</para>
97
98<para>LFS bootscripts make the assumption that either both
99<quote>Support for Host-side USB</quote> and <quote>USB device
100filesystem</quote> have been compiled directly into the kernel, or
101that neither is compiled at all. Bootscripts will not work properly
102if it is a module (usbcore.ko).</para>
103
104<note><para>NPTL requires the kernel to be compiled with GCC 3.x, in
105this case &gcc-version;. Compiling with 2.95.x is known to cause failures in
106the glibc test suite, so it is not recommended to compile the kernel
107with gcc 2.95.x.</para></note>
108
109<para>Compile the kernel image and modules:</para>
110
111<screen><userinput>make</userinput></screen>
112
113<para>If using kernel modules, an
114<filename>/etc/modprobe.conf</filename> file may be needed.
115Information pertaining to modules and kernel configuration is
116located in the kernel documentation in the <filename
117class="directory">linux-&linux-version;/Documentation</filename>
118directory. The <emphasis>modprobe.conf</emphasis> man page may also be
119of interest.</para>
120
121<para>Be very careful when reading other documentation because it
122usually applies to 2.4.x kernels only. As far as we know, kernel
123configuration issues specific to Hotplug and Udev are not documented.
124The problem is that Udev will create a device node only if Hotplug or
125a user-written script inserts the corresponding module into the
126kernel, and not all modules are detectable by Hotplug. Note that
127statements like the one below in the
128<filename>/etc/modprobe.conf</filename> file do not work with
129Udev:</para>
130
131<para><screen>alias char-major-XXX some-module</screen></para>
132
133<para>Because of the complications with Hotplug, Udev, and modules, we
134strongly recommend starting with a completely non-modular kernel
135configuration, especially if this is the first time using Udev.</para>
136
137<para>Install the modules, if the kernel configuration uses them:</para>
138
139<screen><userinput>make modules_install</userinput></screen>
140
141<para>If there are many modules and very little space, consider
142stripping and compressing the modules. For most users, such
143compression is not worth the time, but if the system is pressed for
144space, see <ulink
145url="http://www.linux-mips.org/archives/linux-mips/2002-04/msg00031.html"/>.</para>
146
147<para>After kernel compilation is complete, additional steps are
148required to complete the installation. Some files need to be copied to
149the <filename class="directory">/boot</filename> directory.</para>
150
151<para>The path to the kernel image may vary depending on the platform
152being used. Issue the following command to install the kernel:</para>
153
154<screen><userinput>cp arch/i386/boot/bzImage /boot/lfskernel-&linux-version;</userinput></screen>
155
156<para><filename>System.map</filename> is a symbol file for the kernel.
157It maps the function entry points of every function in the kernel API,
158as well as the addresses of the kernel data structures for the running
159kernel. Issue the following command to install the map file:</para>
160
161<screen><userinput>cp System.map /boot/System.map-&linux-version;</userinput></screen>
162
163<para>The kernel configuration file <filename>.config</filename>
164produced by the <command>make menuconfig</command> step
165above contains all the configuration selections for the kernel
166that was just compiled. It is a good idea to keep this file for future
167reference:</para>
168
169<screen><userinput>cp .config /boot/config-&linux-version;</userinput></screen>
170
171<para>It is important to note that the files in the kernel source
172directory are not owned by <emphasis>root</emphasis>. Whenever a
173package is unpacked as user <emphasis>root</emphasis> (like we did
174inside chroot), the files have the user and group IDs of whatever
175they were on the packager's computer. This is usually not a problem
176for any other package to be installed because the source tree is
177removed after the installation. However, the Linux source tree is
178often retained for a long time. Because of this, there is a chance
179that whatever user ID the packager used will be assigned to somebody
180on the machine. That person would then have write access to the kernel
181source.</para>
182
183<para>If the kernel source tree is going to be retained, run
184<command>chown -R 0:0</command> on the <filename
185class="directory">linux-&linux-version;</filename> directory to ensure
186all files are owned by user <emphasis>root</emphasis>.</para>
187
188<warning><para>Some kernel documentation recommends creating a symlink from
189<filename class="symlink">/usr/src/linux</filename> pointing to the kernel
190source directory. This is specific to kernels prior to the 2.6 series and
191<emphasis>must not</emphasis> be created on an LFS system as it can cause
192problems for packages you may wish to build once your base LFS system is
193complete.</para></warning>
194
195</sect2>
196
197
198<sect2 id="contents-kernel" role="content"><title>Contents of Linux</title>
199
200<segmentedlist>
201<segtitle>Installed files</segtitle>
202<seglistitem><seg>kernel, kernel headers,
203and System.map</seg></seglistitem>
204</segmentedlist>
205
206<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
207<?dbfo list-presentation="list"?>
208
209<varlistentry id="kernel">
210<term><filename>kernel</filename></term>
211<listitem>
212<para>The engine of the Linux system. When turning on the computer,
213the kernel is the first part of the operating system that gets loaded.
214It detects and initializes all components of the computer's hardware,
215then makes these components available as a tree of files to the
216software and turns a single CPU into a multitasking machine capable
217of running scores of programs seemingly at the same time.</para>
218<indexterm zone="ch-bootable-kernel kernel"><primary sortas="b-kernel">kernel</primary></indexterm>
219</listitem>
220</varlistentry>
221
222<varlistentry id="kernel-headers">
223<term><filename>kernel headers</filename></term>
224<listitem>
225<para>Defines the interface to the services that the kernel provides.
226The headers in the system's <filename
227class="directory">include</filename> directory should
228<emphasis>always</emphasis> be the ones against which Glibc was
229compiled and therefore, should <emphasis>not</emphasis> be replaced
230when upgrading the kernel.</para>
231<indexterm zone="ch-bootable-kernel kernel-headers"><primary sortas="e-kernel-headers">kernel headers</primary></indexterm>
232</listitem>
233</varlistentry>
234
235<varlistentry id="System.map">
236<term><filename>System.map</filename></term>
237<listitem>
238<para>A list of addresses and symbols; it maps the entry points and
239addresses of all the functions and data structures in the
240kernel</para>
241<indexterm zone="ch-bootable-kernel System.map"><primary sortas="e-/boot/System.map">/boot/System.map</primary></indexterm>
242</listitem>
243</varlistentry>
244</variablelist>
245
246</sect2>
247
248</sect1>
249
Note: See TracBrowser for help on using the repository browser.