source: chapter08/kernel.xml@ d6c28f96

6.1 6.1.1
Last change on this file since d6c28f96 was d6c28f96, checked in by Archaic <archaic@…>, 19 years ago

Merged some tag/wording changes from trunk (r6219-r6221).

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

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