source: chapter08/kernel.xml@ a7ea39a

7.5-systemd 7.6-systemd 7.7-systemd 7.8-systemd 7.9-systemd
Last change on this file since a7ea39a was b1a51ac1, checked in by Krejzi <krejzi@…>, 11 years ago

Import new branch

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

  • Property mode set to 100644
File size: 12.9 KB
Line 
1<?xml version="1.0" encoding="ISO-8859-1"?>
2<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
3 "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
4 <!ENTITY % general-entities SYSTEM "../general.ent">
5 %general-entities;
6]>
7
8<sect1 id="ch-bootable-kernel" role="wrap">
9 <?dbhtml filename="kernel.html"?>
10
11 <sect1info condition="script">
12 <productname>linux</productname>
13 <productnumber>&linux-version;</productnumber>
14 <address>&linux-url;</address>
15 </sect1info>
16
17 <title>Linux-&linux-version;</title>
18
19 <indexterm zone="ch-bootable-kernel">
20 <primary sortas="a-Linux">Linux</primary>
21 </indexterm>
22
23 <sect2 role="package">
24 <title/>
25
26 <para>The Linux package contains the Linux kernel.</para>
27
28 <segmentedlist>
29 <segtitle>&buildtime;</segtitle>
30 <segtitle>&diskspace;</segtitle>
31
32 <seglistitem>
33 <seg>&linux-ch8-sbu;</seg>
34 <seg>&linux-ch8-du;</seg>
35 </seglistitem>
36 </segmentedlist>
37
38 </sect2>
39
40 <sect2 role="installation">
41 <title>Installation of the kernel</title>
42
43 <para>Building the kernel involves a few steps&mdash;configuration,
44 compilation, and installation. Read the <filename>README</filename> file
45 in the kernel source tree for alternative methods to the way this book
46 configures the kernel.</para>
47
48 <para>Prepare for compilation by running the following command:</para>
49
50<screen><userinput remap="pre">make mrproper</userinput></screen>
51
52 <para>This ensures that the kernel tree is absolutely clean. The
53 kernel team recommends that this command be issued prior to each
54 kernel compilation. Do not rely on the source tree being clean after
55 un-tarring.</para>
56
57 <!-- Support for compiling a keymap into the kernel is deliberately removed -->
58
59 <para>Configure the kernel via a menu-driven interface. For general
60 information on kernel configuration see <ulink
61 url="&hints-root;kernel-configuration.txt"/>. BLFS has some information
62 regarding particular kernel configuration requirements of packages outside
63 of LFS at <ulink
64 url="&blfs-root;view/svn/longindex.html#kernel-config-index"/>. Additional
65 information about configuring and building the kernel can be found at
66 <ulink url="http://www.kroah.com/lkn/"/> </para>
67
68 <note><para>A good starting place for setting up the kernel configuration
69 is to run <command>make defconfig</command>. This will set the base
70 configuration to a good state that takes your current system architecture
71 into account.</para>
72
73 <para>Be sure to enable or disable following features or the system might not
74 work correctly or boot at all:</para>
75
76 <screen role="nodump">General setup ---&gt;
77 [*] Control Group support
78Processor type and features ---&gt;
79 [*] Enable seccomp to safely compute untrusted bytecode
80Networking support ---&gt;
81 Networking options ---&gt;
82 &lt;*&gt; The IPv6 protocol
83Device Drivers ---&gt;
84 Generic Driver Options ---&gt;
85 () path to uevent helper
86 [*] Maintain a devtmpfs filesystem to mount at /dev
87 [ ] Fallback user-helper invocation for firmware loading
88File systems ---&gt;
89 [*] Inotify support for userspace
90 &lt;*&gt; Kernel automounter version 4 support (also supports v3)
91 Pseudo filesystems ---&gt;
92 [*] Tmpfs POSIX Access Control Lists
93 [*] Tmpfs extended attributes</screen></note>
94
95 <note><para>While "The IPv6 Protocol" is not strictly required, it is
96 highly recommended by the Systemd developers.</para></note>
97
98<screen role="nodump"><userinput>make LANG=<replaceable>&lt;host_LANG_value&gt;</replaceable> LC_ALL= menuconfig</userinput></screen>
99
100 <variablelist>
101 <title>The meaning of the make parameters:</title>
102
103 <varlistentry>
104 <term><parameter>LANG=&lt;host_LANG_value&gt; LC_ALL=</parameter></term>
105 <listitem>
106 <para>This establishes the locale setting to the one used on the host.
107 This is needed for a proper menuconfig ncurses interface line
108 drawing on UTF-8 linux text console.</para>
109
110 <para>Be sure to replace <replaceable>&lt;host_LANG_value&gt;</replaceable>
111 by the value of the <envar>$LANG</envar> variable from your host.
112 If not set, you could use instead the host's value of <envar>$LC_ALL</envar>
113 or <envar>$LC_CTYPE</envar>.</para>
114 </listitem>
115 </varlistentry>
116
117 </variablelist>
118
119 <para>Alternatively, <command>make oldconfig</command> may be more
120 appropriate in some situations. See the <filename>README</filename>
121 file for more information.</para>
122
123 <para>If desired, skip kernel configuration by copying the kernel
124 config file, <filename>.config</filename>, from the host system
125 (assuming it is available) to the unpacked <filename
126 class="directory">linux-&linux-version;</filename> directory. However,
127 we do not recommend this option. It is often better to explore all the
128 configuration menus and create the kernel configuration from
129 scratch.</para>
130
131 <para>Compile the kernel image and modules:</para>
132
133<screen><userinput remap="make">make</userinput></screen>
134
135 <para>If using kernel modules, module configuration in <filename
136 class="directory">/etc/modprobe.d</filename> may be required.
137 Information pertaining to modules and kernel configuration is
138 located in <xref linkend="ch-scripts-udev"/> and in the kernel
139 documentation in the <filename
140 class="directory">linux-&linux-version;/Documentation</filename> directory.
141 Also, <filename>modprobe.conf(5)</filename> may be of interest.</para>
142
143 <para>Install the modules, if the kernel configuration uses them:</para>
144
145<screen><userinput remap="install">make modules_install</userinput></screen>
146
147 <para>After kernel compilation is complete, additional steps are
148 required to complete the installation. Some files need to be copied to
149 the <filename class="directory">/boot</filename> directory.</para>
150
151 <para>The path to the kernel image may vary depending on the platform being
152 used. The filename below can be changed to suit your taste, but the stem of
153 the filename should be <emphasis>vmlinuz</emphasis> to be compatible with
154 the automatic setup of the boot process described in the next section. The
155 following command assumes an x86 architecture:</para>
156
157<screen><userinput remap="install">cp -v arch/x86/boot/bzImage /boot/vmlinuz-&linux-version;-lfs-&version;</userinput></screen>
158
159 <para><filename>System.map</filename> is a symbol file for the kernel.
160 It maps the function entry points of every function in the kernel API,
161 as well as the addresses of the kernel data structures for the running
162 kernel. It is used as a resource when investigating kernel problems.
163 Issue the following command to install the map file:</para>
164
165<screen><userinput remap="install">cp -v System.map /boot/System.map-&linux-version;</userinput></screen>
166
167 <para>The kernel configuration file <filename>.config</filename>
168 produced by the <command>make menuconfig</command> step
169 above contains all the configuration selections for the kernel
170 that was just compiled. It is a good idea to keep this file for future
171 reference:</para>
172
173<screen><userinput remap="install">cp -v .config /boot/config-&linux-version;</userinput></screen>
174
175 <para>Install the documentation for the Linux kernel:</para>
176
177<screen><userinput remap="install">install -d /usr/share/doc/linux-&linux-version;
178cp -r Documentation/* /usr/share/doc/linux-&linux-version;</userinput></screen>
179
180 <para>It is important to note that the files in the kernel source
181 directory are not owned by <emphasis>root</emphasis>. Whenever a
182 package is unpacked as user <emphasis>root</emphasis> (like we did
183 inside chroot), the files have the user and group IDs of whatever
184 they were on the packager's computer. This is usually not a problem
185 for any other package to be installed because the source tree is
186 removed after the installation. However, the Linux source tree is
187 often retained for a long time. Because of this, there is a chance
188 that whatever user ID the packager used will be assigned to somebody
189 on the machine. That person would then have write access to the kernel
190 source.</para>
191
192 <para>If the kernel source tree is going to be retained, run
193 <command>chown -R 0:0</command> on the <filename
194 class="directory">linux-&linux-version;</filename> directory to ensure
195 all files are owned by user <emphasis>root</emphasis>.</para>
196
197 <warning>
198 <para>Some kernel documentation recommends creating a symlink from
199 <filename class="symlink">/usr/src/linux</filename> pointing to the kernel
200 source directory. This is specific to kernels prior to the 2.6 series and
201 <emphasis>must not</emphasis> be created on an LFS system as it can cause
202 problems for packages you may wish to build once your base LFS system is
203 complete.</para>
204 </warning>
205
206 <warning>
207 <para>The headers in the system's
208 <filename class="directory">include</filename> directory should
209 <emphasis>always</emphasis> be the ones against which Glibc was compiled,
210 that is, the sanitised headers from this Linux kernel tarball.
211 Therefore, they should <emphasis>never</emphasis> be replaced by either
212 the raw kernel headers or any other kernel sanitized headers.</para>
213 </warning>
214
215 </sect2>
216
217 <sect2 id="conf-modprobe" role="configuration">
218 <title>Configuring Linux Module Load Order</title>
219
220 <indexterm zone="conf-modprobe">
221 <primary sortas="e-/etc/modprobe.d/usb.conf">/etc/modprobe.d/usb.conf</primary>
222 </indexterm>
223
224 <para>Most of the time Linux modules are loaded automatically, but
225 sometimes it needs some specific direction. The program that loads
226 modules, <command>modprobe</command> or <command>insmod</command>, uses
227 <filename>/etc/modprobe.d/usb.conf</filename> for this purpose. This file
228 needs to be created so that if the USB drivers (ehci_hcd, ohci_hcd and
229 uhci_hcd) have been built as modules, they will be loaded in the correct
230 order; ehci_hcd needs to be loaded prior to ohci_hcd and uhci_hcd in order
231 to avoid a warning being output at boot time.</para>
232
233 <para>Create a new file <filename>/etc/modprobe.d/usb.conf</filename> by running
234 the following:</para>
235
236<screen><userinput>install -v -m755 -d /etc/modprobe.d
237cat &gt; /etc/modprobe.d/usb.conf &lt;&lt; "EOF"
238<literal># Begin /etc/modprobe.d/usb.conf
239
240install ohci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i ohci_hcd ; true
241install uhci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i uhci_hcd ; true
242
243# End /etc/modprobe.d/usb.conf</literal>
244EOF</userinput></screen>
245
246 </sect2>
247
248 <sect2 id="contents-kernel" role="content">
249 <title>Contents of Linux</title>
250
251 <segmentedlist>
252 <segtitle>Installed files</segtitle>
253 <segtitle>Installed directories</segtitle>
254
255 <seglistitem>
256 <seg>config-&linux-version;,
257 vmlinuz-&linux-version;-lfs-&version;, and
258 System.map-&linux-version;</seg>
259 <seg>/lib/modules, /usr/share/doc/linux-&linux-version;</seg>
260 </seglistitem>
261 </segmentedlist>
262
263 <variablelist>
264 <bridgehead renderas="sect3">Short Descriptions</bridgehead>
265 <?dbfo list-presentation="list"?>
266 <?dbhtml list-presentation="table"?>
267
268 <varlistentry id="config">
269 <term><filename>config-&linux-version;</filename></term>
270 <listitem>
271 <para>Contains all the configuration selections for the kernel</para>
272 <indexterm zone="ch-bootable-kernel config">
273 <primary sortas="e-/boot/config">/boot/config-&linux-version;</primary>
274 </indexterm>
275 </listitem>
276 </varlistentry>
277
278 <varlistentry id="lfskernel">
279 <term><filename>vmlinuz-&linux-version;-lfs-&version;</filename></term>
280 <listitem>
281 <para>The engine of the Linux system. When turning on the computer,
282 the kernel is the first part of the operating system that gets loaded.
283 It detects and initializes all components of the computer's hardware,
284 then makes these components available as a tree of files to the
285 software and turns a single CPU into a multitasking machine capable
286 of running scores of programs seemingly at the same time</para>
287 <indexterm zone="ch-bootable-kernel lfskernel">
288 <primary sortas="b-lfskernel">lfskernel-&linux-version;</primary>
289 </indexterm>
290 </listitem>
291 </varlistentry>
292
293 <varlistentry id="System.map">
294 <term><filename>System.map-&linux-version;</filename></term>
295 <listitem>
296 <para>A list of addresses and symbols; it maps the entry points and
297 addresses of all the functions and data structures in the
298 kernel</para>
299 <indexterm zone="ch-bootable-kernel System.map">
300 <primary sortas="e-/boot/System.map">/boot/System.map-&linux-version;</primary>
301 </indexterm>
302 </listitem>
303 </varlistentry>
304
305 </variablelist>
306
307 </sect2>
308
309</sect1>
Note: See TracBrowser for help on using the repository browser.