aboutsummaryrefslogtreecommitdiffstats
path: root/prologue/multilib.xml
diff options
context:
space:
mode:
Diffstat (limited to 'prologue/multilib.xml')
-rw-r--r--prologue/multilib.xml128
1 files changed, 128 insertions, 0 deletions
diff --git a/prologue/multilib.xml b/prologue/multilib.xml
new file mode 100644
index 000000000..b4bf7975d
--- /dev/null
+++ b/prologue/multilib.xml
@@ -0,0 +1,128 @@
+<?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 arch="ml_32,ml_x32,ml_all" id="pre-multilib">
+ <?dbhtml filename="multilib.html"?>
+
+ <title>About the Multilib Edition</title>
+
+ <sect2><title>What is Multilib</title>
+
+ <para>Today, most systems in the x86 world have a word size of 64
+ bit. The word size is a number of bits which can be used at once
+ in the most efficient way. Previous architectures of x86 processors
+ had a word size of 32 bit which means they have a different
+ understanding of what is the best alignment of data in memory as
+ well as they have a different mechanism to address a different size
+ of memory. Even the instruction set of the 64 bit processors is
+ quite simmilar to the instructions of 32 bit processors, binaries
+ (objects compiled to machine code) cannot directly be executed on
+ 64 bit systems.</para>
+
+ <para>Multilib is a mechanism to provide support for the 32 bit
+ binaries so that they can be executed of modern 64 bit CPUs.</para>
+
+ </sect2>
+
+ <sect2><title>Why doing Multilib?</title>
+
+ <para>From an educational point of view, LFS in its 'native' form is
+ probably the best way to see how a Linux system is built from source.
+ There is no need to confuse with different architectures. But when
+ there is a need to run 32 binaries and you don't want to build the
+ whole system in 32 bit (which would be waste of ressources
+ nowadays) then LFS-multilib is an option. Examples for such a
+ need could be
+ <itemizedlist>
+ <listitem><para>Closed-source software without source only
+ available for 32 bit. That may be the case for printer driver
+ or any other kind of hardware drivers, the company provides
+ the binaries. If you have such a driver, LFS-multilib
+ may help you getting the stuff running</para>
+ </listitem>
+ <listitem><para>If you want to go far beyond LFS and setup a
+ virtualization platform like <application>VirtualBox</application>,
+ you will need multilib support</para>
+ </listitem>
+ <listitem><para>or even just because you can</para>
+ </listitem>
+ </itemizedlist>
+
+ </para>
+
+ <para>The multilib edition of LFS goes a small step beyond and a
+ small step back to what has been said in the previous section
+ when talking about target architectures. On one hand, the multilib
+ edition is focused and <emphasis>limited</emphasis> to x86_64
+ architectures only, on the other hand, it <emphasis>expands</emphasis>
+ the instructions to utilize both possible architectures, namely
+ 32-bit as well as 64-bit.</para>
+
+ <para>It also goes a bit beyond the basic educational
+ approach of LFS which is to show you how to build a Linux system.
+ To achieve this, no support for additional architectures than
+ the default one for your system is required. If you haven't
+ previously built by the standard LFS book, you are encouraged to
+ do so before using this edition.</para>
+
+ </sect2>
+
+ <sect2><title>Building a Multilib System</title>
+
+ <para>Building a multilib system is not that much different from
+ building a system by using the 'native' LFS book. Beside some
+ tweaks here and there the most prominent difference is that
+ multilib requires compiling some applications up to three times:
+ one for the primary 64-bit architecture,
+ one for the 32-bit architecture (m32),
+ and once again for the 32-bit architecture with is 32-bit memory
+ access and 64 bit instruction set (mx32).</para>
+
+ <para>Continue only if you and your system meets the following
+ requirements:
+ <itemizedlist>
+ <listitem>
+ <para>you have a x86_64 compatible machine</para>
+ <note><para>
+ If you have access to the kernel config for your system,
+ you will need to have
+ <parameter>CONFIG_IA32_EMULATION=y</parameter>
+ set in order to build for <parameter>m32</parameter> and
+ <parameter>CONFIG_X86_X32=y</parameter> set in order to
+ build for <parameter>mx32</parameter>.
+ </para>
+ <para>
+ If you do not have access to the kernel config for your system,
+ you may be able to test for compatability by running the
+ following commands:
+ </para>
+<screen><userinput>echo 'int main(){}' &gt; dummy.c
+gcc -m32 dummy.c
+./a.out
+
+gcc -mx32 dummy.c
+./a.out</userinput></screen>
+ <para>
+ If either of the <command>./a.out</command> commands results in an
+ "Exec format error" message, then you do not have a system kernel
+ capable of building for that architecture within LFS, and so you
+ should probably look to build an LFS system without Multilib, but
+ with the required kernel capabilities, and use that to build a
+ Multilib system.
+ </para></note>
+ </listitem>
+ <listitem><para>you already have some experience with LFS</para></listitem>
+ <listitem><para>you have a need for 32-bit support</para></listitem>
+ </itemizedlist>
+ </para>
+
+ <para>If you passed all three requirements, go ahead and build LFS
+ in multilib mode.</para>
+
+ </sect2>
+
+</sect1>