[lfs] 03/03: grub: Add more details for GRUB booting procedure, provide how to grub-install for UEFI

"Git Owner" ([email protected] via lfs-book Mailing List) <[email protected]>
Newsgroups gmane.linux.lfs.book
Message-ID <[email protected]>
This is an automated email from the git hooks/post-receive script.

git pushed a commit to branch xry111/uefi
in repository lfs.

commit 96e231234ea04a94954417bd09600cabeaac30c5
Author: Xi Ruoyao <[email protected]>
AuthorDate: Mon Dec 23 15:10:44 2024 +0800

    grub: Add more details for GRUB booting procedure, provide how to grub-install for UEFI
---
 chapter10/grub.xml | 106 +++++++++++++++++++++++++++++++++++++++++------------
 1 file changed, 82 insertions(+), 24 deletions(-)

diff --git a/chapter10/grub.xml b/chapter10/grub.xml
index 00be1d6c0..90dd4e908 100644
--- a/chapter10/grub.xml
+++ b/chapter10/grub.xml
@@ -73,10 +73,29 @@ xorriso -as cdrecord -v dev=/dev/cdrw blank=as_needed grub-img.iso</userinput></
   <sect2>
     <title>Setting Up the Configuration</title>
 
-    <para>GRUB works by writing data to the first physical track of the
-    hard disk.  This area is not part of any file system.  The programs
-    there access GRUB modules in the boot partition.  The default location
-    is /boot/grub/.</para>
+    <para>If booting the system via BIOS, GRUB works by writing a stub to
+    the first sector (named the Master Boot Record, or MBR) of the hard
+    disk.  This area is not part of any file system.  The BIOS loads and
+    execute the content of MBR, then the stub loads the main GRUB image from
+    the BIOS Boot Partition.  The GRUB image is stored as raw data instead
+    of a file (there must be no file system on the BIOS Boot Partition), so
+    the stub don't need to support any file system and it can be made small
+    enough to fit in the MBR.</para>
+
+    <para>If booting the system via UEFI, GRUB works by storing the main
+    GRUB image as a PE-COFF executable file at a standard location in the
+    EFI System Partition.  The EFI firmware loads the file at the standard
+    location and execute it.</para>
+
+    <para>Many GRUB functions (including booting a Linux kernel) are
+    not included in the main GRUB image.  They are stored in some file
+    system as GRUB modules.  This file system is usually mounted in a
+    way that the GRUB modules can be accessed at
+    <filename class='directory'>/boot/grub</filename> on most Linux
+    distros.  To avoid the chicken-and-egg problem,
+    <command>grub-install</command> embeds the modules necessary to
+    access this file system into the main GRUB image, so it can find
+    and load other modules.</para>
 
     <para>The location of the boot partition is a choice of the user that
     affects the configuration.  One recommendation is to have a separate small
@@ -100,25 +119,66 @@ xorriso -as cdrecord -v dev=/dev/cdrw blank=as_needed grub-img.iso</userinput></
     (or separate boot) partition is <filename
     class="partition">sda2</filename>.</para>
 
-    <para>Install the GRUB files into <filename
+    <para>For booting via BIOS, first make sure the boot partition is mounted
+    (if using a separate one), and the BIOS Boot partition exists.
+    Then install the GRUB files into <filename
     class="directory">/boot/grub</filename> and set up the boot track:</para>
 
     <warning>
       <para>The following command will overwrite the current boot loader. Do not
       run the command if this is not desired, for example, if using a third party
-      boot manager to manage the Master Boot Record (MBR).</para>
+      boot manager to manage the MBR.</para>
     </warning>
 
-<screen role="nodump"><userinput>grub-install /dev/sda</userinput></screen>
+<screen role="nodump"><userinput>grub-install /dev/sda --target=i386-pc</userinput></screen>
 
-    <note>
-      <para>If the system has been booted using UEFI,
-      <command>grub-install</command> will try to install files for the
-      <emphasis>x86_64-efi</emphasis> target, but those files
-      have not been installed in <xref linkend="chapter-building-system"/>.
-      If this is the case, add <option>--target i386-pc</option> to the
-      command above.</para>
-    </note>
+    <para>For booting via UEFI, first make sure the boot partition is mounted
+    (if using a separate one) and the EFI System Partition is mounted at
+    <filename class='directory'>/boot/efi</filename>.  Then install the GRUB
+    files into <filename class="directory">/boot/grub</filename> and the
+    main GRUB image into
+    <filename>/boot/efi/EFI/BOOT/BOOTX64.EFI</filename>:</para>
+
+    <warning>
+      <para>The following command will overwrite the
+      <filename>/boot/efi/EFI/BOOT/BOOTX64.EFI</filename> file.
+      If it already exists, it's likely the entry of another boot loader
+      (for example the GRUB installation from the host distro, or the
+      Windows Boot Manager).  Backup the file so it can be restored later,
+      or loaded as a secondary boot loader by the new GRUB installation
+      from LFS.</para>
+    </warning>
+
+    <screen role="nodump"><userinput>grub-install --target=x86_64-efi --removable</userinput></screen>
+
+    <para>
+      The command above assumes 64-bit UEFI firmware.
+      If you want to make the system bootable on a 32-bit UEFI firmware,
+      run the command again with <literal>x86_64-efi</literal> replaced by
+      <literal>i386-efi</literal>.
+    </para>
+
+    <para>
+      The <parameter>--removable</parameter> option makes
+      <command>grub-install</command> use the standard location,
+      i.e. <filename>EFI/BOOT/BOOTX64.EFI</filename> (or
+      <filename>EFI/BOOT/BOOTIA32.EFI</filename> for
+      <literal>i386-efi</literal>), instead of the location GRUB prefers
+      (<filename>EFI/GRUB/GRUBX64.EFI</filename> or
+      <filename>EFI/GRUB/GRUBIA32.EFI</filename>).  Using a non-standard
+      location would need to record the location in a EFI variable, but
+      LFS lacks the utility for manipulating EFI varaibles.
+    </para>
+
+    <para>
+      The GRUB installation for BIOS, 64-bit UEFI, and 32-bit UEFI can
+      coexist and share the same configuration.  So you can create both
+      the BIOS Boot Partition and the EFI System Partition, and install
+      GRUB for all the supported firmware types (i.e. running three
+      <command>grub-install</command> commands) if you are unsure about
+      your firmware type, or you plan to move the hard drive to a different
+      computer.
+    </para>
 
   </sect2>
 
@@ -150,14 +210,11 @@ EOF</userinput></screen>
       <systemitem class='filesystem'>ext2</systemitem>,
       <systemitem class='filesystem'>ext3</systemitem>, and
       <systemitem class='filesystem'>ext4</systemitem> filesystems.
-      The <command>grub-install</command> command has embedded some modules
-      into the main <application>GRUB</application> image (installed into
-      the MBR or the GRUB BIOS partition) to access the other modules
-      (in <filename class='directory'>/boot/grub/i386-pc</filename>) without
-      a chicken-or-egg issue, so with a typical configuration these two
-      modules are already embedded and those two <command>insmod</command>
-      commands will do nothing.  But they do no harm anyway, and they may
-      be needed with some rare configurations.
+      As we've discussed, in a typical configuration these two
+      modules are already embedded in the main GRUB image by
+      <command>grub-install</command> and those two
+      <command>insmod</command> commands will do nothing.  But they do no
+      harm anyway, and they may be needed with some rare configurations.
     </para>
 
     <para>
@@ -165,7 +222,8 @@ EOF</userinput></screen>
       resolution and color depth of the VESA framebuffer to be passed to the
       kernel.  It's necessary for the kernel SimpleDRM driver to use the
       VESA framebuffer.  You can use a different resolution or color depth
-      value which better suits for your monitor.
+      value which better suits for your monitor.  This line does nothing
+      when the system is booted via UEFI, but it does no harm anyway.
     </para>
 
     <note><para>From <application>GRUB</application>'s perspective, the

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.

-- 
http://lists.linuxfromscratch.org/sympa/info/lfs-book
Unsubscribe: See the above information page
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.