source: chapter08/kernel.xml@ f134e88

10.0 10.0-rc1 10.1 10.1-rc1 11.0 11.0-rc1 11.0-rc2 11.0-rc3 11.1 11.1-rc1 11.2 11.2-rc1 11.3 11.3-rc1 12.0 12.0-rc1 12.1 12.1-rc1 6.1 6.1.1 6.3 6.4 6.5 6.6 6.7 6.8 7.0 7.1 7.2 7.3 7.4 7.5 7.5-systemd 7.6 7.6-systemd 7.7 7.7-systemd 7.8 7.8-systemd 7.9 7.9-systemd 8.0 8.1 8.2 8.3 8.4 9.0 9.1 arm bdubbs/gcc13 ml-11.0 multilib renodr/libudev-from-systemd s6-init trunk xry111/arm64 xry111/arm64-12.0 xry111/clfs-ng xry111/lfs-next xry111/loongarch xry111/loongarch-12.0 xry111/loongarch-12.1 xry111/mips64el xry111/pip3 xry111/rust-wip-20221008 xry111/update-glibc
Last change on this file since f134e88 was f134e88, checked in by Manuel Canales Esparcia <manuel@…>, 19 years ago

Re-added the link to BLFS for kernel configuration.

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

  • Property mode set to 100644
File size: 10.4 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>If, in <xref linkend="ch-scripts-console" role=","/> it was decided to
53compile the keymap into the kernel, issue the command below:</para>
54
55<screen><userinput>loadkeys -m /usr/share/kbd/keymaps/<replaceable>[path to keymap]</replaceable> &gt; \
56 drivers/char/defkeymap.c</userinput></screen>
57
58<para>For example, if using a Dutch keyboard, use
59<phrase
60condition="html"><filename>/usr/share/kbd/keymaps/i386/qwerty/nl.map.gz</filename></phrase><phrase
61condition="pdf"><filename>/usr/share/kbd/keymaps/i386/
62qwerty/nl.map.gz</filename></phrase>.</para>
63
64<para>Configure the kernel via a menu-driven interface BLFS has some
65information regarding particular kernel configuration requirements of
66packages outside of LFS at <ulink
67url="&blfs-root;view/svn/longindex.html#kernel-config-index"/>:</para>
68
69<screen><userinput>make menuconfig</userinput></screen>
70
71<para>Alternatively, <command>make oldconfig</command> may be more appropriate in some
72situations. See the <filename>README</filename> file for more
73information.</para>
74
75<note><para>When configuring the kernel, be sure to enable the
76<quote>Support for hot-pluggable devices</quote> option under the
77<quote>General Setup</quote> menu. This enables hotplug events that
78are used by <command>udev</command> to populate the <filename
79class="directory">/dev</filename> directory with device
80nodes.</para></note>
81
82<para>If desired, skip kernel configuration by copying the kernel
83config file, <filename>.config</filename>, from the host system
84(assuming it is available) to the unpacked <filename
85class="directory">linux-&linux-version;</filename> directory. However,
86we do not recommend this option. It is often better to explore all the
87configuration menus and create the kernel configuration from
88scratch.</para>
89
90<para>For POSIX-shared memory support, ensure that the kernel config
91option <quote>Virtual memory file system support</quote> is enabled.
92It resides within the <quote>File systems</quote> menu and is normally
93enabled by default.</para>
94
95<para>LFS bootscripts make the assumption that either both
96<quote>Support for Host-side USB</quote> and <quote>USB device
97filesystem</quote> have been compiled directly into the kernel, or
98that neither is compiled at all. Bootscripts will not work properly
99if it is a module (usbcore.ko).</para>
100
101<note><para>NPTL requires the kernel to be compiled with GCC 3.x, in
102this case &gcc-version;. Compiling with 2.95.x is known to cause failures in
103the glibc test suite, so it is not recommended to compile the kernel
104with gcc 2.95.x.</para></note>
105
106<para>Compile the kernel image and modules:</para>
107
108<screen><userinput>make</userinput></screen>
109
110<para>If using kernel modules, an
111<filename>/etc/modprobe.conf</filename> file may be needed.
112Information pertaining to modules and kernel configuration is
113located in the kernel documentation in the <filename
114class="directory">linux-&linux-version;/Documentation</filename>
115directory. The <emphasis>modprobe.conf</emphasis> man page may also be
116of interest.</para>
117
118<para>Be very careful when reading other documentation because it
119usually applies to 2.4.x kernels only. As far as we know, kernel
120configuration issues specific to Hotplug and Udev are not documented.
121The problem is that Udev will create a device node only if Hotplug or
122a user-written script inserts the corresponding module into the
123kernel, and not all modules are detectable by Hotplug. Note that
124statements like the one below in the
125<filename>/etc/modprobe.conf</filename> file do not work with
126Udev:</para>
127
128<para><screen>alias char-major-XXX some-module</screen></para>
129
130<para>Because of the complications with Hotplug, Udev, and modules, we
131strongly recommend starting with a completely non-modular kernel
132configuration, especially if this is the first time using Udev.</para>
133
134<para>Install the modules, if the kernel configuration uses them:</para>
135
136<screen><userinput>make modules_install</userinput></screen>
137
138<para>If there are many modules and very little space, consider
139stripping and compressing the modules. For most users, such
140compression is not worth the time, but if the system is pressed for
141space, see <ulink
142url="http://www.linux-mips.org/archives/linux-mips/2002-04/msg00031.html"/>.</para>
143
144<para>After kernel compilation is complete, additional steps are
145required to complete the installation. Some files need to be copied to
146the <filename class="directory">/boot</filename> directory.</para>
147
148<para>The path to the kernel image may vary depending on the platform
149being used. Issue the following command to install the kernel:</para>
150
151<screen><userinput>cp arch/i386/boot/bzImage /boot/lfskernel-&linux-version;</userinput></screen>
152
153<para><filename>System.map</filename> is a symbol file for the kernel.
154It maps the function entry points of every function in the kernel API,
155as well as the addresses of the kernel data structures for the running
156kernel. Issue the following command to install the map file:</para>
157
158<screen><userinput>cp System.map /boot/System.map-&linux-version;</userinput></screen>
159
160<para>The kernel configuration file <filename>.config</filename>
161produced by the <command>make menuconfig</command> step
162above contains all the configuration selections for the kernel
163that was just compiled. It is a good idea to keep this file for future
164reference:</para>
165
166<screen><userinput>cp .config /boot/config-&linux-version;</userinput></screen>
167
168<para>It is important to note that the files in the kernel source
169directory are not owned by <emphasis>root</emphasis>. Whenever a
170package is unpacked as user <emphasis>root</emphasis> (like we did
171inside chroot), the files have the user and group IDs of whatever
172they were on the packager's computer. This is usually not a problem
173for any other package to be installed because the source tree is
174removed after the installation. However, the Linux source tree is
175often retained for a long time. Because of this, there is a chance
176that whatever user ID the packager used will be assigned to somebody
177on the machine. That person would then have write access to the kernel
178source.</para>
179
180<para>If the kernel source tree is going to be retained, run
181<command>chown -R 0:0</command> on the <filename
182class="directory">linux-&linux-version;</filename> directory to ensure
183all files are owned by user <emphasis>root</emphasis>.</para>
184
185<warning><para>Some kernel documentation recommends creating a symlink from
186<filename class="symlink">/usr/src/linux</filename> pointing to the kernel
187source directory. This is specific to kernels prior to the 2.6 series and
188<emphasis>must not</emphasis> be created on an LFS system as it can cause
189problems for packages you may wish to build once your base LFS system is
190complete.</para></warning>
191
192</sect2>
193
194
195<sect2 id="contents-kernel" role="content"><title>Contents of Linux</title>
196
197<segmentedlist>
198<segtitle>Installed files</segtitle>
199<seglistitem><seg>kernel, kernel headers,
200and System.map</seg></seglistitem>
201</segmentedlist>
202
203<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead>
204<?dbfo list-presentation="list"?>
205
206<varlistentry id="kernel">
207<term><filename>kernel</filename></term>
208<listitem>
209<para>The engine of the Linux system. When turning on the computer,
210the kernel is the first part of the operating system that gets loaded.
211It detects and initializes all components of the computer's hardware,
212then makes these components available as a tree of files to the
213software and turns a single CPU into a multitasking machine capable
214of running scores of programs seemingly at the same time.</para>
215<indexterm zone="ch-bootable-kernel kernel"><primary sortas="b-kernel">kernel</primary></indexterm>
216</listitem>
217</varlistentry>
218
219<varlistentry id="kernel-headers">
220<term><filename>kernel headers</filename></term>
221<listitem>
222<para>Defines the interface to the services that the kernel provides.
223The headers in the system's <filename
224class="directory">include</filename> directory should
225<emphasis>always</emphasis> be the ones against which Glibc was
226compiled and therefore, should <emphasis>not</emphasis> be replaced
227when upgrading the kernel.</para>
228<indexterm zone="ch-bootable-kernel kernel-headers"><primary sortas="e-kernel-headers">kernel headers</primary></indexterm>
229</listitem>
230</varlistentry>
231
232<varlistentry id="System.map">
233<term><filename>System.map</filename></term>
234<listitem>
235<para>A list of addresses and symbols; it maps the entry points and
236addresses of all the functions and data structures in the
237kernel</para>
238<indexterm zone="ch-bootable-kernel System.map"><primary sortas="e-/boot/System.map">/boot/System.map</primary></indexterm>
239</listitem>
240</varlistentry>
241</variablelist>
242
243</sect2>
244
245</sect1>
246
Note: See TracBrowser for help on using the repository browser.