source: postlfs/filesystems/uefi-bootloaders/grub-setup.xml@ 8a71122

11.3 12.0 12.1 kea ken/TL2024 ken/inkscape-core-mods ken/tuningfonts lazarus lxqt plabs/newcss python3.11 qt5new rahul/power-profiles-daemon renodr/vulkan-addition trunk xry111/llvm18 xry111/xf86-video-removal
Last change on this file since 8a71122 was 5b6873f4, checked in by Xi Ruoyao <xry111@…>, 18 months ago

efi: remove reference to CONFIG_EFI_VARS

It's already removed since Linux 6.0.

Link: https://git.kernel.org/torvalds/c/ab17c0cd
Reported-by: Zhang Wen <zhw2101024@…>

  • Property mode set to 100644
File size: 18.9 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 Graphics support ---&gt;
126 &lt;*&gt; Direct Rendering Manager [CONFIG_DRM]
127 [*] Enable legacy fbdev support for your modesetting driver [CONFIG_DRM_FBDEV_EMULATION]
128 &lt;*&gt; Simple framebuffer driver [CONFIG_DRM_SIMPLEDRM]
129 Frame buffer Devices ---&gt;
130 &lt;*&gt; Support for frame buffer devices ---&gt; [CONFIG_FB]
131 Console display driver support ---&gt;
132 [*] Framebuffer Console support [CONFIG_FRAMEBUFFER_CONSOLE]
133File systems ---&gt;
134 &lt;DOS/FAT/EXFAT/NT Filesystems ---&gt;
135 &lt;*/M&gt; VFAT (Windows-95) fs support [CONFIG_VFAT_FS]
136 Pseudo filesystems ---&gt;
137 &lt;*/M&gt; EFI Variable filesystem [CONFIG_EFIVAR_FS]</literal></screen>
138
139 <variablelist>
140 <title>The meaning of the configuration options:</title>
141
142 <varlistentry>
143 <term><parameter>CONFIG_EFI_STUB</parameter></term>
144 <listitem>
145 <para>On EFI systems, GRUB boots the Linux kernel by invoking the
146 EFI firmware to load it as an EFI application. So, EFI stub is
147 needed to wrap the kernel as an EFI application.</para>
148 </listitem>
149 </varlistentry>
150
151 <varlistentry>
152 <term>
153 <parameter>CONFIG_SYSFB_SIMPLEFB</parameter>,
154 <parameter>CONFIG_DRM</parameter>,
155 <parameter>CONFIG_DRM_FBDEV_EMULATION</parameter>,
156 <parameter>CONFIG_DRM_SIMPLEDRM</parameter>,
157 <parameter>CONFIG_FB</parameter>, and
158 <parameter>CONFIG_FRAMEBUFFER_CONSOLE</parameter></term>
159 <listitem>
160 <para>The combination of these options provides the Linux console
161 support on top of the UEFI framebuffer. To allow the kernel to
162 print debug messages at an early boot stage, they shouldn't be
163 built as kernel modules unless an initramfs will be used.</para>
164 </listitem>
165 </varlistentry>
166
167 </variablelist>
168
169 </sect2>
170
171 <sect2>
172 <title>Find or Create the EFI System Partition</title>
173
174 <para>
175 On EFI based systems, the bootloaders are installed in a special FAT32
176 partition called an <emphasis>EFI System Partition</emphasis> (ESP).
177 If your system supports EFI, and a recent version of some Linux
178 distribution or Windows is pre-installed, it's likely that the ESP
179 has already been created. As the
180 <systemitem class="username">root</systemitem> user, list all the
181 partitions on your hard drive (replace <userinput>sda</userinput>
182 with the device corresponding to the appropriate hard drive):
183 </para>
184
185 <screen role="nodump"><userinput>fdisk -l /dev/sda</userinput></screen>
186
187 <para>
188 The <quote>Type</quote> column of the ESP should be
189 <literal>EFI System</literal>.
190 </para>
191
192 <para>
193 If the system or the hard drive is new, or it's the first
194 installation of a UEFI-booted OS on the system, the ESP may not exist.
195 In that case, create a new partition, make a
196 <systemitem class="filesystem">vfat</systemitem> file system on it,
197 and set the partition type to <quote>EFI system</quote>. See the
198 instructions for the emergency boot device above as a reference.
199 </para>
200
201 <warning>
202 <para>
203 Some (old) UEFI implementations may require the ESP to be the first
204 partition on the disk.
205 </para>
206 </warning>
207
208 <para>
209 Now, as the <systemitem class="username">root</systemitem> user,
210 create the mount point for the ESP, and mount it (replace
211 <userinput>sda1</userinput> with the device node corresponding to
212 the ESP):
213 </para>
214
215<screen role="nodump"><userinput>mkdir -pv /boot/efi &amp;&amp;
216mount -v -t vfat /dev/sda1 /boot/efi</userinput></screen>
217
218 <para>
219 Add an entry for the ESP in
220 <filename>/etc/fstab</filename>, so it will be mounted automatically
221 during system boot:
222 </para>
223
224<screen role="nodump"><userinput>cat &gt;&gt; /etc/fstab &lt;&lt; EOF</userinput>
225<literal>/dev/sda1 /boot/efi vfat defaults 0 1</literal>
226<userinput>EOF</userinput></screen>
227
228 </sect2>
229
230 <sect2>
231 <title>Minimal Boot Configuration with GRUB and EFI</title>
232
233 <para>
234 On UEFI based systems, GRUB works by installing an EFI application
235 (a special kind of executable) into the ESP. The EFI firmware will
236 search boot loaders in EFI applications from boot entries recorded
237 in EFI variables, and additionally a hardcoded path
238 <filename>EFI/BOOT/BOOTX64.EFI</filename>. Normally, a boot loader
239 should be installed into a custom path and the path should be recorded
240 in the EFI variables. The use of the hardcoded path should be
241 avoided if possible. However, in some cases we have to use
242 the hardcoded path:
243 </para>
244
245 <itemizedlist>
246 <listitem>
247 <para>
248 The system is not booted with EFI yet, making EFI variables
249 inaccessible.
250 </para>
251 </listitem>
252 <listitem>
253 <para>
254 The EFI firmware is 64-bit but the LFS system is 32-bit, making
255 EFI variables inaccessible because the kernel cannot invoke EFI
256 runtime services with a different virtual address length.
257 </para>
258 </listitem>
259 <listitem>
260 <para>
261 LFS is built for a Live USB, so we cannot rely on EFI variables,
262 which are stored in NVRAM or EEPROM on the local machine.
263 </para>
264 </listitem>
265 <listitem>
266 <para>
267 You are unable or unwilling to install the
268 <application>efibootmgr</application> for manipulating boot
269 entries in EFI variables.
270 </para>
271 </listitem>
272 </itemizedlist>
273
274 <para>
275 In these cases, follow these instructions to install the GRUB EFI
276 application into the hardcoded path and make a minimal boot
277 configuration. Otherwise it's better to skip ahead and set up the
278 boot configuration normally.
279 </para>
280
281 <para>
282 To install GRUB with the EFI application in the hardcoded
283 path <filename>EFI/BOOT/BOOTX64.EFI</filename>, first ensure the boot
284 partition is mounted at <filename class="directory">/boot</filename>
285 and the ESP is mounted at
286 <filename class="directory">/boot/efi</filename>. Then, as the &root;
287 user, run the command:
288 </para>
289
290 <note>
291 <para>
292 This command will overwrite
293 <filename>/boot/efi/EFI/BOOT/BOOTX64.EFI</filename>. It may break a
294 bootloader already installed there. Back it up if you are not sure.
295 </para>
296 </note>
297
298 <screen role="nodump"><userinput>grub-install --target=x86_64-efi --removable</userinput></screen>
299
300 <para>
301 This command will install the GRUB EFI application into the hardcoded path
302 <filename>/boot/efi/EFI/BOOT/BOOTX64.EFI</filename>, so the EFI
303 firmware can find and load it. The remaining GRUB files are installed
304 in the <filename class="directory">/boot/grub</filename> directory and
305 will be loaded by <filename>BOOTX64.EFI</filename> during system boot.
306 </para>
307
308 <note>
309 <para>
310 The EFI firmware usually prefers the EFI applications with a path
311 stored in EFI variables to the EFI
312 application at the hardcoded path. So you may need to invoke the
313 boot selection menu or firmware setting interface to select the
314 newly installed GRUB manually on the next boot. Read the manual of
315 your motherboard or laptop to learn how.
316 </para>
317 </note>
318
319 <para>
320 If you've followed the instructions in this section and set up a minimal boot
321 configuration, now skip ahead to
322 <quote>Creating the GRUB Configuration File</quote>.
323 </para>
324 </sect2>
325
326 <sect2>
327 <title>Mount the EFI Variable File System</title>
328
329 <para>
330 The installation of GRUB on a UEFI platform requires that the EFI Variable
331 file system, <systemitem class="filesystem">efivarfs</systemitem>, is
332 mounted. As the <systemitem class="username">root</systemitem> user,
333 mount it if it's not already mounted:
334 </para>
335
336<screen role="nodump"><userinput>mountpoint /sys/firmware/efi/efivars || mount -v -t efivarfs efivarfs /sys/firmware/efi/efivars</userinput></screen>
337
338 <note revision="systemd">
339 <para>
340 If the system is booted with UEFI and systemd,
341 <systemitem class="filesystem">efivarfs</systemitem> will be mounted
342 automatically. However, in the LFS chroot environment it still needs to
343 be mounted manually.
344 </para>
345 </note>
346
347 <para revision="sysv">
348 Now add an entry for the
349 <systemitem class="filesystem">efivarfs</systemitem> in
350 <filename>/etc/fstab</filename> so it will be mounted automatically
351 during system boot:
352 </para>
353
354<screen revision="sysv" role="nodump"><userinput>cat &gt;&gt; /etc/fstab &lt;&lt; EOF</userinput>
355<literal>efivarfs /sys/firmware/efi/efivars efivarfs defaults 0 0</literal>
356<userinput>EOF</userinput></screen>
357
358 <warning>
359 <para>
360 If the system is not booted with UEFI, the directory
361 <filename class="directory">/sys/firmware/efi</filename> will be
362 missing. In this case you should boot the system in UEFI mode with
363 the emergency boot disk or using a minimal boot configuration created as
364 above, then mount
365 <systemitem class="filesystem">efivarfs</systemitem> and continue.
366 </para>
367 </warning>
368 </sect2>
369
370 <sect2>
371 <title>Setting Up the Configuration</title>
372
373 <para>
374 On UEFI based systems, GRUB works by installing an EFI application
375 (a special kind of executable) into
376 <filename class="directory">/boot/efi/EFI/[id]/grubx64.efi</filename>,
377 where <filename class="directory">/boot/efi</filename> is the mount
378 point of the ESP, and <literal>[id]</literal> is replaced with an
379 identifier specified in the <command>grub-install</command> command
380 line. GRUB will create an entry in the EFI variables containing
381 the path <literal>EFI/[id]/grubx64.efi</literal> so the EFI firmware
382 can find <filename>grubx64.efi</filename> and load it.
383 </para>
384
385 <para>
386 <filename>grubx64.efi</filename> is very lightweight (136 KB with
387 GRUB-2.06) so it will not use much space in the ESP. A typical ESP
388 size is 100 MB (for Windows boot manager, which uses about 50 MB in
389 the ESP). Once <filename>grubx64.efi</filename> has been loaded by the
390 firmware, it will load GRUB modules from the boot partition.
391 The default location is
392 <filename class="directory">/boot/grub</filename>.
393 </para>
394
395 <para>
396 As the <systemitem class="username">root</systemitem> user, install
397 the GRUB files into <filename>/boot/efi/EFI/LFS/grubx64.efi</filename>
398 and <filename class="directory">/boot/grub</filename>. Then set up the
399 boot entry in the EFI variables:
400 </para>
401
402<screen role="nodump"><userinput>grub-install --bootloader-id=LFS --recheck</userinput></screen>
403
404 <para>
405 If the installation is successful, the output should be:
406 </para>
407
408<screen role="nodump"><literal>Installing for x86_64-efi platform.
409Installation finished. No error reported.</literal></screen>
410
411 <para>
412 Issue the <command>efibootmgr | cut -f 1</command> command to recheck the EFI boot
413 configuration. An example of the output is:
414 </para>
415
416<screen role="nodump"><literal>BootCurrent: 0000
417Timeout: 1 seconds
418BootOrder: 0005,0000,0002,0001,0003,0004
419Boot0000* ARCH
420Boot0001* UEFI:CD/DVD Drive
421Boot0002* Windows Boot Manager
422Boot0003* UEFI:Removable Device
423Boot0004* UEFI:Network Device
424Boot0005* LFS</literal></screen>
425
426 <para>
427 Note that <literal>0005</literal> is the first in the
428 <literal>BootOrder</literal>, and <literal>Boot0005</literal>
429 is <literal>LFS</literal>. This means that on the next boot, the
430 version of GRUB installed by LFS will be used to boot the system.
431 </para>
432
433 </sect2>
434
435 <sect2>
436 <title>Creating the GRUB Configuration File</title>
437
438 <indexterm zone="grub-setup grub-video">
439 <primary sortas="e-boot-grub-grub-cfg">/boot/grub/grub.cfg</primary>
440 </indexterm>
441
442 <para>
443 Generate <filename>/boot/grub/grub.cfg</filename> to configure the
444 boot menu of GRUB:
445 </para>
446
447<screen role="nodump"><userinput>cat &gt; /boot/grub/grub.cfg &lt;&lt; EOF</userinput>
448<literal># Begin /boot/grub/grub.cfg
449set default=0
450set timeout=5
451
452insmod part_gpt
453insmod ext2
454set root=(hd0,2)
455
456if loadfont /boot/grub/fonts/unicode.pf2; then
457 set gfxmode=auto
458 insmod all_video
459 terminal_output gfxterm
460fi
461
462menuentry "GNU/Linux, Linux 5.19.2-lfs-11.2" {
463 linux /boot/vmlinuz-5.19.2-lfs-11.2 root=/dev/sda2 ro
464}
465
466menuentry "Firmware Setup" {
467 fwsetup
468}</literal>
469<userinput>EOF</userinput></screen>
470
471 <para>
472 <literal>(hd0,2)</literal>, <literal>sda2</literal>, and
473 <literal>5.19.2-lfs-11.2</literal> must match your
474 configuration.
475 </para>
476
477 <note>
478 <para>
479 From GRUB's perspective, the files are relative to the partitions
480 used. If you used a separate /boot partition, remove /boot from the
481 above paths (to kernel and to <filename>unicode.pf2</filename>). You
482 will also need to change the "set root" line to point to the boot
483 partition.
484 </para>
485 </note>
486
487 <para>
488 The <literal>Firmware Setup</literal> entry can be used to enter the
489 configuration interface provided by the firmware (sometimes called
490 <quote>BIOS configuration</quote>).
491 </para>
492 </sect2>
493
494 <sect2>
495 <title>Dual-booting with Windows</title>
496
497 <para>
498 Add a menu entry for Windows into <filename>grub.cfg</filename>:
499 </para>
500
501<screen role="nodump"><userinput>cat &gt;&gt; /boot/grub/grub.cfg &lt;&lt; EOF</userinput>
502<literal># Begin Windows addition
503
504menuentry "Windows 11" {
505 insmod fat
506 insmod chain
507 set root=(hd0,1)
508 chainloader /EFI/Microsoft/Boot/bootmgfw.efi
509}</literal>
510<userinput>EOF</userinput></screen>
511
512 <para>
513 <literal>(hd0,1)</literal> should be replaced with the GRUB
514 designated name for the ESP. The <literal>chainloader</literal>
515 directive can be used to tell GRUB to run another EFI executable,
516 in this case the Windows Boot Manager. You may put more usable tools
517 in EFI executable format (for example, an EFI shell) into the ESP and
518 create GRUB entries for them, as well.
519 </para>
520
521 </sect2>
522
523</sect1>
Note: See TracBrowser for help on using the repository browser.