Chapter08 indentation.

git-svn-id: http://svn.linuxfromscratch.org/LFS/trunk/BOOK@7229 4aa44e1e-78dd-0310-a6d2-fbcd4c07a689
This commit is contained in:
Manuel Canales Esparcia 2005-12-18 13:44:24 +00:00
parent 7686ca6aae
commit b78c7479d4
5 changed files with 315 additions and 271 deletions

View File

@ -1,16 +1,19 @@
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [ <!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
<!ENTITY % general-entities SYSTEM "../general.ent"> <!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities; %general-entities;
]> ]>
<chapter id="chapter-bootable" xreflabel="Chapter 8">
<?dbhtml dir="chapter08"?>
<title>Making the LFS System Bootable</title>
<?dbhtml filename="chapter08.html"?>
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="introduction.xml"/> <chapter id="chapter-bootable" xreflabel="Chapter 8">
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="fstab.xml"/> <?dbhtml dir="chapter08"?>
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="kernel.xml"/> <?dbhtml filename="chapter08.html"?>
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="grub.xml"/>
<title>Making the LFS System Bootable</title>
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="introduction.xml"/>
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="fstab.xml"/>
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="kernel.xml"/>
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="grub.xml"/>
</chapter> </chapter>

View File

@ -1,18 +1,23 @@
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [ <!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
<!ENTITY % general-entities SYSTEM "../general.ent"> <!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities; %general-entities;
]> ]>
<sect1 id="ch-bootable-fstab"> <sect1 id="ch-bootable-fstab">
<title>Creating the /etc/fstab File</title> <?dbhtml filename="fstab.html"?>
<?dbhtml filename="fstab.html"?>
<indexterm zone="ch-bootable-fstab"><primary sortas="e-/etc/fstab">/etc/fstab</primary></indexterm> <title>Creating the /etc/fstab File</title>
<para>The <filename>/etc/fstab</filename> file is used by some programs to <indexterm zone="ch-bootable-fstab">
determine where file systems are to be mounted by default, in which order, and <primary sortas="e-/etc/fstab">/etc/fstab</primary>
which must be checked (for integrity errors) prior to mounting. Create a new </indexterm>
file systems table like this:</para>
<para>The <filename>/etc/fstab</filename> file is used by some programs to
determine where file systems are to be mounted by default, in which order, and
which must be checked (for integrity errors) prior to mounting. Create a new
file systems table like this:</para>
<screen><userinput>cat &gt; /etc/fstab &lt;&lt; "EOF" <screen><userinput>cat &gt; /etc/fstab &lt;&lt; "EOF"
<literal># Begin /etc/fstab <literal># Begin /etc/fstab
@ -29,36 +34,35 @@ shm /dev/shm tmpfs defaults 0 0
# End /etc/fstab</literal> # End /etc/fstab</literal>
EOF</userinput></screen> EOF</userinput></screen>
<para>Replace <replaceable>[xxx]</replaceable>, <para>Replace <replaceable>[xxx]</replaceable>,
<replaceable>[yyy]</replaceable>, and <replaceable>[fff]</replaceable> <replaceable>[yyy]</replaceable>, and <replaceable>[fff]</replaceable>
with the values appropriate for the system, for example, <filename with the values appropriate for the system, for example, <filename
class="partition">hda2</filename>, <filename class="partition">hda2</filename>, <filename
class="partition">hda5</filename>, and <systemitem class="partition">hda5</filename>, and <systemitem
class="filesystem">ext2</systemitem>. For details on the six class="filesystem">ext2</systemitem>. For details on the six
fields in this file, see <command>man 5 fstab</command>.</para> fields in this file, see <command>man 5 fstab</command>.</para>
<para>The <filename class="directory">/dev/shm</filename> mount point <para>The <filename class="directory">/dev/shm</filename> mount point
for <systemitem class="filesystem">tmpfs</systemitem> is included to for <systemitem class="filesystem">tmpfs</systemitem> is included to
allow enabling POSIX-shared memory. The kernel must have the required allow enabling POSIX-shared memory. The kernel must have the required
support built into it for this to work (more about this is in the next support built into it for this to work (more about this is in the next
section). Please note that very little software currently uses section). Please note that very little software currently uses
POSIX-shared memory. Therefore, consider the <filename POSIX-shared memory. Therefore, consider the <filename
class="directory">/dev/shm</filename> mount point optional. For more class="directory">/dev/shm</filename> mount point optional. For more
information, see information, see
<filename>Documentation/filesystems/tmpfs.txt</filename> in the kernel <filename>Documentation/filesystems/tmpfs.txt</filename> in the kernel
source tree.</para> source tree.</para>
<para>There are other lines which may be added to the <para>There are other lines which may be added to the
<filename>/etc/fstab</filename> file. One example is a line for USB <filename>/etc/fstab</filename> file. One example is a line for USB
devices:</para> devices:</para>
<screen>usbfs /proc/bus/usb usbfs devgid=14,devmode=0660 0 0 </screen> <screen>usbfs /proc/bus/usb usbfs devgid=14,devmode=0660 0 0 </screen>
<para>This option will only work if <quote>Support for Host-side USB</quote> and <para>This option will only work if <quote>Support for Host-side USB</quote>
<quote>USB device filesystem</quote> are configured in the kernel. If and <quote>USB device filesystem</quote> are configured in the kernel. If
<quote>Support for Host-side USB</quote> is compiled as a module, then <quote>Support for Host-side USB</quote> is compiled as a module, then
<filename>usbcore</filename> must be listed in <filename>usbcore</filename> must be listed in
<filename>/etc/sysconfig/modules</filename>.</para> <filename>/etc/sysconfig/modules</filename>.</para>
</sect1> </sect1>

View File

@ -1,88 +1,93 @@
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [ <!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
<!ENTITY % general-entities SYSTEM "../general.ent"> <!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities; %general-entities;
]> ]>
<sect1 id="ch-bootable-grub"> <sect1 id="ch-bootable-grub">
<title>Making the LFS System Bootable</title> <?dbhtml filename="grub.html"?>
<?dbhtml filename="grub.html"?>
<indexterm zone="ch-bootable-grub"> <title>Making the LFS System Bootable</title>
<primary sortas="a-Grub">GRUB</primary>
<secondary>configuring</secondary></indexterm>
<para>Your shiny new LFS system is almost complete. One of the last <indexterm zone="ch-bootable-grub">
things to do is to ensure that the system can be properly booted. The <primary sortas="a-Grub">GRUB</primary>
instructions below apply only to computers of IA-32 architecture, <secondary>configuring</secondary>
meaning mainstream PCs. Information on <quote>boot loading</quote> for </indexterm>
other architectures should be available in the usual resource-specific
locations for those architectures.</para>
<para>Boot loading can be a complex area, so a few cautionary <para>Your shiny new LFS system is almost complete. One of the last
words are in order. Be familiar with the current boot loader and any other things to do is to ensure that the system can be properly booted. The
operating systems present on the hard drive(s) that need to be instructions below apply only to computers of IA-32 architecture,
bootable. Make sure that an emergency boot disk is ready to meaning mainstream PCs. Information on <quote>boot loading</quote> for
<quote>rescue</quote> the computer if the computer becomes other architectures should be available in the usual resource-specific
unusable (un-bootable).</para> locations for those architectures.</para>
<para>Earlier, we compiled and installed the GRUB boot loader software <para>Boot loading can be a complex area, so a few cautionary
in preparation for this step. The procedure involves writing some words are in order. Be familiar with the current boot loader and any other
special GRUB files to specific locations on the hard drive. We highly operating systems present on the hard drive(s) that need to be
recommend creating a GRUB boot floppy diskette as a backup. Insert a bootable. Make sure that an emergency boot disk is ready to
blank floppy diskette and run the following commands:</para> <quote>rescue</quote> the computer if the computer becomes
unusable (un-bootable).</para>
<para>Earlier, we compiled and installed the GRUB boot loader software
in preparation for this step. The procedure involves writing some
special GRUB files to specific locations on the hard drive. We highly
recommend creating a GRUB boot floppy diskette as a backup. Insert a
blank floppy diskette and run the following commands:</para>
<screen><userinput>dd if=/boot/grub/stage1 of=/dev/fd0 bs=512 count=1 <screen><userinput>dd if=/boot/grub/stage1 of=/dev/fd0 bs=512 count=1
dd if=/boot/grub/stage2 of=/dev/fd0 bs=512 seek=1</userinput></screen> dd if=/boot/grub/stage2 of=/dev/fd0 bs=512 seek=1</userinput></screen>
<para>Remove the diskette and store it somewhere safe. Now, run the <para>Remove the diskette and store it somewhere safe. Now, run the
<command>grub</command> shell:</para> <command>grub</command> shell:</para>
<screen><userinput>grub</userinput></screen> <screen><userinput>grub</userinput></screen>
<para>GRUB uses its own naming structure for drives and partitions in <para>GRUB uses its own naming structure for drives and partitions in
the form of <emphasis>(hdn,m)</emphasis>, where <emphasis>n</emphasis> the form of <emphasis>(hdn,m)</emphasis>, where <emphasis>n</emphasis>
is the hard drive number and <emphasis>m</emphasis> is the partition is the hard drive number and <emphasis>m</emphasis> is the partition
number, both starting from zero. For example, partition <filename number, both starting from zero. For example, partition <filename
class="partition">hda1</filename> is <emphasis>(hd0,0)</emphasis> to class="partition">hda1</filename> is <emphasis>(hd0,0)</emphasis> to
GRUB and <filename class="partition">hdb3</filename> is GRUB and <filename class="partition">hdb3</filename> is
<emphasis>(hd1,2)</emphasis>. In contrast to Linux, GRUB does not <emphasis>(hd1,2)</emphasis>. In contrast to Linux, GRUB does not
consider CD-ROM drives to be hard drives. For example, if using a CD consider CD-ROM drives to be hard drives. For example, if using a CD
on <filename class="partition">hdb</filename> and a second hard drive on <filename class="partition">hdb</filename> and a second hard drive
on <filename class="partition">hdc</filename>, that second hard drive on <filename class="partition">hdc</filename>, that second hard drive
would still be <emphasis>(hd1)</emphasis>.</para> would still be <emphasis>(hd1)</emphasis>.</para>
<para>Using the above information, determine the appropriate <para>Using the above information, determine the appropriate
designator for the root partition (or boot partition, if a separate designator for the root partition (or boot partition, if a separate
one is used). For the following example, it is assumed that the root one is used). For the following example, it is assumed that the root
(or separate boot) partition is <filename (or separate boot) partition is <filename
class="partition">hda4</filename>.</para> class="partition">hda4</filename>.</para>
<para>Tell GRUB where to search for its <para>Tell GRUB where to search for its
<filename>stage{1,2}</filename> files. The Tab key can be used <filename>stage{1,2}</filename> files. The Tab key can be used
everywhere to make GRUB show the alternatives:</para> everywhere to make GRUB show the alternatives:</para>
<screen><userinput>root (hd0,3)</userinput></screen> <screen><userinput>root (hd0,3)</userinput></screen>
<warning><para>The following command will overwrite the current boot <warning>
loader. Do not run the command if this is not desired, for example, if <para>The following command will overwrite the current boot loader. Do not
using a third party boot manager to manage the Master Boot Record run the command if this is not desired, for example, if using a third party
(MBR). In this scenario, it would make more sense to install boot manager to manage the Master Boot Record (MBR). In this scenario, it
GRUB into the <quote>boot sector</quote> of the LFS partition. In this would make more sense to install GRUB into the <quote>boot sector</quote>
case, this next command would become <userinput>setup of the LFS partition. In this case, this next command would become
(hd0,3)</userinput>.</para></warning> <userinput>setup (hd0,3)</userinput>.</para>
</warning>
<para>Tell GRUB to install itself into the MBR of <para>Tell GRUB to install itself into the MBR of
<filename class="partition">hda</filename>:</para> <filename class="partition">hda</filename>:</para>
<screen><userinput>setup (hd0)</userinput></screen> <screen><userinput>setup (hd0)</userinput></screen>
<para>If all went well, GRUB will have reported finding its files in <para>If all went well, GRUB will have reported finding its files in
<filename class="directory">/boot/grub</filename>. That's all there is <filename class="directory">/boot/grub</filename>. That's all there is
to it. Quit the <command>grub</command> shell:</para> to it. Quit the <command>grub</command> shell:</para>
<screen><userinput>quit</userinput></screen> <screen><userinput>quit</userinput></screen>
<para>Create a <quote>menu list</quote> file defining GRUB's boot menu:</para> <para>Create a <quote>menu list</quote> file defining GRUB's boot menu:</para>
<screen><userinput>cat &gt; /boot/grub/menu.lst &lt;&lt; "EOF" <screen><userinput>cat &gt; /boot/grub/menu.lst &lt;&lt; "EOF"
<literal># Begin /boot/grub/menu.lst <literal># Begin /boot/grub/menu.lst
@ -102,8 +107,8 @@ root (hd0,3)
kernel /boot/lfskernel-&linux-version; root=/dev/hda4</literal> kernel /boot/lfskernel-&linux-version; root=/dev/hda4</literal>
EOF</userinput></screen> EOF</userinput></screen>
<para>Add an entry for the host distribution if desired. It might look <para>Add an entry for the host distribution if desired. It might look
like this:</para> like this:</para>
<screen><userinput>cat &gt;&gt; /boot/grub/menu.lst &lt;&lt; "EOF" <screen><userinput>cat &gt;&gt; /boot/grub/menu.lst &lt;&lt; "EOF"
<literal>title Red Hat <literal>title Red Hat
@ -112,8 +117,8 @@ kernel /boot/kernel-2.6.5 root=/dev/hda3
initrd /boot/initrd-2.6.5</literal> initrd /boot/initrd-2.6.5</literal>
EOF</userinput></screen> EOF</userinput></screen>
<para>If dual-booting Windows, the following entry will allow <para>If dual-booting Windows, the following entry will allow
booting it:</para> booting it:</para>
<screen><userinput>cat &gt;&gt; /boot/grub/menu.lst &lt;&lt; "EOF" <screen><userinput>cat &gt;&gt; /boot/grub/menu.lst &lt;&lt; "EOF"
<literal>title Windows <literal>title Windows
@ -121,16 +126,15 @@ rootnoverify (hd0,0)
chainloader +1</literal> chainloader +1</literal>
EOF</userinput></screen> EOF</userinput></screen>
<para>If <command>info grub</command> does not provide all necessary material, additional <para>If <command>info grub</command> does not provide all necessary material,
information regarding GRUB is located on its website at: additional information regarding GRUB is located on its website at:
<ulink url="http://www.gnu.org/software/grub/"/>.</para> <ulink url="http://www.gnu.org/software/grub/"/>.</para>
<para>The FHS stipulates that GRUB's <filename>menu.lst</filename> file should be symlinked to <para>The FHS stipulates that GRUB's <filename>menu.lst</filename> file should
<filename class="symlink">/etc/grub/menu.lst</filename>. To satisfy this requirement, issue the be symlinked to <filename class="symlink">/etc/grub/menu.lst</filename>. To
following command:</para> satisfy this requirement, issue the following command:</para>
<screen><userinput>mkdir -v /etc/grub &amp;&amp; <screen><userinput>mkdir -v /etc/grub &amp;&amp;
ln -sv /boot/grub/menu.lst /etc/grub</userinput></screen> ln -sv /boot/grub/menu.lst /etc/grub</userinput></screen>
</sect1> </sect1>

View File

@ -1,16 +1,18 @@
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [ <!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
<!ENTITY % general-entities SYSTEM "../general.ent"> <!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities; %general-entities;
]> ]>
<sect1 id="ch-bootable-introduction">
<title>Introduction</title>
<?dbhtml filename="introduction.html"?>
<para>It is time to make the LFS system bootable. This chapter <sect1 id="ch-bootable-introduction">
discusses creating an <filename>fstab</filename> file, building a <?dbhtml filename="introduction.html"?>
kernel for the new LFS system, and installing the GRUB boot loader so
that the LFS system can be selected for booting at startup.</para> <title>Introduction</title>
<para>It is time to make the LFS system bootable. This chapter
discusses creating an <filename>fstab</filename> file, building a
kernel for the new LFS system, and installing the GRUB boot loader so
that the LFS system can be selected for booting at startup.</para>
</sect1> </sect1>

View File

@ -1,212 +1,243 @@
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [ <!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
<!ENTITY % general-entities SYSTEM "../general.ent"> <!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities; %general-entities;
]> ]>
<sect1 id="ch-bootable-kernel" role="wrap"> <sect1 id="ch-bootable-kernel" role="wrap">
<title>Linux-&linux-version;</title> <?dbhtml filename="kernel.html"?>
<?dbhtml filename="kernel.html"?>
<indexterm zone="ch-bootable-kernel"><primary sortas="a-Linux">Linux</primary></indexterm> <title>Linux-&linux-version;</title>
<sect2 role="package"><title/> <indexterm zone="ch-bootable-kernel">
<para>The Linux package contains the Linux kernel.</para> <primary sortas="a-Linux">Linux</primary>
</indexterm>
<segmentedlist> <sect2 role="package">
<segtitle>&buildtime;</segtitle> <title/>
<segtitle>&diskspace;</segtitle>
<seglistitem><seg>4.20 SBU</seg>
<seg>181 MB</seg></seglistitem>
</segmentedlist>
<segmentedlist> <para>The Linux package contains the Linux kernel.</para>
<segtitle>&dependencies;</segtitle>
<seglistitem><seg>Bash, Binutils, Coreutils, Findutils,
GCC, Glibc, Grep, Gzip, Make, Modutils, Perl, and Sed</seg></seglistitem>
</segmentedlist>
</sect2>
<sect2 role="installation"> <segmentedlist>
<title>Installation of the kernel</title> <segtitle>&buildtime;</segtitle>
<segtitle>&diskspace;</segtitle>
<para>Building the kernel involves a few steps&mdash;configuration, compilation, <seglistitem>
and installation. Read the <filename>README</filename> file in the kernel source <seg>4.20 SBU</seg>
tree for alternative methods to the way this book configures the kernel.</para> <seg>181 MB</seg>
</seglistitem>
</segmentedlist>
<para>Prepare for compilation by running the following command:</para> <segmentedlist>
<segtitle>&dependencies;</segtitle>
<seglistitem>
<seg>Bash, Binutils, Coreutils, Findutils, GCC, Glibc, Grep, Gzip,
Make, Modutils, Perl, and Sed</seg>
</seglistitem>
</segmentedlist>
</sect2>
<sect2 role="installation">
<title>Installation of the kernel</title>
<para>Building the kernel involves a few steps&mdash;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>make mrproper</userinput></screen> <screen><userinput>make mrproper</userinput></screen>
<para>This ensures that the kernel tree is absolutely clean. The <para>This ensures that the kernel tree is absolutely clean. The
kernel team recommends that this command be issued prior to each kernel team recommends that this command be issued prior to each
kernel compilation. Do not rely on the source tree being clean after kernel compilation. Do not rely on the source tree being clean after
un-tarring.</para> un-tarring.</para>
<para>If, in <xref linkend="ch-scripts-console" role=","/> it was decided to <para>If, in <xref linkend="ch-scripts-console" role=","/> it was decided to
compile the keymap into the kernel, issue the command below:</para> compile the keymap into the kernel, issue the command below:</para>
<screen role="nodump"><userinput>loadkeys -m /usr/share/kbd/keymaps/<replaceable>[path to keymap]</replaceable> &gt; \ <screen role="nodump"><userinput>loadkeys -m /usr/share/kbd/keymaps/<replaceable>[path to keymap]</replaceable> &gt; \
drivers/char/defkeymap.c</userinput></screen> drivers/char/defkeymap.c</userinput></screen>
<para>For example, if using a Dutch keyboard, use <para>For example, if using a Dutch keyboard, use
<filename>/usr/share/kbd/keymaps/i386/qwerty/nl.map.gz</filename>.</para> <filename>/usr/share/kbd/keymaps/i386/qwerty/nl.map.gz</filename>.</para>
<para>Configure the kernel via a menu-driven interface. BLFS has some <para>Configure the kernel via a menu-driven interface. BLFS has some
information regarding particular kernel configuration requirements of information regarding particular kernel configuration requirements of
packages outside of LFS at <ulink packages outside of LFS at <ulink
url="&blfs-root;view/svn/longindex.html#kernel-config-index"/>:</para> url="&blfs-root;view/svn/longindex.html#kernel-config-index"/>:</para>
<screen role="nodump"><userinput>make menuconfig</userinput></screen> <screen role="nodump"><userinput>make menuconfig</userinput></screen>
<para>Alternatively, <command>make oldconfig</command> may be more appropriate in some <para>Alternatively, <command>make oldconfig</command> may be more
situations. See the <filename>README</filename> file for more appropriate in some situations. See the <filename>README</filename>
information.</para> file for more information.</para>
<para>If desired, skip kernel configuration by copying the kernel <para>If desired, skip kernel configuration by copying the kernel
config file, <filename>.config</filename>, from the host system config file, <filename>.config</filename>, from the host system
(assuming it is available) to the unpacked <filename (assuming it is available) to the unpacked <filename
class="directory">linux-&linux-version;</filename> directory. However, class="directory">linux-&linux-version;</filename> directory. However,
we do not recommend this option. It is often better to explore all the we do not recommend this option. It is often better to explore all the
configuration menus and create the kernel configuration from configuration menus and create the kernel configuration from
scratch.</para> scratch.</para>
<note><para>NPTL requires the kernel to be compiled with GCC-3.x or later, in this case <note>
&gcc-version;. It is not recommended to compile the kernel with GCC-2.95.x, as <para>NPTL requires the kernel to be compiled with GCC-3.x or later, in
this causes failures in the Glibc test suite. Normally, this wouldn't be this case &gcc-version;. It is not recommended to compile the kernel with
mentioned as LFS doesn't build GCC-2.95.x. Unfortunately, the kernel GCC-2.95.x, as this causes failures in the Glibc test suite. Normally,
documentation is outdated and still claims GCC-2.95.3 is the recommended this wouldn't be mentioned as LFS doesn't build GCC-2.95.x. Unfortunately,
compiler.</para></note> the kernel documentation is outdated and still claims GCC-2.95.3 is the
recommended compiler.</para>
</note>
<para>Compile the kernel image and modules:</para> <para>Compile the kernel image and modules:</para>
<screen><userinput>make</userinput></screen> <screen><userinput>make</userinput></screen>
<para>If using kernel modules, an <filename>/etc/modprobe.conf</filename> file <para>If using kernel modules, an <filename>/etc/modprobe.conf</filename> file
may be needed. Information pertaining to modules and kernel configuration is may be needed. Information pertaining to modules and kernel configuration is
located in the kernel documentation in the <filename located in the kernel documentation in the <filename
class="directory">linux-&linux-version;/Documentation</filename> directory. class="directory">linux-&linux-version;/Documentation</filename> directory.
Also, <filename>modprobe.conf(5)</filename> may be of interest.</para> Also, <filename>modprobe.conf(5)</filename> may be of interest.</para>
<para>Be very careful when reading other documentation relating to kernel <para>Be very careful when reading other documentation relating to kernel
modules because it usually applies to 2.4.x kernels only. As far as we know, modules because it usually applies to 2.4.x kernels only. As far as we know,
kernel configuration issues specific to Hotplug and Udev are not documented. kernel configuration issues specific to Hotplug and Udev are not documented.
The problem is that Udev will create a device node only if Hotplug or a The problem is that Udev will create a device node only if Hotplug or a
user-written script inserts the corresponding module into the kernel, and not user-written script inserts the corresponding module into the kernel, and not
all modules are detectable by Hotplug. Note that statements like the one below all modules are detectable by Hotplug. Note that statements like the one below
in the <filename>/etc/modprobe.conf</filename> file do not work with in the <filename>/etc/modprobe.conf</filename> file do not work with
Udev:</para> Udev:</para>
<para><screen>alias char-major-XXX some-module</screen></para> <screen><literal>alias char-major-XXX some-module</literal></screen>
<para>Because of the complications with Hotplug, Udev, and modules, we <para>Because of the complications with Hotplug, Udev, and modules, we
strongly recommend starting with a completely non-modular kernel strongly recommend starting with a completely non-modular kernel
configuration, especially if this is the first time using Udev.</para> configuration, especially if this is the first time using Udev.</para>
<para>Install the modules, if the kernel configuration uses them:</para> <para>Install the modules, if the kernel configuration uses them:</para>
<screen><userinput>make modules_install</userinput></screen> <screen><userinput>make modules_install</userinput></screen>
<para>After kernel compilation is complete, additional steps are <para>After kernel compilation is complete, additional steps are
required to complete the installation. Some files need to be copied to required to complete the installation. Some files need to be copied to
the <filename class="directory">/boot</filename> directory.</para> the <filename class="directory">/boot</filename> directory.</para>
<para>The path to the kernel image may vary depending on the platform <para>The path to the kernel image may vary depending on the platform
being used. The following command assumes an x86 architecture:</para> being used. The following command assumes an x86 architecture:</para>
<screen><userinput>cp -v arch/i386/boot/bzImage /boot/lfskernel-&linux-version;</userinput></screen> <screen><userinput>cp -v arch/i386/boot/bzImage /boot/lfskernel-&linux-version;</userinput></screen>
<para><filename>System.map</filename> is a symbol file for the kernel. <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, 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 as well as the addresses of the kernel data structures for the running
kernel. Issue the following command to install the map file:</para> kernel. Issue the following command to install the map file:</para>
<screen><userinput>cp -v System.map /boot/System.map-&linux-version;</userinput></screen> <screen><userinput>cp -v System.map /boot/System.map-&linux-version;</userinput></screen>
<para>The kernel configuration file <filename>.config</filename> <para>The kernel configuration file <filename>.config</filename>
produced by the <command>make menuconfig</command> step produced by the <command>make menuconfig</command> step
above contains all the configuration selections for the kernel above contains all the configuration selections for the kernel
that was just compiled. It is a good idea to keep this file for future that was just compiled. It is a good idea to keep this file for future
reference:</para> reference:</para>
<screen><userinput>cp -v .config /boot/config-&linux-version;</userinput></screen> <screen><userinput>cp -v .config /boot/config-&linux-version;</userinput></screen>
<para>It is important to note that the files in the kernel source <para>It is important to note that the files in the kernel source
directory are not owned by <emphasis>root</emphasis>. Whenever a directory are not owned by <emphasis>root</emphasis>. Whenever a
package is unpacked as user <emphasis>root</emphasis> (like we did package is unpacked as user <emphasis>root</emphasis> (like we did
inside chroot), the files have the user and group IDs of whatever 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 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 for any other package to be installed because the source tree is
removed after the installation. However, the Linux 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 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 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 on the machine. That person would then have write access to the kernel
source.</para> source.</para>
<para>If the kernel source tree is going to be retained, run <para>If the kernel source tree is going to be retained, run
<command>chown -R 0:0</command> on the <filename <command>chown -R 0:0</command> on the <filename
class="directory">linux-&linux-version;</filename> directory to ensure class="directory">linux-&linux-version;</filename> directory to ensure
all files are owned by user <emphasis>root</emphasis>.</para> all files are owned by user <emphasis>root</emphasis>.</para>
<warning><para>Some kernel documentation recommends creating a symlink from <warning>
<filename class="symlink">/usr/src/linux</filename> pointing to the kernel <para>Some kernel documentation recommends creating a symlink from
source directory. This is specific to kernels prior to the 2.6 series and <filename class="symlink">/usr/src/linux</filename> pointing to the kernel
<emphasis>must not</emphasis> be created on an LFS system as it can cause source directory. This is specific to kernels prior to the 2.6 series and
problems for packages you may wish to build once your base LFS system is <emphasis>must not</emphasis> be created on an LFS system as it can cause
complete.</para> problems for packages you may wish to build once your base LFS system is
complete.</para>
<para>Also, the headers in the system's <para>Also, the headers in the system's
<filename class="directory">include</filename> directory should <filename class="directory">include</filename> directory should
<emphasis>always</emphasis> be the ones against which Glibc was compiled, <emphasis>always</emphasis> be the ones against which Glibc was compiled,
that is, the ones from the Linux-Libc-Headers package, and therefore, should that is, the ones from the Linux-Libc-Headers package, and therefore, should
<emphasis>never</emphasis> be replaced by the kernel headers.</para></warning> <emphasis>never</emphasis> be replaced by the kernel headers.</para>
</warning>
</sect2> </sect2>
<sect2 id="contents-kernel" role="content"><title>Contents of Linux</title> <sect2 id="contents-kernel" role="content">
<title>Contents of Linux</title>
<segmentedlist> <segmentedlist>
<segtitle>Installed files</segtitle> <segtitle>Installed files</segtitle>
<seglistitem><seg>config-&linux-version;, lfskernel-&linux-version;,
and System.map-&linux-version;</seg></seglistitem>
</segmentedlist>
<variablelist><bridgehead renderas="sect3">Short Descriptions</bridgehead> <seglistitem>
<?dbfo list-presentation="list"?> <seg>config-&linux-version;, lfskernel-&linux-version;, and
<?dbhtml list-presentation="table"?> System.map-&linux-version;</seg>
</seglistitem>
</segmentedlist>
<varlistentry id="config"> <variablelist>
<term><filename>config-&linux-version;</filename></term> <bridgehead renderas="sect3">Short Descriptions</bridgehead>
<listitem> <?dbfo list-presentation="list"?>
<para>Contains all the configuration selections for the kernel</para> <?dbhtml list-presentation="table"?>
<indexterm zone="ch-bootable-kernel config"><primary sortas="e-/boot/config">/boot/config-&linux-version;</primary></indexterm>
</listitem>
</varlistentry>
<varlistentry id="lfskernel"> <varlistentry id="config">
<term><filename>lfskernel-&linux-version;</filename></term> <term><filename>config-&linux-version;</filename></term>
<listitem> <listitem>
<para>The engine of the Linux system. When turning on the computer, <para>Contains all the configuration selections for the kernel</para>
the kernel is the first part of the operating system that gets loaded. <indexterm zone="ch-bootable-kernel config">
It detects and initializes all components of the computer's hardware, <primary sortas="e-/boot/config">/boot/config-&linux-version;</primary>
then makes these components available as a tree of files to the </indexterm>
software and turns a single CPU into a multitasking machine capable </listitem>
of running scores of programs seemingly at the same time</para> </varlistentry>
<indexterm zone="ch-bootable-kernel lfskernel"><primary sortas="b-lfskernel">lfskernel-&linux-version;</primary></indexterm>
</listitem>
</varlistentry>
<varlistentry id="System.map"> <varlistentry id="lfskernel">
<term><filename>System.map-&linux-version;</filename></term> <term><filename>lfskernel-&linux-version;</filename></term>
<listitem> <listitem>
<para>A list of addresses and symbols; it maps the entry points and <para>The engine of the Linux system. When turning on the computer,
addresses of all the functions and data structures in the the kernel is the first part of the operating system that gets loaded.
kernel</para> It detects and initializes all components of the computer's hardware,
<indexterm zone="ch-bootable-kernel System.map"><primary sortas="e-/boot/System.map">/boot/System.map-&linux-version;</primary></indexterm> then makes these components available as a tree of files to the
</listitem> software and turns a single CPU into a multitasking machine capable
</varlistentry> of running scores of programs seemingly at the same time</para>
</variablelist> <indexterm zone="ch-bootable-kernel lfskernel">
<primary sortas="b-lfskernel">lfskernel-&linux-version;</primary>
</indexterm>
</listitem>
</varlistentry>
</sect2> <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> </sect1>