diff options
Diffstat (limited to 'chapter08/kernel.xml')
-rw-r--r-- | chapter08/kernel.xml | 403 |
1 files changed, 0 insertions, 403 deletions
diff --git a/chapter08/kernel.xml b/chapter08/kernel.xml deleted file mode 100644 index 0033028cf..000000000 --- a/chapter08/kernel.xml +++ /dev/null @@ -1,403 +0,0 @@ -<?xml version="1.0" encoding="ISO-8859-1"?> -<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" - "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ - <!ENTITY % general-entities SYSTEM "../general.ent"> - %general-entities; -]> - -<sect1 id="ch-bootable-kernel" role="wrap"> - <?dbhtml filename="kernel.html"?> - - <sect1info condition="script"> - <productname>kernel</productname> - <productnumber>&linux-version;</productnumber> - <address>&linux-url;</address> - </sect1info> - - <title>Linux-&linux-version;</title> - - <indexterm zone="ch-bootable-kernel"> - <primary sortas="a-Linux">Linux</primary> - </indexterm> - - <sect2 role="package"> - <title/> - - <para>The Linux package contains the Linux kernel.</para> - - <segmentedlist> - <segtitle>&buildtime;</segtitle> - <segtitle>&diskspace;</segtitle> - - <seglistitem> - <seg>&linux-ch8-sbu;</seg> - <seg>&linux-ch8-du;</seg> - </seglistitem> - </segmentedlist> - - </sect2> - - <sect2 role="installation"> - <title>Installation of the kernel</title> - - <para>Building the kernel involves a few steps—configuration, - compilation, and installation. Read the <filename>README</filename> file - in the kernel source tree for alternative methods to the way this book - configures the kernel.</para> - - <para>Prepare for compilation by running the following command:</para> - -<screen><userinput remap="pre">make mrproper</userinput></screen> - - <para>This ensures that the kernel tree is absolutely clean. The - kernel team recommends that this command be issued prior to each - kernel compilation. Do not rely on the source tree being clean after - un-tarring.</para> - - <!-- Support for compiling a keymap into the kernel is deliberately removed --> - - <para>Configure the kernel via a menu-driven interface. For general - information on kernel configuration see <ulink - url="&hints-root;kernel-configuration.txt"/>. BLFS has some information - regarding particular kernel configuration requirements of packages outside - of LFS at <ulink - url="&blfs-book;longindex.html#kernel-config-index"/>. Additional - information about configuring and building the kernel can be found at - <ulink url="http://www.kroah.com/lkn/"/> </para> - - <note> - - <para>A good starting place for setting up the kernel configuration is to - run <command>make defconfig</command>. This will set the base - configuration to a good state that takes your current system architecture - into account.</para> - - <para>Be sure to enable/disable/set the following features or the system might - not work correctly or boot at all:</para> - - <screen role="nodump" revision="sysv"> -Device Drivers ---> - Generic Driver Options ---> - [ ] Support for uevent helper [CONFIG_UEVENT_HELPER] - [*] Maintain a devtmpfs filesystem to mount at /dev [CONFIG_DEVTMPFS] - -Kernel hacking ---> - Choose kernel unwinder (Frame pointer unwinder) ---> [CONFIG_UNWINDER_FRAME_POINTER]</screen> - - <screen role="nodump" revision="systemd"> -General setup --> - [*] Control Group support [CONFIG_CGROUPS] - [ ] Enable deprecated sysfs features to support old userspace tools [CONFIG_SYSFS_DEPRECATED] - [*] Configure standard kernel features (expert users) [CONFIG_EXPERT] ---> - [*] open by fhandle syscalls [CONFIG_FHANDLE] - [ ] Auditing support [CONFIG_AUDIT] -Processor type and features ---> - [*] Enable seccomp to safely compute untrusted bytecode [CONFIG_SECCOMP] -Firmware Drivers ---> - [*] Export DMI identification via sysfs to userspace [CONFIG_DMIID] -Networking support ---> - Networking options ---> - <*> The IPv6 protocol [CONFIG_IPV6] -Device Drivers ---> - Generic Driver Options ---> - [ ] Support for uevent helper [CONFIG_UEVENT_HELPER] - [*] Maintain a devtmpfs filesystem to mount at /dev [CONFIG_DEVTMPFS] - Firmware Loader ---> - [ ] Enable the firmware sysfs fallback mechanism [CONFIG_FW_LOADER_USER_HELPER] -File systems ---> - [*] Inotify support for userspace [CONFIG_INOTIFY_USER] - <*> Kernel automounter support (supports v3, v4, and v5) [CONFIG_AUTOFS_FS] - Pseudo filesystems ---> - [*] Tmpfs POSIX Access Control Lists [CONFIG_TMPFS_POSIX_ACL] - [*] Tmpfs extended attributes [CONFIG_TMPFS_XATTR]</screen> - </note> - - <note revision="systemd"> - <para>While "The IPv6 Protocol" is not strictly - required, it is highly recommended by the systemd developers.</para> - </note> - - <para revision="sysv">There are several other options that may be desired - depending on the requirements for the system. For a list of options needed - for BLFS packages, see the <ulink - url="&lfs-root;blfs/view/&short-version;/longindex.html#kernel-config-index">BLFS - Index of Kernel Settings</ulink> - (&lfs-root;blfs/view/&short-version;/longindex.html#kernel-config-index).</para> - - <note> - <para>If your host hardware is using UEFI, then the 'make defconfig' - above should automatically add in some EFI-related kernel options.</para> - - <para>In order to allow your LFS kernel to be booted from within your - host's UEFI boot environment, your kernel must have this option - selected:</para> - -<screen role="nodump">Processor type and features ---> - [*] EFI stub support [CONFIG_EFI_STUB]</screen> - - <para>A fuller description of managing UEFI environments from within LFS - is covered by the lfs-uefi.txt hint at - <ulink - url="&hints-root;lfs-uefi.txt"/>. - </para> - </note> - - <variablelist> - <title>The rationale for the above configuration items:</title> - - <varlistentry> - <term><parameter>Support for uevent helper</parameter></term> - <listitem> - <para>Having this option set may interfere with device - management when using Udev/Eudev. </para> - </listitem> - </varlistentry> - - <varlistentry> - <term><parameter>Maintain a devtmpfs</parameter></term> - <listitem> - <para>This will create automated device nodes which are populated by the - kernel, even without Udev running. Udev then runs on top of this, - managing permissions and adding symlinks. This configuration - item is required for all users of Udev/Eudev.</para> - </listitem> - </varlistentry> - - </variablelist> - -<screen role="nodump"><userinput>make menuconfig</userinput></screen> - - <variablelist> - <title>The meaning of optional make environment variables:</title> - - <varlistentry> - <term><parameter>LANG=<host_LANG_value> LC_ALL=</parameter></term> - <listitem> - <para>This establishes the locale setting to the one used on the - host. This may be needed for a proper menuconfig ncurses interface - line drawing on a UTF-8 linux text console.</para> - - <para>If used, be sure to replace - <replaceable><host_LANG_value></replaceable> by the value of - the <envar>$LANG</envar> variable from your host. You can - alternatively use instead the host's value of <envar>$LC_ALL</envar> - or <envar>$LC_CTYPE</envar>.</para> - </listitem> - </varlistentry> - - </variablelist> - - <para>Alternatively, <command>make oldconfig</command> may be more - appropriate in some situations. See the <filename>README</filename> - file for more information.</para> - - <para>If desired, skip kernel configuration by copying the kernel - config file, <filename>.config</filename>, from the host system - (assuming it is available) to the unpacked <filename - class="directory">linux-&linux-version;</filename> directory. However, - we do not recommend this option. It is often better to explore all the - configuration menus and create the kernel configuration from - scratch.</para> - - <para>Compile the kernel image and modules:</para> - -<screen><userinput remap="make">make</userinput></screen> - - <para>If using kernel modules, module configuration in <filename - class="directory">/etc/modprobe.d</filename> may be required. - Information pertaining to modules and kernel configuration is - located in <xref linkend="ch-config-udev"/> and in the kernel - documentation in the <filename - class="directory">linux-&linux-version;/Documentation</filename> directory. - Also, <filename>modprobe.d(5)</filename> may be of interest.</para> - - <para>Unless module support has been disabled in the kernel configuration, - install the modules with:</para> - -<screen><userinput remap="install">make modules_install</userinput></screen> - - <para>After kernel compilation is complete, additional steps are - required to complete the installation. Some files need to be copied to - the <filename class="directory">/boot</filename> directory.</para> - - <caution> - <para>If the host system has a separate /boot partition, the files copied - below should go there. The easiest way to do that is to bind /boot on the - host (outside chroot) to /mnt/lfs/boot before proceeding. As the root - user in the <emphasis>host system</emphasis>:</para> - -<screen role="nodump"><userinput>mount --bind /boot /mnt/lfs/boot</userinput></screen> - </caution> - - <para>The path to the kernel image may vary depending on the platform being - used. The filename below can be changed to suit your taste, but the stem of - the filename should be <emphasis>vmlinuz</emphasis> to be compatible with - the automatic setup of the boot process described in the next section. The - following command assumes an x86 architecture:</para> - -<screen revision="sysv"><userinput remap="install">cp -iv arch/x86/boot/bzImage /boot/vmlinuz-&linux-version;-lfs-&version;</userinput></screen> - -<screen revision="systemd"><userinput remap="install">cp -iv arch/x86/boot/bzImage /boot/vmlinuz-&linux-version;-lfs-&versiond;</userinput></screen> - - <para><filename>System.map</filename> is a symbol file for the kernel. - It maps the function entry points of every function in the kernel API, - as well as the addresses of the kernel data structures for the running - kernel. It is used as a resource when investigating kernel problems. - Issue the following command to install the map file:</para> - -<screen><userinput remap="install">cp -iv System.map /boot/System.map-&linux-version;</userinput></screen> - - <para>The kernel configuration file <filename>.config</filename> - produced by the <command>make menuconfig</command> step - above contains all the configuration selections for the kernel - that was just compiled. It is a good idea to keep this file for future - reference:</para> - -<screen><userinput remap="install">cp -iv .config /boot/config-&linux-version;</userinput></screen> - - <para>Install the documentation for the Linux kernel:</para> - -<screen><userinput remap="install">install -d /usr/share/doc/linux-&linux-version; -cp -r Documentation/* /usr/share/doc/linux-&linux-version;</userinput></screen> - - <para>It is important to note that the files in the kernel source - directory are not owned by <emphasis>root</emphasis>. Whenever a - package is unpacked as user <emphasis>root</emphasis> (like we did - inside chroot), the files have the user and group IDs of whatever - they were on the packager's computer. This is usually not a problem - for any other package to be installed because the source tree is - removed after the installation. However, the Linux source tree is - often retained for a long time. Because of this, there is a chance - that whatever user ID the packager used will be assigned to somebody - on the machine. That person would then have write access to the kernel - source.</para> - - <note> - <para>In many cases, the configuration of the kernel will need to be - updated for packages that will be installed later in BLFS. Unlike - other packages, it is not necessary to remove the kernel source tree - after the newly built kernel is installed.</para> - - <para>If the kernel source tree is going to be retained, run - <command>chown -R 0:0</command> on the <filename - class="directory">linux-&linux-version;</filename> directory to ensure - all files are owned by user <emphasis>root</emphasis>.</para> - </note> - - <warning> - <para>Some kernel documentation recommends creating a symlink from - <filename class="symlink">/usr/src/linux</filename> pointing to the kernel - source directory. This is specific to kernels prior to the 2.6 series and - <emphasis>must not</emphasis> be created on an LFS system as it can cause - problems for packages you may wish to build once your base LFS system is - complete.</para> - </warning> - - <warning> - <para>The headers in the system's <filename - class="directory">include</filename> directory (<filename - class="directory">/usr/include</filename>) should - <emphasis>always</emphasis> be the ones against which Glibc was compiled, - that is, the sanitised headers installed in <xref - linkend="ch-tools-linux-headers"/>. Therefore, they should - <emphasis>never</emphasis> be replaced by either the raw kernel headers - or any other kernel sanitized headers.</para> - </warning> - - </sect2> - - <sect2 id="conf-modprobe" role="configuration"> - <title>Configuring Linux Module Load Order</title> - - <indexterm zone="conf-modprobe"> - <primary sortas="e-/etc/modprobe.d/usb.conf">/etc/modprobe.d/usb.conf</primary> - </indexterm> - - <para>Most of the time Linux modules are loaded automatically, but - sometimes it needs some specific direction. The program that loads - modules, <command>modprobe</command> or <command>insmod</command>, uses - <filename>/etc/modprobe.d/usb.conf</filename> for this purpose. This file - needs to be created so that if the USB drivers (ehci_hcd, ohci_hcd and - uhci_hcd) have been built as modules, they will be loaded in the correct - order; ehci_hcd needs to be loaded prior to ohci_hcd and uhci_hcd in order - to avoid a warning being output at boot time.</para> - - <para>Create a new file <filename>/etc/modprobe.d/usb.conf</filename> by running - the following:</para> - -<screen><userinput>install -v -m755 -d /etc/modprobe.d -cat > /etc/modprobe.d/usb.conf << "EOF" -<literal># Begin /etc/modprobe.d/usb.conf - -install ohci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i ohci_hcd ; true -install uhci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i uhci_hcd ; true - -# End /etc/modprobe.d/usb.conf</literal> -EOF</userinput></screen> - - </sect2> - - <sect2 id="contents-kernel" role="content"> - <title>Contents of Linux</title> - - <segmentedlist> - <segtitle>Installed files</segtitle> - <segtitle>Installed directories</segtitle> - - <seglistitem> - <seg>config-&linux-version;, - <phrase revision="sysv">vmlinuz-&linux-version;-lfs-&version;,</phrase> - <phrase revision="systemd">vmlinuz-&linux-version;-lfs-&versiond;,</phrase> - and System.map-&linux-version;</seg> - <seg>/lib/modules, /usr/share/doc/linux-&linux-version;</seg> - </seglistitem> - </segmentedlist> - - <variablelist> - <bridgehead renderas="sect3">Short Descriptions</bridgehead> - <?dbfo list-presentation="list"?> - <?dbhtml list-presentation="table"?> - - <varlistentry id="config"> - <term><filename>config-&linux-version;</filename></term> - <listitem> - <para>Contains all the configuration selections for the kernel</para> - <indexterm zone="ch-bootable-kernel config"> - <primary sortas="e-/boot/config">/boot/config-&linux-version;</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="lfskernel"> - <term revision="sysv"><filename>vmlinuz-&linux-version;-lfs-&version;</filename></term> - <term revision="systemd"><filename>vmlinuz-&linux-version;-lfs-&versiond;</filename></term> - <listitem> - <para>The engine of the Linux system. When turning on the computer, - the kernel is the first part of the operating system that gets loaded. - It detects and initializes all components of the computer's hardware, - then makes these components available as a tree of files to the - software and turns a single CPU into a multitasking machine capable - of running scores of programs seemingly at the same time</para> - <indexterm zone="ch-bootable-kernel lfskernel"> - <primary sortas="b-lfskernel">lfskernel-&linux-version;</primary> - </indexterm> - </listitem> - </varlistentry> - - <varlistentry id="System.map"> - <term><filename>System.map-&linux-version;</filename></term> - <listitem> - <para>A list of addresses and symbols; it maps the entry points and - addresses of all the functions and data structures in the - kernel</para> - <indexterm zone="ch-bootable-kernel System.map"> - <primary sortas="e-/boot/System.map">/boot/System.map-&linux-version;</primary> - </indexterm> - </listitem> - </varlistentry> - - </variablelist> - - </sect2> - -</sect1> |