source: chapter10/kernel.xml@ 37e35d2

multilib-10.1
Last change on this file since 37e35d2 was 37e35d2, checked in by Thomas Trepl <thomas@…>, 4 years ago

Update to new lfs structure

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

  • Property mode set to 100644
File size: 17.7 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>kernel</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-knl-sbu;</seg>
34 <seg>&linux-knl-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-book;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>
69
70 <para>A good starting place for setting up the kernel configuration is to
71 run <command>make defconfig</command>. This will set the base
72 configuration to a good state that takes your current system architecture
73 into account.</para>
74
75 <para>Be sure to enable/disable/set the following features or the system might
76 not work correctly or boot at all:</para>
77
78 <screen role="nodump" revision="sysv">
79Device Drivers ---&gt;
80 Generic Driver Options ---&gt;
81 [ ] Support for uevent helper [CONFIG_UEVENT_HELPER]
82 [*] Maintain a devtmpfs filesystem to mount at /dev [CONFIG_DEVTMPFS]
83
84Kernel hacking ---&gt;
85 Choose kernel unwinder (Frame pointer unwinder) ---&gt; [CONFIG_UNWINDER_FRAME_POINTER]</screen>
86
87 <screen role="nodump" revision="systemd">
88General setup -->
89 [*] Control Group support [CONFIG_CGROUPS]
90 [ ] Enable deprecated sysfs features to support old userspace tools [CONFIG_SYSFS_DEPRECATED]
91 [*] Configure standard kernel features (expert users) [CONFIG_EXPERT] ---&gt;
92 [*] open by fhandle syscalls [CONFIG_FHANDLE]
93 [ ] Auditing support [CONFIG_AUDIT]
94Processor type and features ---&gt;
95 [*] Enable seccomp to safely compute untrusted bytecode [CONFIG_SECCOMP]
96Firmware Drivers ---&gt;
97 [*] Export DMI identification via sysfs to userspace [CONFIG_DMIID]
98Networking support ---&gt;
99 Networking options ---&gt;
100 &lt;*&gt; The IPv6 protocol [CONFIG_IPV6]
101Device Drivers ---&gt;
102 Generic Driver Options ---&gt;
103 [ ] Support for uevent helper [CONFIG_UEVENT_HELPER]
104 [*] Maintain a devtmpfs filesystem to mount at /dev [CONFIG_DEVTMPFS]
105 Firmware Loader ---&gt;
106 [ ] Enable the firmware sysfs fallback mechanism [CONFIG_FW_LOADER_USER_HELPER]
107File systems ---&gt;
108 [*] Inotify support for userspace [CONFIG_INOTIFY_USER]
109 &lt;*&gt; Kernel automounter support (supports v3, v4, and v5) [CONFIG_AUTOFS_FS]
110 Pseudo filesystems ---&gt;
111 [*] Tmpfs POSIX Access Control Lists [CONFIG_TMPFS_POSIX_ACL]
112 [*] Tmpfs extended attributes [CONFIG_TMPFS_XATTR]</screen>
113 </note>
114
115 <note revision="systemd">
116 <para>While "The IPv6 Protocol" is not strictly
117 required, it is highly recommended by the systemd developers.</para>
118 </note>
119
120 <para revision="sysv">There are several other options that may be desired
121 depending on the requirements for the system. For a list of options needed
122 for BLFS packages, see the <ulink
123 url="&lfs-root;blfs/view/&short-version;/longindex.html#kernel-config-index">BLFS
124 Index of Kernel Settings</ulink>
125 (&lfs-root;blfs/view/&short-version;/longindex.html#kernel-config-index).</para>
126
127 <note>
128 <para>If your host hardware is using UEFI, then the 'make defconfig'
129 above should automatically add in some EFI-related kernel options.</para>
130
131 <para>In order to allow your LFS kernel to be booted from within your
132 host's UEFI boot environment, your kernel must have this option
133 selected:</para>
134
135<screen role="nodump">Processor type and features ---&gt;
136 [*] EFI stub support [CONFIG_EFI_STUB]</screen>
137
138 <para>A fuller description of managing UEFI environments from within LFS
139 is covered by the lfs-uefi.txt hint at
140 <ulink
141 url="&hints-root;lfs-uefi.txt"/>.
142 </para>
143 </note>
144
145 <note arch="ml_32,ml_x32,ml_all">
146 <para>
147 Running a multilib system means also that the kernel has to be
148 configured proper. It is required that the kernel is able to
149 identify and start binaries compiled for different architectures
150 than the default. Setup the required parameter in the kernel
151 config:
152 </para>
153<screen>Binary Emulations ---&gt;
154 [*] IA32 Emulation
155 &lt;M&gt; IA32 a.out support
156 [*] x32 ABI for 64-bit mode
157</screen>
158 <para>Make sure that the option
159 'IA32 Emulation' is set if you built support for the 32bit ABI.
160 If you selected the x32 ABI or built support for both, also select
161 'x32 ABI for 64-bit mode'. The option 'IA32 a.out support' is
162 optional.
163 </para>
164 </note>
165
166 <variablelist>
167 <title>The rationale for the above configuration items:</title>
168
169 <varlistentry>
170 <term><parameter>Support for uevent helper</parameter></term>
171 <listitem>
172 <para>Having this option set may interfere with device
173 management when using Udev/Eudev. </para>
174 </listitem>
175 </varlistentry>
176
177 <varlistentry>
178 <term><parameter>Maintain a devtmpfs</parameter></term>
179 <listitem>
180 <para>This will create automated device nodes which are populated by the
181 kernel, even without Udev running. Udev then runs on top of this,
182 managing permissions and adding symlinks. This configuration
183 item is required for all users of Udev/Eudev.</para>
184 </listitem>
185 </varlistentry>
186
187 </variablelist>
188
189<screen role="nodump"><userinput>make menuconfig</userinput></screen>
190
191 <variablelist>
192 <title>The meaning of optional make environment variables:</title>
193
194 <varlistentry>
195 <term><parameter>LANG=&lt;host_LANG_value&gt; LC_ALL=</parameter></term>
196 <listitem>
197 <para>This establishes the locale setting to the one used on the
198 host. This may be needed for a proper menuconfig ncurses interface
199 line drawing on a UTF-8 linux text console.</para>
200
201 <para>If used, be sure to replace
202 <replaceable>&lt;host_LANG_value&gt;</replaceable> by the value of
203 the <envar>$LANG</envar> variable from your host. You can
204 alternatively use instead the host's value of <envar>$LC_ALL</envar>
205 or <envar>$LC_CTYPE</envar>.</para>
206 </listitem>
207 </varlistentry>
208
209 </variablelist>
210
211 <para>Alternatively, <command>make oldconfig</command> may be more
212 appropriate in some situations. See the <filename>README</filename>
213 file for more information.</para>
214
215 <para>If desired, skip kernel configuration by copying the kernel
216 config file, <filename>.config</filename>, from the host system
217 (assuming it is available) to the unpacked <filename
218 class="directory">linux-&linux-version;</filename> directory. However,
219 we do not recommend this option. It is often better to explore all the
220 configuration menus and create the kernel configuration from
221 scratch.</para>
222
223 <para>Compile the kernel image and modules:</para>
224
225<screen><userinput remap="make">make</userinput></screen>
226
227 <para>If using kernel modules, module configuration in <filename
228 class="directory">/etc/modprobe.d</filename> may be required.
229 Information pertaining to modules and kernel configuration is
230 located in <xref linkend="ch-config-udev"/> and in the kernel
231 documentation in the <filename
232 class="directory">linux-&linux-version;/Documentation</filename> directory.
233 Also, <filename>modprobe.d(5)</filename> may be of interest.</para>
234
235 <para>Unless module support has been disabled in the kernel configuration,
236 install the modules with:</para>
237
238<screen><userinput remap="install">make modules_install</userinput></screen>
239
240 <para>After kernel compilation is complete, additional steps are
241 required to complete the installation. Some files need to be copied to
242 the <filename class="directory">/boot</filename> directory.</para>
243
244 <caution>
245 <para>If the host system has a separate /boot partition, the files copied
246 below should go there. The easiest way to do that is to bind /boot on the
247 host (outside chroot) to /mnt/lfs/boot before proceeding. As the root
248 user in the <emphasis>host system</emphasis>:</para>
249
250<screen role="nodump"><userinput>mount --bind /boot /mnt/lfs/boot</userinput></screen>
251 </caution>
252
253 <para>The path to the kernel image may vary depending on the platform being
254 used. The filename below can be changed to suit your taste, but the stem of
255 the filename should be <emphasis>vmlinuz</emphasis> to be compatible with
256 the automatic setup of the boot process described in the next section. The
257 following command assumes an x86 architecture:</para>
258
259<screen revision="sysv"><userinput remap="install">cp -iv arch/x86/boot/bzImage /boot/vmlinuz-&linux-version;-lfs-&version;</userinput></screen>
260
261<screen revision="systemd"><userinput remap="install">cp -iv arch/x86/boot/bzImage /boot/vmlinuz-&linux-version;-lfs-&versiond;</userinput></screen>
262
263 <para><filename>System.map</filename> is a symbol file for the kernel.
264 It maps the function entry points of every function in the kernel API,
265 as well as the addresses of the kernel data structures for the running
266 kernel. It is used as a resource when investigating kernel problems.
267 Issue the following command to install the map file:</para>
268
269<screen><userinput remap="install">cp -iv System.map /boot/System.map-&linux-version;</userinput></screen>
270
271 <para>The kernel configuration file <filename>.config</filename>
272 produced by the <command>make menuconfig</command> step
273 above contains all the configuration selections for the kernel
274 that was just compiled. It is a good idea to keep this file for future
275 reference:</para>
276
277<screen><userinput remap="install">cp -iv .config /boot/config-&linux-version;</userinput></screen>
278
279 <para>Install the documentation for the Linux kernel:</para>
280
281<screen><userinput remap="install">install -d /usr/share/doc/linux-&linux-version;
282cp -r Documentation/* /usr/share/doc/linux-&linux-version;</userinput></screen>
283
284 <para>It is important to note that the files in the kernel source
285 directory are not owned by <emphasis>root</emphasis>. Whenever a
286 package is unpacked as user <emphasis>root</emphasis> (like we did
287 inside chroot), the files have the user and group IDs of whatever
288 they were on the packager's computer. This is usually not a problem
289 for any other package to be installed because the source tree is
290 removed after the installation. However, the Linux source tree is
291 often retained for a long time. Because of this, there is a chance
292 that whatever user ID the packager used will be assigned to somebody
293 on the machine. That person would then have write access to the kernel
294 source.</para>
295
296 <note>
297 <para>In many cases, the configuration of the kernel will need to be
298 updated for packages that will be installed later in BLFS. Unlike
299 other packages, it is not necessary to remove the kernel source tree
300 after the newly built kernel is installed.</para>
301
302 <para>If the kernel source tree is going to be retained, run
303 <command>chown -R 0:0</command> on the <filename
304 class="directory">linux-&linux-version;</filename> directory to ensure
305 all files are owned by user <emphasis>root</emphasis>.</para>
306 </note>
307
308 <warning>
309 <para>Some kernel documentation recommends creating a symlink from
310 <filename class="symlink">/usr/src/linux</filename> pointing to the kernel
311 source directory. This is specific to kernels prior to the 2.6 series and
312 <emphasis>must not</emphasis> be created on an LFS system as it can cause
313 problems for packages you may wish to build once your base LFS system is
314 complete.</para>
315 </warning>
316
317 <warning>
318 <para>The headers in the system's <filename
319 class="directory">include</filename> directory (<filename
320 class="directory">/usr/include</filename>) should
321 <emphasis>always</emphasis> be the ones against which Glibc was compiled,
322 that is, the sanitised headers installed in <xref
323 linkend="ch-tools-linux-headers"/>. Therefore, they should
324 <emphasis>never</emphasis> be replaced by either the raw kernel headers
325 or any other kernel sanitized headers.</para>
326 </warning>
327
328 </sect2>
329
330 <sect2 id="conf-modprobe" role="configuration">
331 <title>Configuring Linux Module Load Order</title>
332
333 <indexterm zone="conf-modprobe">
334 <primary sortas="e-/etc/modprobe.d/usb.conf">/etc/modprobe.d/usb.conf</primary>
335 </indexterm>
336
337 <para>Most of the time Linux modules are loaded automatically, but
338 sometimes it needs some specific direction. The program that loads
339 modules, <command>modprobe</command> or <command>insmod</command>, uses
340 <filename>/etc/modprobe.d/usb.conf</filename> for this purpose. This file
341 needs to be created so that if the USB drivers (ehci_hcd, ohci_hcd and
342 uhci_hcd) have been built as modules, they will be loaded in the correct
343 order; ehci_hcd needs to be loaded prior to ohci_hcd and uhci_hcd in order
344 to avoid a warning being output at boot time.</para>
345
346 <para>Create a new file <filename>/etc/modprobe.d/usb.conf</filename> by running
347 the following:</para>
348
349<screen><userinput>install -v -m755 -d /etc/modprobe.d
350cat &gt; /etc/modprobe.d/usb.conf &lt;&lt; "EOF"
351<literal># Begin /etc/modprobe.d/usb.conf
352
353install ohci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i ohci_hcd ; true
354install uhci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i uhci_hcd ; true
355
356# End /etc/modprobe.d/usb.conf</literal>
357EOF</userinput></screen>
358
359 </sect2>
360
361 <sect2 id="contents-kernel" role="content">
362 <title>Contents of Linux</title>
363
364 <segmentedlist>
365 <segtitle>Installed files</segtitle>
366 <segtitle>Installed directories</segtitle>
367
368 <seglistitem>
369 <seg>config-&linux-version;,
370 <phrase revision="sysv">vmlinuz-&linux-version;-lfs-&version;,</phrase>
371 <phrase revision="systemd">vmlinuz-&linux-version;-lfs-&versiond;,</phrase>
372 and System.map-&linux-version;</seg>
373 <seg>/lib/modules, /usr/share/doc/linux-&linux-version;</seg>
374 </seglistitem>
375 </segmentedlist>
376
377 <variablelist>
378 <bridgehead renderas="sect3">Short Descriptions</bridgehead>
379 <?dbfo list-presentation="list"?>
380 <?dbhtml list-presentation="table"?>
381
382 <varlistentry id="config">
383 <term><filename>config-&linux-version;</filename></term>
384 <listitem>
385 <para>Contains all the configuration selections for the kernel</para>
386 <indexterm zone="ch-bootable-kernel config">
387 <primary sortas="e-/boot/config">/boot/config-&linux-version;</primary>
388 </indexterm>
389 </listitem>
390 </varlistentry>
391
392 <varlistentry id="lfskernel">
393 <term revision="sysv"><filename>vmlinuz-&linux-version;-lfs-&version;</filename></term>
394 <term revision="systemd"><filename>vmlinuz-&linux-version;-lfs-&versiond;</filename></term>
395 <listitem>
396 <para>The engine of the Linux system. When turning on the computer,
397 the kernel is the first part of the operating system that gets loaded.
398 It detects and initializes all components of the computer's hardware,
399 then makes these components available as a tree of files to the
400 software and turns a single CPU into a multitasking machine capable
401 of running scores of programs seemingly at the same time</para>
402 <indexterm zone="ch-bootable-kernel lfskernel">
403 <primary sortas="b-lfskernel">lfskernel-&linux-version;</primary>
404 </indexterm>
405 </listitem>
406 </varlistentry>
407
408 <varlistentry id="System.map">
409 <term><filename>System.map-&linux-version;</filename></term>
410 <listitem>
411 <para>A list of addresses and symbols; it maps the entry points and
412 addresses of all the functions and data structures in the
413 kernel</para>
414 <indexterm zone="ch-bootable-kernel System.map">
415 <primary sortas="e-/boot/System.map">/boot/System.map-&linux-version;</primary>
416 </indexterm>
417 </listitem>
418 </varlistentry>
419
420 </variablelist>
421
422 </sect2>
423
424</sect1>
Note: See TracBrowser for help on using the repository browser.