source: postlfs/filesystems/uefi-bootloaders/grub-setup.xml@ 3f2db3a6

11.3 12.0 12.1 kea ken/TL2024 ken/inkscape-core-mods ken/tuningfonts lazarus lxqt plabs/newcss plabs/python-mods python3.11 qt5new rahul/power-profiles-daemon renodr/vulkan-addition trunk xry111/llvm18 xry111/xf86-video-removal
Last change on this file since 3f2db3a6 was 3f2db3a6, checked in by Pierre Labastie <pierre.labastie@…>, 18 months ago

Remove sect1info tags

They only contain a date tag that is nowhere used.

  • Property mode set to 100644
File size: 19.5 KB
Line 
1<?xml version="1.0" encoding="ISO-8859-1"?>
2<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
3 "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
4 <!ENTITY % general-entities SYSTEM "../../../general.ent">
5 %general-entities;
6]>
7
8<sect1 id="grub-setup" xreflabel="Using GRUB to Set Up the Boot Process with UEFI">
9 <?dbhtml filename="grub-setup.html"?>
10
11
12 <title>Using GRUB to Set Up the Boot Process with UEFI</title>
13
14 <sect2>
15 <title>Turn Off Secure Boot</title>
16
17 <para>
18 BLFS does not have the essential packages to support Secure Boot. To
19 set up the boot process with GRUB and UEFI in BLFS, Secure
20 Boot must be turned off from the configuration interface of the
21 firmware. Read the documentation provided by the manufacturer of your
22 system to find out how.
23 </para>
24 </sect2>
25
26 <sect2>
27 <title>Create an Emergency Boot Disk</title>
28
29 <para>
30 Ensure that an emergency boot disk is ready to <quote>rescue</quote>
31 the system in case the system becomes un-bootable. To make an
32 emergency boot disk with GRUB for an EFI based system, find a spare
33 USB flash drive and create a
34 <systemitem class="filesystem">vfat</systemitem> file system on it.
35 Install <xref linkend="dosfstools"/> first, then
36 as the <systemitem class="username">root</systemitem> user:
37 </para>
38
39 <warning>
40 <para>
41 The following command will erase all directories and files in the
42 partition. Make sure your USB flash drive contains no data which
43 will be needed, and change <userinput>sdx1</userinput> to the
44 device node corresponding to the first partition of the USB flash
45 drive. Be careful not to overwrite your hard drive with a typo!
46 </para>
47 </warning>
48
49 <screen role="nodump"><userinput>mkfs.vfat /dev/sdx1</userinput></screen>
50
51 <para>
52 Still as the <systemitem class="username">root</systemitem> user, use
53 the <command>fdisk</command> utility to set the first partition
54 of the USB flash drive to be an <quote>EFI system</quote> partition
55 (change <userinput>sdx</userinput> to the device node corresponding
56 to your USB flash drive):
57 </para>
58
59<screen role="nodump"><userinput>fdisk /dev/sdx</userinput>
60<literal>
61Welcome to fdisk (util-linux 2.38.1).
62Changes will remain in memory only, until you decide to write them.
63Be careful before using the write command.
64
65
66Command (m for help): </literal><userinput>t</userinput>
67<literal>Partition number (1-9, default 9): </literal><userinput>1</userinput>
68<literal>Partition type or alias (type L to list all): </literal><userinput>uefi</userinput>
69<literal>Changed type of partition 'Linux filesystem' to 'EFI System'.
70
71Command (m for help): </literal><userinput>w</userinput>
72<literal>The partition table has been altered.
73Calling ioctl() to re-read partition table.
74Syncing disks.</literal></screen>
75
76 <para>
77 Still as the <systemitem class="username">root</systemitem> user,
78 create a mount point for the EFI partition on the USB flash drive
79 and mount it:
80 </para>
81
82<screen role="nodump"><userinput>mkdir -pv /mnt/rescue &amp;&amp;
83mount -v -t vfat /dev/sdx1 /mnt/rescue</userinput></screen>
84
85 <para>
86 Install GRUB for EFI on the partition:
87 </para>
88
89<screen role="nodump"><userinput>grub-install --target=x86_64-efi --removable --efi-directory=/mnt/rescue --boot-directory=/mnt/rescue</userinput></screen>
90
91 <para>
92 Unmount the partition:
93 </para>
94
95<screen role="nodump"><userinput>umount /mnt/rescue</userinput></screen>
96
97 <para>
98 Now the USB flash drive can be used as an emergency boot disk on any x86-64
99 UEFI platform. It will boot the system and show the GRUB shell. Then you
100 can type commands to boot your operating system from the hard drive.
101 To learn how to select the boot device, read the manual of your
102 motherboard or laptop.
103 </para>
104
105 </sect2>
106
107 <sect2 role="kernel" id="uefi-kernel">
108 <title>Kernel Configuration for UEFI support</title>
109
110 <para>
111 Enable the following options in the kernel configuration and recompile
112 the kernel if necessary:
113 </para>
114
115<screen><literal>Processor type and features ---&gt;
116 [*] EFI runtime service support [CONFIG_EFI]
117 [*] EFI stub support [CONFIG_EFI_STUB]
118Enable the block layer ---&gt;
119 Partition Types ---&gt;
120 [*] Advanced partition selection [CONFIG_PARTITION_ADVANCED]
121 [*] EFI GUID Partition support [CONFIG_EFI_PARTITION]
122Device Drivers ---&gt;
123 Firmware Drivers ---&gt;
124 [*] Mark VGA/VBE/EFI FB as generic system framebuffer [CONFIG_SYSFB_SIMPLEFB]
125 EFI (Extensible Firmware Interface) Support ---&gt;
126 &lt; &gt; EFI Variable Support via sysfs [CONFIG_EFI_VARS]
127 Graphics support ---&gt;
128 &lt;*&gt; Direct Rendering Manager [CONFIG_DRM]
129 [*] Enable legacy fbdev support for your modesetting driver [CONFIG_DRM_FBDEV_EMULATION]
130 &lt;*&gt; Simple framebuffer driver [CONFIG_DRM_SIMPLEDRM]
131 Frame buffer Devices ---&gt;
132 &lt;*&gt; Support for frame buffer devices ---&gt; [CONFIG_FB]
133 Console display driver support ---&gt;
134 [*] Framebuffer Console support [CONFIG_FRAMEBUFFER_CONSOLE]
135File systems ---&gt;
136 &lt;DOS/FAT/EXFAT/NT Filesystems ---&gt;
137 &lt;*/M&gt; VFAT (Windows-95) fs support [CONFIG_VFAT_FS]
138 Pseudo filesystems ---&gt;
139 &lt;*/M&gt; EFI Variable filesystem [CONFIG_EFIVAR_FS]</literal></screen>
140
141 <variablelist>
142 <title>The meaning of the configuration options:</title>
143
144 <varlistentry>
145 <term><parameter>CONFIG_EFI_STUB</parameter></term>
146 <listitem>
147 <para>Although the EFI stub is designed to boot a kernel directly from
148 the UEFI firmware (without a bootloader like GRUB), GRUB needs the
149 kernel to be loaded to support the EFI handover protocol enabled by
150 this option.</para>
151 </listitem>
152 </varlistentry>
153
154 <varlistentry>
155 <term><parameter>CONFIG_EFI_VARS</parameter></term>
156 <listitem>
157 <para>Don't use this deprecated option because of a 1024-byte
158 variable size limit. Its function is replaced by
159 <parameter>CONFIG_EFIVAR_FS</parameter>.</para>
160 </listitem>
161 </varlistentry>
162
163 <varlistentry>
164 <term>
165 <parameter>CONFIG_SYSFB_SIMPLEFB</parameter>,
166 <parameter>CONFIG_DRM</parameter>,
167 <parameter>CONFIG_DRM_FBDEV_EMULATION</parameter>,
168 <parameter>CONFIG_DRM_SIMPLEDRM</parameter>,
169 <parameter>CONFIG_FB</parameter>, and
170 <parameter>CONFIG_FRAMEBUFFER_CONSOLE</parameter></term>
171 <listitem>
172 <para>The combination of these options provides the Linux console
173 support on top of the UEFI framebuffer. To allow the kernel to
174 print debug messages at an early boot stage, they shouldn't be
175 built as kernel modules unless an initramfs will be used.</para>
176 </listitem>
177 </varlistentry>
178
179 </variablelist>
180
181 </sect2>
182
183 <sect2>
184 <title>Find or Create the EFI System Partition</title>
185
186 <para>
187 On EFI based systems, the bootloaders are installed in a special FAT32
188 partition called an <emphasis>EFI System Partition</emphasis> (ESP).
189 If your system supports EFI, and a recent version of some Linux
190 distribution or Windows is pre-installed, it's likely that the ESP
191 has already been created. As the
192 <systemitem class="username">root</systemitem> user, list all the
193 partitions on your hard drive (replace <userinput>sda</userinput>
194 with the device corresponding to the appropriate hard drive):
195 </para>
196
197 <screen role="nodump"><userinput>fdisk -l /dev/sda</userinput></screen>
198
199 <para>
200 The <quote>Type</quote> column of the ESP should be
201 <literal>EFI System</literal>.
202 </para>
203
204 <para>
205 If the system or the hard drive is new, or it's the first
206 installation of a UEFI-booted OS on the system, the ESP may not exist.
207 In that case, create a new partition, make a
208 <systemitem class="filesystem">vfat</systemitem> file system on it,
209 and set the partition type to <quote>EFI system</quote>. See the
210 instructions for the emergency boot device above as a reference.
211 </para>
212
213 <warning>
214 <para>
215 Some (old) UEFI implementations may require the ESP to be the first
216 partition on the disk.
217 </para>
218 </warning>
219
220 <para>
221 Now, as the <systemitem class="username">root</systemitem> user,
222 create the mount point for the ESP, and mount it (replace
223 <userinput>sda1</userinput> with the device node corresponding to
224 the ESP):
225 </para>
226
227<screen role="nodump"><userinput>mkdir -pv /boot/efi &amp;&amp;
228mount -v -t vfat /dev/sda1 /boot/efi</userinput></screen>
229
230 <para>
231 Add an entry for the ESP in
232 <filename>/etc/fstab</filename>, so it will be mounted automatically
233 during system boot:
234 </para>
235
236<screen role="nodump"><userinput>cat &gt;&gt; /etc/fstab &lt;&lt; EOF</userinput>
237<literal>/dev/sda1 /boot/efi vfat defaults 0 1</literal>
238<userinput>EOF</userinput></screen>
239
240 </sect2>
241
242 <sect2>
243 <title>Minimal Boot Configuration with GRUB and EFI</title>
244
245 <para>
246 On UEFI based systems, GRUB works by installing an EFI application
247 (a special kind of executable) into the ESP. The EFI firmware will
248 search boot loaders in EFI applications from boot entries recorded
249 in EFI variables, and additionally a hardcoded path
250 <filename>EFI/BOOT/BOOTX64.EFI</filename>. Normally, a boot loader
251 should be installed into a custom path and the path should be recorded
252 in the EFI variables. The use of the hardcoded path should be
253 avoided if possible. However, in some cases we have to use
254 the hardcoded path:
255 </para>
256
257 <itemizedlist>
258 <listitem>
259 <para>
260 The system is not booted with EFI yet, making EFI variables
261 inaccessible.
262 </para>
263 </listitem>
264 <listitem>
265 <para>
266 The EFI firmware is 64-bit but the LFS system is 32-bit, making
267 EFI variables inaccessible because the kernel cannot invoke EFI
268 runtime services with a different virtual address length.
269 </para>
270 </listitem>
271 <listitem>
272 <para>
273 LFS is built for a Live USB, so we cannot rely on EFI variables,
274 which are stored in NVRAM or EEPROM on the local machine.
275 </para>
276 </listitem>
277 <listitem>
278 <para>
279 You are unable or unwilling to install the
280 <application>efibootmgr</application> for manipulating boot
281 entries in EFI variables.
282 </para>
283 </listitem>
284 </itemizedlist>
285
286 <para>
287 In these cases, follow these instructions to install the GRUB EFI
288 application into the hardcoded path and make a minimal boot
289 configuration. Otherwise it's better to skip ahead and set up the
290 boot configuration normally.
291 </para>
292
293 <para>
294 To install GRUB with the EFI application in the hardcoded
295 path <filename>EFI/BOOT/BOOTX64.EFI</filename>, first ensure the boot
296 partition is mounted at <filename class="directory">/boot</filename>
297 and the ESP is mounted at
298 <filename class="directory">/boot/efi</filename>. Then, as the &root;
299 user, run the command:
300 </para>
301
302 <note>
303 <para>
304 This command will overwrite
305 <filename>/boot/efi/EFI/BOOT/BOOTX64.EFI</filename>. It may break a
306 bootloader already installed there. Back it up if you are not sure.
307 </para>
308 </note>
309
310 <screen role="nodump"><userinput>grub-install --target=x86_64-efi --removable</userinput></screen>
311
312 <para>
313 This command will install the GRUB EFI application into the hardcoded path
314 <filename>/boot/efi/EFI/BOOT/BOOTX64.EFI</filename>, so the EFI
315 firmware can find and load it. The remaining GRUB files are installed
316 in the <filename class="directory">/boot/grub</filename> directory and
317 will be loaded by <filename>BOOTX64.EFI</filename> during system boot.
318 </para>
319
320 <note>
321 <para>
322 The EFI firmware usually prefers the EFI applications with a path
323 stored in EFI variables to the EFI
324 application at the hardcoded path. So you may need to invoke the
325 boot selection menu or firmware setting interface to select the
326 newly installed GRUB manually on the next boot. Read the manual of
327 your motherboard or laptop to learn how.
328 </para>
329 </note>
330
331 <para>
332 If you've followed the instructions in this section and set up a minimal boot
333 configuration, now skip ahead to
334 <quote>Creating the GRUB Configuration File</quote>.
335 </para>
336 </sect2>
337
338 <sect2>
339 <title>Mount the EFI Variable File System</title>
340
341 <para>
342 The installation of GRUB on a UEFI platform requires that the EFI Variable
343 file system, <systemitem class="filesystem">efivarfs</systemitem>, is
344 mounted. As the <systemitem class="username">root</systemitem> user,
345 mount it if it's not already mounted:
346 </para>
347
348<screen role="nodump"><userinput>mountpoint /sys/firmware/efi/efivars || mount -v -t efivarfs efivarfs /sys/firmware/efi/efivars</userinput></screen>
349
350 <note revision="systemd">
351 <para>
352 If the system is booted with UEFI and systemd,
353 <systemitem class="filesystem">efivarfs</systemitem> will be mounted
354 automatically. However, in the LFS chroot environment it still needs to
355 be mounted manually.
356 </para>
357 </note>
358
359 <para revision="sysv">
360 Now add an entry for the
361 <systemitem class="filesystem">efivarfs</systemitem> in
362 <filename>/etc/fstab</filename> so it will be mounted automatically
363 during system boot:
364 </para>
365
366<screen revision="sysv" role="nodump"><userinput>cat &gt;&gt; /etc/fstab &lt;&lt; EOF</userinput>
367<literal>efivarfs /sys/firmware/efi/efivars efivarfs defaults 0 0</literal>
368<userinput>EOF</userinput></screen>
369
370 <warning>
371 <para>
372 If the system is not booted with UEFI, the directory
373 <filename class="directory">/sys/firmware/efi</filename> will be
374 missing. In this case you should boot the system in UEFI mode with
375 the emergency boot disk or using a minimal boot configuration created as
376 above, then mount
377 <systemitem class="filesystem">efivarfs</systemitem> and continue.
378 </para>
379 </warning>
380 </sect2>
381
382 <sect2>
383 <title>Setting Up the Configuration</title>
384
385 <para>
386 On UEFI based systems, GRUB works by installing an EFI application
387 (a special kind of executable) into
388 <filename class="directory">/boot/efi/EFI/[id]/grubx64.efi</filename>,
389 where <filename class="directory">/boot/efi</filename> is the mount
390 point of the ESP, and <literal>[id]</literal> is replaced with an
391 identifier specified in the <command>grub-install</command> command
392 line. GRUB will create an entry in the EFI variables containing
393 the path <literal>EFI/[id]/grubx64.efi</literal> so the EFI firmware
394 can find <filename>grubx64.efi</filename> and load it.
395 </para>
396
397 <para>
398 <filename>grubx64.efi</filename> is very lightweight (136 KB with
399 GRUB-2.06) so it will not use much space in the ESP. A typical ESP
400 size is 100 MB (for Windows boot manager, which uses about 50 MB in
401 the ESP). Once <filename>grubx64.efi</filename> has been loaded by the
402 firmware, it will load GRUB modules from the boot partition.
403 The default location is
404 <filename class="directory">/boot/grub</filename>.
405 </para>
406
407 <para>
408 As the <systemitem class="username">root</systemitem> user, install
409 the GRUB files into <filename>/boot/efi/EFI/LFS/grubx64.efi</filename>
410 and <filename class="directory">/boot/grub</filename>. Then set up the
411 boot entry in the EFI variables:
412 </para>
413
414<screen role="nodump"><userinput>grub-install --bootloader-id=LFS --recheck</userinput></screen>
415
416 <para>
417 If the installation is successful, the output should be:
418 </para>
419
420<screen role="nodump"><literal>Installing for x86_64-efi platform.
421Installation finished. No error reported.</literal></screen>
422
423 <para>
424 Issue the <command>efibootmgr | cut -f 1</command> command to recheck the EFI boot
425 configuration. An example of the output is:
426 </para>
427
428<screen role="nodump"><literal>BootCurrent: 0000
429Timeout: 1 seconds
430BootOrder: 0005,0000,0002,0001,0003,0004
431Boot0000* ARCH
432Boot0001* UEFI:CD/DVD Drive
433Boot0002* Windows Boot Manager
434Boot0003* UEFI:Removable Device
435Boot0004* UEFI:Network Device
436Boot0005* LFS</literal></screen>
437
438 <para>
439 Note that <literal>0005</literal> is the first in the
440 <literal>BootOrder</literal>, and <literal>Boot0005</literal>
441 is <literal>LFS</literal>. This means that on the next boot, the
442 version of GRUB installed by LFS will be used to boot the system.
443 </para>
444
445 </sect2>
446
447 <sect2>
448 <title>Creating the GRUB Configuration File</title>
449
450 <indexterm zone="grub-setup grub-video">
451 <primary sortas="e-boot-grub-grub-cfg">/boot/grub/grub.cfg</primary>
452 </indexterm>
453
454 <para>
455 Generate <filename>/boot/grub/grub.cfg</filename> to configure the
456 boot menu of GRUB:
457 </para>
458
459<screen role="nodump"><userinput>cat &gt; /boot/grub/grub.cfg &lt;&lt; EOF</userinput>
460<literal># Begin /boot/grub/grub.cfg
461set default=0
462set timeout=5
463
464insmod part_gpt
465insmod ext2
466set root=(hd0,2)
467
468if loadfont /boot/grub/fonts/unicode.pf2; then
469 set gfxmode=auto
470 insmod all_video
471 terminal_output gfxterm
472fi
473
474menuentry "GNU/Linux, Linux 5.19.2-lfs-11.2" {
475 linux /boot/vmlinuz-5.19.2-lfs-11.2 root=/dev/sda2 ro
476}
477
478menuentry "Firmware Setup" {
479 fwsetup
480}</literal>
481<userinput>EOF</userinput></screen>
482
483 <para>
484 <literal>(hd0,2)</literal>, <literal>sda2</literal>, and
485 <literal>5.19.2-lfs-11.2</literal> must match your
486 configuration.
487 </para>
488
489 <note>
490 <para>
491 From GRUB's perspective, the files are relative to the partitions
492 used. If you used a separate /boot partition, remove /boot from the
493 above paths (to kernel and to <filename>unicode.pf2</filename>). You
494 will also need to change the "set root" line to point to the boot
495 partition.
496 </para>
497 </note>
498
499 <para>
500 The <literal>Firmware Setup</literal> entry can be used to enter the
501 configuration interface provided by the firmware (sometimes called
502 <quote>BIOS configuration</quote>).
503 </para>
504 </sect2>
505
506 <sect2>
507 <title>Dual-booting with Windows</title>
508
509 <para>
510 Add a menu entry for Windows into <filename>grub.cfg</filename>:
511 </para>
512
513<screen role="nodump"><userinput>cat &gt;&gt; /boot/grub/grub.cfg &lt;&lt; EOF</userinput>
514<literal># Begin Windows addition
515
516menuentry "Windows 11" {
517 insmod fat
518 insmod chain
519 set root=(hd0,1)
520 chainloader /EFI/Microsoft/Boot/bootmgfw.efi
521}</literal>
522<userinput>EOF</userinput></screen>
523
524 <para>
525 <literal>(hd0,1)</literal> should be replaced with the GRUB
526 designated name for the ESP. The <literal>chainloader</literal>
527 directive can be used to tell GRUB to run another EFI executable,
528 in this case the Windows Boot Manager. You may put more usable tools
529 in EFI executable format (for example, an EFI shell) into the ESP and
530 create GRUB entries for them, as well.
531 </para>
532
533 </sect2>
534
535</sect1>
Note: See TracBrowser for help on using the repository browser.