source: chapter08/kernel.xml@ 4b59d59

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 4b59d59 was 4b59d59, checked in by Archaic <archaic@…>, 19 years ago

Several minor wording changes in chapters 8 and 9 (matt). Also removed the paragraph about compressing kernel modules.

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

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