source: chapter08/kernel.xml@ e068aa8

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 e068aa8 was 0c012ac, checked in by Manuel Canales Esparcia <manuel@…>, 20 years ago

Fixed the identation of /etc/fstab and some tagins regresions.

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

  • Property mode set to 100644
File size: 9.8 KB
Line 
1<?xml version="1.0" encoding="ISO-8859-1"?>
2<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [
3 <!ENTITY % general-entities SYSTEM "../general.ent">
4 %general-entities;
5]>
6<sect1 id="ch-bootable-kernel" xreflabel="Linux" 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>All default options: 4.20 SBU</seg>
19<seg>All default options: 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, 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: configuration, compilation, and
33installation. If you don't like the way this book configures the kernel, view
34the <filename>README</filename> file in the kernel source tree for alternative
35methods.</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 kernel team
42recommends that this command be issued prior to <emphasis>each</emphasis>
43kernel compilation. You shouldn't rely on the source tree being clean after
44un-tarring.</para>
45
46<para>Also, ensure that the kernel does not attempt to pass hotplugging events
47to userspace until userspace specifies that it is ready:</para>
48
49<screen><userinput>sed -i 's@/sbin/hotplug@/bin/true@' kernel/kmod.c</userinput></screen>
50
51<para>If, in <xref linkend="ch-scripts-console"/>, you decided you want
52to compile the keymap into the kernel, issue the command below:</para>
53
54<screen><userinput>loadkeys -m /usr/share/kbd/keymaps/<replaceable>[path to keymap]</replaceable> &gt; \
55 <replaceable>[unpacked sources dir]</replaceable>/linux-&linux-version;/drivers/char/defkeymap.c</userinput></screen>
56
57<para>For example, if you have a Dutch keyboard, you would use
58<filename>/usr/share/kbd/keymaps/i386/qwerty/nl.map.gz</filename>.</para>
59
60<para>Configure the kernel via a menu-driven interface:</para>
61
62<screen><userinput>make menuconfig</userinput></screen>
63
64<para><command>make oldconfig</command> may be more appropriate in some
65situations. See the <filename>README</filename> file for more
66information.</para>
67
68<para>If you wish, you may skip kernel configuration by simply copying the
69kernel config file, <filename>.config</filename>, from your host system
70(assuming it is available) to the unpacked <filename class="directory">linux-&linux-version;</filename>
71directory. However, we
72don't recommend this option. You're much better off exploring all the
73configuration menus and creating your own kernel configuration from
74scratch.</para>
75
76<para>For POSIX shared memory support, ensure that the kernel config option
77<quote>Virtual memory file system support</quote> is enabled. It resides within
78the <quote>File systems</quote> menu and is normally enabled by default.</para>
79
80<para>LFS bootscripts make the assumption that you either compile
81both <quote>Support for Host-side USB</quote> and
82<quote>USB device filesystem</quote> directly into the kernel, or don't compile them at
83all. Bootscripts will not work properly if it is a module (<filename>usbcore.ko</filename>).</para>
84
85<note><para>NPTL requires the kernel to be compiled with GCC 3.x, in this case
86&gcc-version;. Compiling with 2.95.x is known to cause failures in the glibc
87testsuite, so do <emphasis>not</emphasis> compile the kernel with gcc 2.95.x
88unless you know what you're getting yourself into.</para></note>
89
90<para>Compile the kernel image and modules:</para>
91
92<screen><userinput>make</userinput></screen>
93
94<para>If you intend to use kernel modules, you may need an
95<filename>/etc/modprobe.conf</filename> file. Information pertaining
96to modules and to kernel configuration in general may be found in the
97kernel documentation, which is found in the
98<filename class="directory">linux-&linux-version;/Documentation</filename> directory.
99The modprobe.conf man page
100<!-- removed for review from tldp.org
101and the kernel HOWTO at
102<ulink url="http://www.tldp.org/HOWTO/Kernel-HOWTO.html"/> -->
103may also be of interest to you.</para>
104
105<para>Be very suspicious while reading other documentation, because it
106usually applies to 2.4.x kernels only. As far as the editors know, kernel
107configuration issues specific to Hotplug and Udev
108are documented nowhere. The problem is that Udev will create a device node
109only if Hotplug or a user-written script inserts the corresponding module
110into the kernel, and not all modules are detectable by Hotplug. Note
111that statements like
112<screen>alias char-major-XXX some-module</screen>
113in <filename>/etc/modprobe.conf</filename> file don't work with
114Udev, and other aliases are often unnecessary with Hotplug.</para>
115
116<para>Because of all those compilcations with Hotplug, Udev and modules, we
117strongly recommend you to start with a completely non-modular kernel
118configuration, especially if this is the first time you use Udev.</para>
119
120<para>Install the modules, if your kernel configuration uses them:</para>
121
122<screen><userinput>make modules_install</userinput></screen>
123
124<para>If you have a lot of modules and very little space, you may want to
125consider stripping and compressing the modules. For most people such compression
126isn't worth the trouble, but if you're really pressed for space, then have a look at
127<ulink url="http://www.linux-mips.org/archives/linux-mips/2002-04/msg00031.html"/>.</para>
128
129<para>Kernel compilation has finished but more steps are required to complete
130the installation. Some files need to be copied to the <filename class="directory">/boot</filename>
131directory.</para>
132
133<para>The path to the kernel image may vary depending on the platform you're
134using. Issue the following command to install the kernel:</para>
135
136<screen><userinput>cp arch/i386/boot/bzImage /boot/lfskernel-&linux-version;</userinput></screen>
137
138<para><filename>System.map</filename> is a symbol file for the kernel. It maps
139the function entry points of every function in the kernel API (Application Programming Interface), as well as the
140addresses of the kernel data structures for the running kernel. Issue the
141following command to install the map file:</para>
142
143<screen><userinput>cp System.map /boot/System.map-&linux-version;</userinput></screen>
144
145<para><filename>.config</filename> is the kernel configuration file that was
146produced by the <command>make menuconfig</command> step above. It contains all
147the config selections for the kernel that was just compiled. It's a good idea
148to keep this file for future reference:</para>
149
150<screen><userinput>cp .config /boot/config-&linux-version;</userinput></screen>
151
152<para>It is important to note that the files in the kernel source directory are
153not owned by <emphasis>root</emphasis>. Whenever you unpack a package as user
154<emphasis>root</emphasis> (like we did here inside chroot), the files end up
155having the user and group IDs of whatever they were on the packager's computer.
156This is usually not a problem for any other package you install because you
157remove the source tree after the installation. But the Linux source tree is
158often kept around for a long time, so there's a chance that whatever user ID
159the packager used will be assigned to somebody on your machine and then that
160person would have write access to the kernel source.</para>
161
162<para>If you are going to keep the kernel source tree around, you may want to
163run <command>chown -R 0:0</command> on the
164<filename class="directory">linux-&linux-version;</filename> directory to ensure all files are
165owned by user <emphasis>root</emphasis>.</para>
166
167</sect2>
168
169
170<sect2 id="contents-kernel" role="content"><title>Contents of Linux</title>
171
172<segmentedlist>
173<segtitle>Installed files</segtitle>
174<seglistitem><seg>the kernel, the kernel headers,
175and the System.map</seg></seglistitem>
176</segmentedlist>
177
178<variablelist><title>Short descriptions</title>
179
180<varlistentry id="kernel">
181<term>The <emphasis>kernel</emphasis></term>
182<listitem>
183<indexterm zone="ch-bootable-kernel kernel"><primary sortas="b-kernel">kernel</primary></indexterm>
184<para>is the engine of your Linux system.
185When switching on your box, the kernel is the first part of your operating
186system that gets loaded. It detects and initializes all the components of your
187computer's hardware, then makes these components available as a tree of files
188to the software, and turns a single CPU into a multi-tasking machine capable
189of running scores of programs seemingly at the same time.</para>
190</listitem>
191</varlistentry>
192
193<varlistentry id="kernel-headers">
194<term>The <emphasis>kernel headers</emphasis></term>
195<listitem>
196<indexterm zone="ch-bootable-kernel kernel-headers"><primary sortas="e-kernel-headers">kernel headers</primary></indexterm>
197<para>define the interface to the
198services that the kernel provides. The headers in your system's
199<filename class="directory">include</filename> directory should <emphasis>always</emphasis> be
200the ones against which Glibc was compiled and should therefore
201<emphasis>not</emphasis> be replaced when upgrading the kernel.</para>
202</listitem>
203</varlistentry>
204
205<varlistentry id="System.map">
206<term><filename>System.map</filename></term>
207<listitem>
208<indexterm zone="ch-bootable-kernel System.map"><primary sortas="e-/boot/System.map">/boot/System.map</primary></indexterm>
209<para>is a list of addresses and symbols. It maps the entry points and addresses
210of all the functions and data structures in the kernel.</para>
211</listitem>
212</varlistentry>
213</variablelist>
214
215</sect2>
216
217</sect1>
Note: See TracBrowser for help on using the repository browser.