Using GRUB to Set Up the Boot Process with UEFI

Slå Av Sikker Oppstart

BLFS har ikke de nødvendige pakkene for å støtte Sikker Oppstart. Til å sette opp oppstartsprosessen med GRUB og UEFI i BLFS, Sikker Oppstart må slås av fra konfigurasjonsgrensesnittet til fastvaren. Les dokumentasjonen fra produsenten av dtt system for å finne ut hvordan.

Kjernekonfigurasjon for UEFI støtte

Aktiver følgende alternativer i kjernekonfigurasjonen og kompiler kjernen på nytt om nødvendig:

Processor type and features --->
  [*] EFI runtime service support                                          [EFI]
  [*]   EFI stub support                                              [EFI_STUB]

-*- Enable the block layer --->                                          [BLOCK]
  Partition Types --->
    [ /*] Advanced partition selection                      [PARTITION_ADVANCED]
    [*]     EFI GUID Partition support                           [EFI_PARTITION]

Device Drivers --->
  Firmware Drivers --->
    [*] Mark VGA/VBE/EFI FB as generic system framebuffer       [SYSFB_SIMPLEFB]
  Graphics support --->
    <*> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) --->
                                                                      ...  [DRM]
      [*] Enable legacy fbdev support for your modesetting driver
                                                      ...  [DRM_FBDEV_EMULATION]
      <*> Simple framebuffer driver                              [DRM_SIMPLEDRM]
    Console display driver support --->
      [*] Framebuffer Console support                      [FRAMEBUFFER_CONSOLE]

File systems --->
  DOS/FAT/EXFAT/NT Filesystems --->
    <*/M> VFAT (Windows-95) fs support                                 [VFAT_FS]
  Pseudo filesystems --->
    <*/M> EFI Variable filesystem                                    [EFIVAR_FS]
  -*- Native language support --->                                         [NLS]
    <*/M> Codepage 437 (United States, Canada)                [NLS_CODEPAGE_437]
    <*/M> NLS ISO 8859-1  (Latin 1; Western European Languages)  [NLS_ISO8859_1]

Betydningen av konfigurasjonsalternativene:

CONFIG_PARTITION_ADVANCED

Hvis det ikke er aktivert, CONFIG_EFI_PARTITION vil bli aktivert automatisk. Men når den er aktivert, må du stille inn CONFIG_EFI_PARTITION til å aktiveres også.

CONFIG_SYSFB_SIMPLEFB, CONFIG_DRM, CONFIG_DRM_FBDEV_EMULATION, CONFIG_DRM_SIMPLEDRM, CONFIG_FB, and CONFIG_FRAMEBUFFER_CONSOLE

Kombinasjonen av disse alternativene gir Linux konsollen støtte på toppen av UEFI rammebufferen. For å tillate kjernen å skrive ut feilsøkingsmeldinger på et tidlig oppstartsstadium, bør de ikke bli bygget som kjernemoduler med mindre en initramfs skal brukes.

Opprett en Nødoppstartsdiskett

Sørg for at en nødoppstartsdiskett er klar til å «redde» systemet i tilfelle systemet blir uoppstartbart. Å lage en nødoppstartsdisk med GRUB for et EFI basert system, finn en ekstra USB flashstasjon og opprett et vfat filsystemet på den. Installer dosfstools-4.2 først, som root bruker:

[Advarsel]

Advarsel

Følgende kommando vil slette alle mapper og filer på partisjonen. Sørg for at USB flashstasjonen ikke inneholder data som du trenger, og endre sdx1 til enhetsnoden som tilsvarer den første partisjonen til USB flashstasjonen. Vær forsiktig så du ikke overskriver harddisken med en skrivefeil!

mkfs.vfat /dev/sdx1

Fortsatt som root bruker, bruk fdisk verktøyet for å sette den første partisjonen av USB flashstasjonen til å være en «EFI system» partisjon (endre sdx til enhetsnoden tilsvarende til USB flashstasjonen):

fdisk /dev/sdx

Welcome to fdisk (util-linux 2.39.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): t
Partition number (1-9, default 9): 1
Partition type or alias (type L to list all): uefi
Changed type of partition 'Linux filesystem' to 'EFI System'.

Command (m for help): w
The partition table has been altered.
Syncing disks.

Fortsatt som root bruker, opprette et monteringspunkt for EFI partisjonen på USB flashstasjonen og monter den:

mount --mkdir -v -t vfat /dev/sdx1 -o codepage=437,iocharset=iso8859-1 \
      /mnt/rescue

Installer GRUB for EFI på partisjonen:

grub-install --target=x86_64-efi --removable \
             --efi-directory=/mnt/rescue --boot-directory=/mnt/rescue

Avmonter partisjonen:

umount /mnt/rescue

Nå kan USB flashstasjonen brukes som en nødoppstartsdisk på hvilken som helst x86-64 UEFI plattform. For å lære hvordan du velger denne flashstasjonen som oppstartsenhet. les bruksanvisningen til hovedkortet eller den bærbare datamaskinen. Det vil starte opp systemet og vise GRUB skallet. Så du kan skrive kommandoer for å starte operativsystemet fra harddisken.

Finn eller Opprett EFI Systempartisjonen

På EFI baserte systemer er oppstartslastere installert i en spesiell FAT32 partisjon kalt EFI System Partition (ESP). Hvis systemet ditt støtter EFI, og en nyere versjon av en Linux distribusjon eller Windows er forhåndsinstallert, er det sannsynlig at ESP allerede er opprettet. Som root bruker, list opp alle partisjoner på harddisken (erstatt sda med enheten som tilsvarer den aktuelle harddisken):

fdisk -l /dev/sda

The «Type» kolonnen i ESP skal være EFI System.

Hvis systemet eller harddisken er ny, eller det er den første installasjon av et UEFI oppstartet OS på systemet, kan det hende at ESP ikke eksisterer. Installer i så fall dosfstools-4.2 først. Deretter oppretter du en ny partisjon, lag et vfat filsystem på den, og sett partisjonstypen til «EFI system.» Se instruksjoner for nødoppstartsenheten ovenfor som referanse.

[Advarsel]

Advarsel

Noen (gamle) UEFI implementeringer kan kreve at ESP er den første partisjon på disken.

Nå, som root bruker, lag monteringspunktet for ESP, og monter det (erstatt sda1 med enhetsnoden som tilsvarer ESP):

mount --mkdir -v -t vfat /dev/sda1 -o codepage=437,iocharset=iso8859-1 \
      /boot/efi

Hvis du vil montere ESP automatisk under systemoppstart, som root bruker, legg til en oppføring for ESP i /etc/fstab:

cat >> /etc/fstab << EOF
/dev/sda1 /boot/efi vfat codepage=437,iocharset=iso8859-1 0 1
EOF

Minimal Oppstartskonfigurasjon med GRUB og EFI

På UEFI baserte systemer fungerer GRUB ved å installere en EFI applikasjon (en spesiell type kjørbar) inn i ESP. EFI fastvaren vil søke oppstartslastere i EFI applikasjoner fra registrerte oppstartsoppføringer i EFI variabler, og i tillegg en hardkodet bane EFI/BOOT/BOOTX64.EFI. Vanligvis en oppstartslaster som skal installeres i en tilpasset bane, og banen skal registreres i EFI variablene. Bruken av den hardkodede banen bør unngås hvis mulig. Men i noen tilfeller må vi bruke den hardkodede banen:

  • Systemet er ikke oppstartet med EFI ennå, noe som gjør EFI variabler utilgjengelig.

  • EFI fastvaren er 64-bit, men LFS-systemet er 32-bit, noe som gjør EFI variabler utilgjengelige fordi kjernen ikke kan påkalle EFI kjøretidstjenester med en annen virtuell adresselengde.

  • LFS er bygget for en Live USB, så vi kan ikke stole på EFI variabler, som er lagret i NVRAM eller EEPROM på den lokale maskinen.

  • Du er ikke i stand til eller vil ikke installere efibootmgr for å manipulere oppstartsoppføringer i EFI variabler.

I disse tilfellene, følg disse instruksjonene for å installere GRUB EFI applikasjonen inn i den hardkodede banen og lag en minimal oppstartskonfigurasjon. Ellers er det bedre å gå videre og sette opp oppstartskonfigurasjon normalt.

For å installere GRUB med EFI applikasjonen i den hardkodede banen EFI/BOOT/BOOTX64.EFI, sørg først for at oppstartspartisjonen er montert som /boot og ESP er montert som /boot/efi. Deretter, som root bruker, kjør kommandoen:

[Notat]

Notat

Denne kommandoen vil overskrive /boot/efi/EFI/BOOT/BOOTX64.EFI. Det kan ødelegge en oppstartslaster allerede installert der. Sikkerhetskopier den hvis du ikke er sikker.

grub-install --target=x86_64-efi --removable

Denne kommandoen vil installere GRUB EFI applikasjonen i den hardkodede banen /boot/efi/EFI/BOOT/BOOTX64.EFI, så EFI fastvaren kan finne og laste den. De resterende GRUB filene er installert i /boot/grub mappen og vil bli lastet av BOOTX64.EFI under systemoppstart.

[Notat]

Notat

EFI fastvaren foretrekker vanligvis EFI applikasjonene med en bane lagret i EFI variabler til EFI applikasjon på den hardkodede banen. Så du må kanskje påkalle oppstartsmeny eller fastvareinnstillingsgrensesnitt for å velge den nyinstallert GRUB manuelt ved neste oppstart. Les manualen til hovedkortet eller den bærbare datamaskinen for å lære hvordan.

Hvis du har fulgt instruksjonene i denne delen og satt opp en minimal oppstartskonfigurasjon, hopp nå videre til «Opprette GRUB Konfigurasjonsfilen.»

Monter EFI Variabelt Filsystem

Installasjonen av GRUB på en UEFI plattform krever at et EFI variabelt filsystem, efivarfs, er montert. Som root bruker, monter det hvis det ikke allerede er montert:

mountpoint /sys/firmware/efi/efivars || mount -v -t efivarfs efivarfs /sys/firmware/efi/efivars
[Notat]

Notat

Hvis systemet startes opp med UEFI og systemd, efivarfs vil bli montert automatisk. Men i LFS chrootmiljøet trenger det fortsatt å monteres manuelt.

[Advarsel]

Advarsel

Hvis systemet ikke er startet opp med UEFI, vil mappen /sys/firmware/efi mangle. I dette tilfellet bør du starte systemet i UEFI modus med nødoppstartsdisken eller ved å bruke en minimal oppstartskonfigurasjon opprettet som over, og monter deretter efivarfs og fortsett.

Sette Opp Konfigurasjonen

På UEFI baserte systemer fungerer GRUB ved å installere en EFI applikasjon (en spesiell type kjørbar) i /boot/efi/EFI/[id]/grubx64.efi, hvor /boot/efi er monteringspunktet til ESP, og [id] erstattes med en identifikator spesifisert i grub-install kommandolinjen. GRUB vil opprette en oppføring i EFI variablene som inneholder banen EFI/[id]/grubx64.efi så EFI fastvaren kan finne grubx64.efi og laste den.

grubx64.efi er veldig lite (136 KB med GRUB-2.06), så den vil ikke bruke mye plass i ESP. En typisk ESP størrelse er 100 MB (for Windows oppstartsbehandler, som bruker omtrent 50 MB i ESP). Med en gang grubx64.efi har blitt lastet av fastvare, vil den laste GRUB moduler fra oppstartspartisjonen. Standardplasseringen er /boot/grub.

Som root bruker, installer GRUB filer i /boot/efi/EFI/LFS/grubx64.efi og /boot/grub. Sett deretter opp oppstartsoppføringer i EFI variablene:

grub-install --bootloader-id=LFS --recheck

Hvis installasjonen er vellykket, bør utdataen være:

Installing for x86_64-efi platform.
Installation finished. No error reported.

Kjør efibootmgr | cut -f 1 kommandoen for å kontrollere EFI oppstarskonfigurasjonen på nytt. Et eksempel på utdataen er:

BootCurrent: 0000
Timeout: 1 seconds
BootOrder: 0005,0000,0002,0001,0003,0004
Boot0000* ARCH
Boot0001* UEFI:CD/DVD Drive
Boot0002* Windows Boot Manager
Boot0003* UEFI:Removable Device
Boot0004* UEFI:Network Device
Boot0005* LFS

Merk at 0005 er den første i BootOrder, og Boot0005 er LFS. Dette betyr at på neste oppstart, vil versjonen av GRUB installert av LFS bli brukt til å starte opp systemet.

Opprette GRUB Konfigurasjonsfilen

Generer /boot/grub/grub.cfg for å konfigurere oppstartsmenyen for GRUB:

cat > /boot/grub/grub.cfg << EOF
# Begin /boot/grub/grub.cfg
set default=0
set timeout=5

insmod part_gpt
insmod ext2
set root=(hd0,2)

insmod efi_gop
insmod efi_uga
if loadfont /boot/grub/fonts/unicode.pf2; then
  terminal_output gfxterm
fi

menuentry "GNU/Linux, Linux 6.10.5-lfs-12.2" {
  linux   /boot/vmlinuz-6.10.5-lfs-12.2 root=/dev/sda2 ro
}

menuentry "Firmware Setup" {
  fwsetup
}
EOF

Referer til LFS boken for grunnleggende kunnskap om grub.cfg filen. (hd0,2), sda2, og 6.10.5-lfs-12.2 må stemme overens med din konfigurasjon.

insmod efi_gop og insmod efi_uga direktiver laster to moduler for EFI basert videostøtte. På de fleste systemer er efi_gop modulen nok. efi_uga modulen er bare nyttig for eldre systemer, men det er ufarlig å laste den uansett. Videostøtten er nødvendig for at terminal_output gfxterm direktivet egentlig skal virke.

terminal_output gfxterm direktivet endrer skjermoppløsningen til GRUB menyen for å matche skjermenheten din. Det vil bryte gjengivelsen hvis unicode.pf2 fontdatafilen ikke er lastet inn, så den er beskyttet av et if direktiv.

[Notat]

Notat

Fra GRUB sitt perspektiv er filene i forhold til partisjonene brukt. Hvis du brukte en separat /bootpartisjon, fjern /boot fra overstående stier (til kjernen og til unicode.pf2). Du må også endre "set root" linjen for å peke til oppstartspartisjonen.

The Firmware Setup oppføringen kan brukes til å angi konfigurasjonsgrensesnitt levert av fastvaren (noen ganger kalt «BIOS configuration»).

Oppstart sammen med Windows

Legg til en menyoppføring for Windows i grub.cfg:

cat >> /boot/grub/grub.cfg << EOF
# Begin Windows addition

menuentry "Windows 11" {
  insmod fat
  insmod chain
  set root=(hd0,1)
  chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}
EOF

(hd0,1) bør erstattes med det GRUB utpekte navnet for ESP. chainloader direktivet kan brukes til å fortelle GRUB om å kjøre en annen EFI kjørbar, i dette tilfellet Windows Boot Manager. Du kan bruke mer brukbare verktøy i EFI kjørbart format (for eksempel et EFI skall) inn i ESP og lage GRUB oppføringer for dem også.