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.
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.
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:
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/sdxWelcome 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):
tPartition number (1-9, default 9):
1Partition type or alias (type L to list all):
uefiChanged type of partition 'Linux filesystem' to 'EFI System'. Command (m for help):
wThe 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.
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.
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
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:
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.
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.”
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
Hvis systemet startes opp med UEFI og systemd, efivarfs
vil bli montert automatisk. Men i
LFS chrootmiljøet trenger det fortsatt å monteres manuelt.
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.
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.
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.
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”).
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å.