source: chapter08/kernel.xml@ 67d4ac0

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

Merge some minor stuff from LFS, remove unnecesary command from dbus command explanations and misc fixes.

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

  • Property mode set to 100644
File size: 13.0 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 [*] open by fhandle syscalls
78 [*] Control Group support
79Processor type and features ---&gt;
80 [*] Enable seccomp to safely compute untrusted bytecode
81Networking support ---&gt;
82 Networking options ---&gt;
83 &lt;*&gt; The IPv6 protocol
84Device Drivers ---&gt;
85 Generic Driver Options ---&gt;
86 () path to uevent helper
87 [*] Maintain a devtmpfs filesystem to mount at /dev
88 [ ] Fallback user-helper invocation for firmware loading
89File systems ---&gt;
90 [*] Inotify support for userspace
91 &lt;*&gt; Kernel automounter version 4 support (also supports v3)
92 Pseudo filesystems ---&gt;
93 [*] Tmpfs POSIX Access Control Lists
94 [*] Tmpfs extended attributes</screen></note>
95
96 <note><para>While "The IPv6 Protocol" is not strictly required, it is
97 highly recommended by the Systemd developers.</para></note>
98
99<screen role="nodump"><userinput>make LANG=<replaceable>&lt;host_LANG_value&gt;</replaceable> LC_ALL= menuconfig</userinput></screen>
100
101 <variablelist>
102 <title>The meaning of the make parameters:</title>
103
104 <varlistentry>
105 <term><parameter>LANG=&lt;host_LANG_value&gt; LC_ALL=</parameter></term>
106 <listitem>
107 <para>This establishes the locale setting to the one used on the host.
108 This is needed for a proper menuconfig ncurses interface line
109 drawing on UTF-8 linux text console.</para>
110
111 <para>Be sure to replace <replaceable>&lt;host_LANG_value&gt;</replaceable>
112 by the value of the <envar>$LANG</envar> variable from your host.
113 If not set, you could use instead the host's value of <envar>$LC_ALL</envar>
114 or <envar>$LC_CTYPE</envar>.</para>
115 </listitem>
116 </varlistentry>
117
118 </variablelist>
119
120 <para>Alternatively, <command>make oldconfig</command> may be more
121 appropriate in some situations. See the <filename>README</filename>
122 file for more information.</para>
123
124 <para>If desired, skip kernel configuration by copying the kernel
125 config file, <filename>.config</filename>, from the host system
126 (assuming it is available) to the unpacked <filename
127 class="directory">linux-&linux-version;</filename> directory. However,
128 we do not recommend this option. It is often better to explore all the
129 configuration menus and create the kernel configuration from
130 scratch.</para>
131
132 <para>Compile the kernel image and modules:</para>
133
134<screen><userinput remap="make">make</userinput></screen>
135
136 <para>If using kernel modules, module configuration in <filename
137 class="directory">/etc/modprobe.d</filename> may be required.
138 Information pertaining to modules and kernel configuration is
139 located in <xref linkend="ch-scripts-udev"/> and in the kernel
140 documentation in the <filename
141 class="directory">linux-&linux-version;/Documentation</filename> directory.
142 Also, <filename>modprobe.conf(5)</filename> may be of interest.</para>
143
144 <para>Install the modules, if the kernel configuration uses them:</para>
145
146<screen><userinput remap="install">make modules_install</userinput></screen>
147
148 <para>After kernel compilation is complete, additional steps are
149 required to complete the installation. Some files need to be copied to
150 the <filename class="directory">/boot</filename> directory.</para>
151
152 <para>The path to the kernel image may vary depending on the platform being
153 used. The filename below can be changed to suit your taste, but the stem of
154 the filename should be <emphasis>vmlinuz</emphasis> to be compatible with
155 the automatic setup of the boot process described in the next section. The
156 following command assumes an x86 architecture:</para>
157
158<screen><userinput remap="install">cp -v arch/x86/boot/bzImage /boot/vmlinuz-&linux-version;-lfs-&version;</userinput></screen>
159
160 <para><filename>System.map</filename> is a symbol file for the kernel.
161 It maps the function entry points of every function in the kernel API,
162 as well as the addresses of the kernel data structures for the running
163 kernel. It is used as a resource when investigating kernel problems.
164 Issue the following command to install the map file:</para>
165
166<screen><userinput remap="install">cp -v System.map /boot/System.map-&linux-version;</userinput></screen>
167
168 <para>The kernel configuration file <filename>.config</filename>
169 produced by the <command>make menuconfig</command> step
170 above contains all the configuration selections for the kernel
171 that was just compiled. It is a good idea to keep this file for future
172 reference:</para>
173
174<screen><userinput remap="install">cp -v .config /boot/config-&linux-version;</userinput></screen>
175
176 <para>Install the documentation for the Linux kernel:</para>
177
178<screen><userinput remap="install">install -d /usr/share/doc/linux-&linux-version;
179cp -r Documentation/* /usr/share/doc/linux-&linux-version;</userinput></screen>
180
181 <para>It is important to note that the files in the kernel source
182 directory are not owned by <emphasis>root</emphasis>. Whenever a
183 package is unpacked as user <emphasis>root</emphasis> (like we did
184 inside chroot), the files have the user and group IDs of whatever
185 they were on the packager's computer. This is usually not a problem
186 for any other package to be installed because the source tree is
187 removed after the installation. However, the Linux source tree is
188 often retained for a long time. Because of this, there is a chance
189 that whatever user ID the packager used will be assigned to somebody
190 on the machine. That person would then have write access to the kernel
191 source.</para>
192
193 <para>If the kernel source tree is going to be retained, run
194 <command>chown -R 0:0</command> on the <filename
195 class="directory">linux-&linux-version;</filename> directory to ensure
196 all files are owned by user <emphasis>root</emphasis>.</para>
197
198 <warning>
199 <para>Some kernel documentation recommends creating a symlink from
200 <filename class="symlink">/usr/src/linux</filename> pointing to the kernel
201 source directory. This is specific to kernels prior to the 2.6 series and
202 <emphasis>must not</emphasis> be created on an LFS system as it can cause
203 problems for packages you may wish to build once your base LFS system is
204 complete.</para>
205 </warning>
206
207 <warning>
208 <para>The headers in the system's <filename
209 class="directory">include</filename> directory (<filename
210 class="directory">/usr/include</filename>) should
211 <emphasis>always</emphasis> be the ones against which Glibc was compiled,
212 that is, the sanitised headers installed in <xref
213 linkend="ch-system-linux-headers"/>. Therefore, they should
214 <emphasis>never</emphasis> be replaced by either the raw kernel headers
215 or any other kernel sanitized headers.</para>
216 </warning>
217
218 </sect2>
219
220 <sect2 id="conf-modprobe" role="configuration">
221 <title>Configuring Linux Module Load Order</title>
222
223 <indexterm zone="conf-modprobe">
224 <primary sortas="e-/etc/modprobe.d/usb.conf">/etc/modprobe.d/usb.conf</primary>
225 </indexterm>
226
227 <para>Most of the time Linux modules are loaded automatically, but
228 sometimes it needs some specific direction. The program that loads
229 modules, <command>modprobe</command> or <command>insmod</command>, uses
230 <filename>/etc/modprobe.d/usb.conf</filename> for this purpose. This file
231 needs to be created so that if the USB drivers (ehci_hcd, ohci_hcd and
232 uhci_hcd) have been built as modules, they will be loaded in the correct
233 order; ehci_hcd needs to be loaded prior to ohci_hcd and uhci_hcd in order
234 to avoid a warning being output at boot time.</para>
235
236 <para>Create a new file <filename>/etc/modprobe.d/usb.conf</filename> by running
237 the following:</para>
238
239<screen><userinput>install -v -m755 -d /etc/modprobe.d
240cat &gt; /etc/modprobe.d/usb.conf &lt;&lt; "EOF"
241<literal># Begin /etc/modprobe.d/usb.conf
242
243install ohci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i ohci_hcd ; true
244install uhci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i uhci_hcd ; true
245
246# End /etc/modprobe.d/usb.conf</literal>
247EOF</userinput></screen>
248
249 </sect2>
250
251 <sect2 id="contents-kernel" role="content">
252 <title>Contents of Linux</title>
253
254 <segmentedlist>
255 <segtitle>Installed files</segtitle>
256 <segtitle>Installed directories</segtitle>
257
258 <seglistitem>
259 <seg>config-&linux-version;,
260 vmlinuz-&linux-version;-lfs-&version;, and
261 System.map-&linux-version;</seg>
262 <seg>/lib/modules, /usr/share/doc/linux-&linux-version;</seg>
263 </seglistitem>
264 </segmentedlist>
265
266 <variablelist>
267 <bridgehead renderas="sect3">Short Descriptions</bridgehead>
268 <?dbfo list-presentation="list"?>
269 <?dbhtml list-presentation="table"?>
270
271 <varlistentry id="config">
272 <term><filename>config-&linux-version;</filename></term>
273 <listitem>
274 <para>Contains all the configuration selections for the kernel</para>
275 <indexterm zone="ch-bootable-kernel config">
276 <primary sortas="e-/boot/config">/boot/config-&linux-version;</primary>
277 </indexterm>
278 </listitem>
279 </varlistentry>
280
281 <varlistentry id="lfskernel">
282 <term><filename>vmlinuz-&linux-version;-lfs-&version;</filename></term>
283 <listitem>
284 <para>The engine of the Linux system. When turning on the computer,
285 the kernel is the first part of the operating system that gets loaded.
286 It detects and initializes all components of the computer's hardware,
287 then makes these components available as a tree of files to the
288 software and turns a single CPU into a multitasking machine capable
289 of running scores of programs seemingly at the same time</para>
290 <indexterm zone="ch-bootable-kernel lfskernel">
291 <primary sortas="b-lfskernel">lfskernel-&linux-version;</primary>
292 </indexterm>
293 </listitem>
294 </varlistentry>
295
296 <varlistentry id="System.map">
297 <term><filename>System.map-&linux-version;</filename></term>
298 <listitem>
299 <para>A list of addresses and symbols; it maps the entry points and
300 addresses of all the functions and data structures in the
301 kernel</para>
302 <indexterm zone="ch-bootable-kernel System.map">
303 <primary sortas="e-/boot/System.map">/boot/System.map-&linux-version;</primary>
304 </indexterm>
305 </listitem>
306 </varlistentry>
307
308 </variablelist>
309
310 </sect2>
311
312</sect1>
Note: See TracBrowser for help on using the repository browser.