source: chapter08/kernel.xml@ 8ccf66e1

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.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 8ccf66e1 was 8ccf66e1, checked in by Manuel Canales Esparcia <manuel@…>, 19 years ago

Fixed an indexentry on my last commit.

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

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