| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217 | <?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [  <!ENTITY % general-entities SYSTEM "../general.ent">  %general-entities;]><sect1 id="ch-bootable-kernel" xreflabel="Linux" role="wrap"><title>Linux-&linux-version;</title><?dbhtml filename="kernel.html"?><indexterm zone="ch-bootable-kernel"><primary sortas="a-Linux">Linux</primary></indexterm><sect2 role="package"><title/><para>The Linux package contains the kernel and the header files.</para><segmentedlist><segtitle>&buildtime;</segtitle><segtitle>&diskspace;</segtitle><seglistitem><seg>All default options: 4.20 SBU</seg><seg>All default options: 181 MB</seg></seglistitem></segmentedlist><segmentedlist><segtitle>Linux installation depends on</segtitle><seglistitem><seg>Bash, Binutils, Coreutils, Findutils,GCC, Glibc, Grep, Gzip, Make, Modutils, Perl, Sed</seg></seglistitem></segmentedlist></sect2><sect2 role="installation"><title>Installation of the kernel</title><para>Building the kernel involves a few steps: configuration, compilation, andinstallation. If you don't like the way this book configures the kernel, viewthe <filename>README</filename> file in the kernel source tree for alternativemethods.</para><para>Prepare for compilation by running the following command:</para><screen><userinput>make mrproper</userinput></screen><para>This ensures that the kernel tree is absolutely clean. The kernel teamrecommends that this command be issued prior to <emphasis>each</emphasis>kernel compilation. You shouldn't rely on the source tree being clean afterun-tarring.</para><para>Also, ensure that the kernel does not attempt to pass hotplugging eventsto userspace until userspace specifies that it is ready:</para><screen><userinput>sed -i 's@/sbin/hotplug@/bin/true@' kernel/kmod.c</userinput></screen><para>If, in <xref linkend="ch-scripts-console"/>, you decided you wantto compile the keymap into the kernel, issue the command below:</para><screen><userinput>loadkeys -m /usr/share/kbd/keymaps/<replaceable>[path to  keymap]</replaceable> > \    <replaceable>[unpacked sources dir]</replaceable>/linux-&linux-version;/drivers/char/defkeymap.c</userinput></screen><para>For example, if you have a Dutch keyboard, you would use<filename>/usr/share/kbd/keymaps/i386/qwerty/nl.map.gz</filename>.</para><para>Configure the kernel via a menu-driven interface:</para><screen><userinput>make menuconfig</userinput></screen><para><command>make oldconfig</command> may be more appropriate in somesituations. See the <filename>README</filename> file for moreinformation.</para><para>If you wish, you may skip kernel configuration by simply copying thekernel config file, <filename>.config</filename>, from your host system(assuming it is available) to the unpacked <filename class="directory">linux-&linux-version;</filename>directory. However, wedon't recommend this option. You're much better off exploring all theconfiguration menus and creating your own kernel configuration fromscratch.</para><para>For POSIX shared memory support, ensure that the kernel config option<quote>Virtual memory file system support</quote> is enabled. It resides withinthe <quote>File systems</quote> menu and is normally enabled by default.</para><para>LFS bootscripts make the assumption that you either compileboth <quote>Support for Host-side USB</quote> and<quote>USB device filesystem</quote> directly into the kernel, or don't compile them atall. Bootscripts will not work properly if it is a module (<filename>usbcore.ko</filename>).</para><note><para>NPTL requires the kernel to be compiled with GCC 3.x, in this case&gcc-version;. Compiling with 2.95.x is known to cause failures in the glibctestsuite, so do <emphasis>not</emphasis> compile the kernel with gcc 2.95.xunless you know what you're getting yourself into.</para></note><para>Compile the kernel image and modules:</para><screen><userinput>make</userinput></screen><para>If you intend to use kernel modules, you may need an<filename>/etc/modprobe.conf</filename> file. Information pertainingto modules and to kernel configuration in general may be found in thekernel documentation, which is found in the<filename class="directory">linux-&linux-version;/Documentation</filename> directory.The modprobe.conf man page<!-- removed for review from tldp.organd the kernel HOWTO at<ulink url="http://www.tldp.org/HOWTO/Kernel-HOWTO.html"/> -->may also be of interest to you.</para><para>Be very suspicious while reading other documentation, because itusually applies to 2.4.x kernels only. As far as the editors know, kernelconfiguration issues specific to Hotplug and Udevare documented nowhere. The problem is that Udev will create a device nodeonly if Hotplug or a user-written script inserts the corresponding moduleinto the kernel, and not all modules are detectable by Hotplug. Notethat statements like<screen>alias char-major-XXX some-module</screen>in <filename>/etc/modprobe.conf</filename> file don't work withUdev, and other aliases are often unnecessary with Hotplug.</para><para>Because of all those compilcations with Hotplug, Udev and modules, westrongly recommend you to start with a completely non-modular kernelconfiguration, especially if this is the first time you use Udev.</para><para>Install the modules, if your kernel configuration uses them:</para><screen><userinput>make modules_install</userinput></screen><para>If you have a lot of modules and very little space, you may want toconsider stripping and compressing the modules. For most people such compressionisn't worth the trouble, but if you're really pressed for space, then have a look at<ulink url="http://www.linux-mips.org/archives/linux-mips/2002-04/msg00031.html"/>.</para><para>Kernel compilation has finished but more steps are required to completethe installation. Some files need to be copied to the <filename class="directory">/boot</filename>directory.</para><para>The path to the kernel image may vary depending on the platform you'reusing. Issue the following command to install the kernel:</para><screen><userinput>cp arch/i386/boot/bzImage /boot/lfskernel-&linux-version;</userinput></screen><para><filename>System.map</filename> is a symbol file for the kernel. It mapsthe function entry points of every function in the kernel API (Application Programming Interface), as well as theaddresses of the kernel data structures for the running kernel. Issue thefollowing command to install the map file:</para><screen><userinput>cp System.map /boot/System.map-&linux-version;</userinput></screen><para><filename>.config</filename> is the kernel configuration file that wasproduced by the <command>make menuconfig</command> step above. It contains allthe config selections for the kernel that was just compiled. It's a good ideato keep this file for future reference:</para><screen><userinput>cp .config /boot/config-&linux-version;</userinput></screen><para>It is important to note that the files in the kernel source directory arenot owned by <emphasis>root</emphasis>. Whenever you unpack a package as user<emphasis>root</emphasis> (like we did here inside chroot), the files end uphaving the user and group IDs of whatever they were on the packager's computer.This is usually not a problem for any other package you install because youremove the source tree after the installation. But the Linux source tree isoften kept around for a long time, so there's a chance that whatever user IDthe packager used will be assigned to somebody on your machine and then thatperson would have write access to the kernel source.</para><para>If you are going to keep the kernel source tree around, you may want torun <command>chown -R 0:0</command> on the<filename class="directory">linux-&linux-version;</filename> directory to ensure all files areowned by user <emphasis>root</emphasis>.</para></sect2><sect2 id="contents-kernel" role="content"><title>Contents of Linux</title><segmentedlist><segtitle>Installed files</segtitle><seglistitem><seg>the kernel, the kernel headers,and the System.map</seg></seglistitem></segmentedlist><variablelist><title>Short descriptions</title><varlistentry id="kernel"><term>The <emphasis>kernel</emphasis></term><listitem><indexterm zone="ch-bootable-kernel kernel"><primary sortas="b-kernel">kernel</primary></indexterm><para>is the engine of your Linux system.When switching on your box, the kernel is the first part of your operatingsystem that gets loaded. It detects and initializes all the components of yourcomputer's hardware, then makes these components available as a tree of filesto the software, and turns a single CPU into a multi-tasking machine capableof running scores of programs seemingly at the same time.</para></listitem></varlistentry><varlistentry id="kernel-headers"><term>The <emphasis>kernel headers</emphasis></term><listitem><indexterm zone="ch-bootable-kernel kernel-headers"><primary sortas="e-kernel-headers">kernel headers</primary></indexterm><para>define the interface to theservices that the kernel provides. The headers in your system's<filename class="directory">include</filename> directory should <emphasis>always</emphasis> bethe ones against which Glibc was compiled and should therefore<emphasis>not</emphasis> be replaced when upgrading the kernel.</para></listitem></varlistentry><varlistentry id="System.map"><term><filename>System.map</filename></term><listitem><indexterm zone="ch-bootable-kernel System.map"><primary sortas="e-/boot/System.map">/boot/System.map</primary></indexterm><para>is a list of addresses and symbols. It maps the entry points and addresses of all the functions and data structures in the kernel.</para></listitem></varlistentry></variablelist></sect2></sect1>
 |