10.3.1. Installasjon av kjernen
Å bygge kjernen innebærer noen få trinn—konfigurasjon, kompilering
og installasjon. Les README
filen i
kjernekildetreet for alternative metoder til måten denne boken
konfigurerer kjernen på.
Viktig
Å bygge Linuxkjernen for færste gang er en av de mest utfordrende
oppgaver i LFS. Å få det riktig avhenger av den spesifikke
maskinvaren for målsystemet og dine spesifikke behov. Det er
nesten 12 000 konfigurasjonselementer som er tilgjengelige for
kjernen, selv om bare en tredjedel av dem er nædvendig for de
fleste datamaskiner. LFS redaktærene anbefaler at brukere som
ikke er kjent med denne prosessen fælger prosedyrene nedenfor
ganske næye. Målet er å få et innledende system til et punkt hvor
du kan logge inn på kommandolinjen når du starter på nytt senere
i Seksjon 11.3, «Omstart av
systemet» På dette punktet er optimering og tilpasning ikke
et mål.
For generell informasjon om kjernekonfigurasjon se
https://www.linuxfromscratch.org/hints/downloads/files/kernel-configuration.txt.
Ytterligere informasjon om konfigurering og bygging av kjernen
finner du på https://anduin.linuxfromscratch.org/LFS/kernel-nutshell/.
Disse referansene er litt utdatert, men gir likevel en rimelig
oversikt over prosessen.
Hvis alt annet feiler, kan du be om hjelp på lfs-support
mailingliste. Vær oppmerksom på at du må abonnere på listen for å
unngå spam.
Forbered for kompilering ved å kjøre følgende kommando:
make mrproper
Dette sikrer at kjernetreet er helt rent. Kjerneteamet anbefaler at
denne kommandoen utstedes før hver kjernekompilering. Ikke stol på
at kildetreet er rent etter utpakking.
Det er flere måter å konfigurere kjernealternativene på Vanligvis,
gjøres dette for eksempel gjennom et menydrevet grensesnitt:
make menuconfig
Betydningen av valgfrie make miljøvariabler:
-
LANG=<host_LANG_value>
LC_ALL=
-
Dette etablerer lokalinnstillingen til den som brukes på
verten. Dette kan være nødvendig for et riktig menyconfig
ncurses grensesnitt linjetegning på en UTF-8 linux
tekstkonsoll.
Hvis brukt, sørg for å erstatte <host_LANG_value>
med
verdien av $LANG
variabel fra
verten din. Du kan alternativt bruke vertens verdi av
$LC_ALL
eller $LC_CTYPE
.
-
make
menuconfig
-
Dette starter et ncurses menydrevet grensesnitt. For andre
(grafiske) grensesnitt, skriv make help.
Notat
Et godt utgangspunkt for å sette opp kjernekonfigurasjonen er å
kjøre make
defconfig. Dette vil sette basekonfigurasjonen
til en god tilstand som tar din nåværende systemarkitektur i
betraktning.
Sørg for å aktivere/deaktivere/stille inn følgende funksjoner,
ellers kan systemet ikke fungere riktig eller starte opp i det
hele tatt:
General setup --->
[ ] Compile the kernel with warnings as errors [WERROR]
CPU/Task time and stats accounting --->
[*] Pressure stall information tracking [PSI]
[ ] Require boot parameter to enable pressure stall information tracking
... [PSI_DEFAULT_DISABLED]
< > Enable kernel headers through /sys/kernel/kheaders.tar.xz [IKHEADERS]
[*] Control Group support ---> [CGROUPS]
[*] Memory controller [MEMCG]
[ ] Configure standard kernel features (expert users) ---> [EXPERT]
Processor type and features --->
[*] Build a relocatable kernel [RELOCATABLE]
[*] Randomize the address of the kernel image (KASLR) [RANDOMIZE_BASE]
General architecture-dependent options --->
[*] Stack Protector buffer overflow detection [STACKPROTECTOR]
[*] Strong Stack Protector [STACKPROTECTOR_STRONG]
Device Drivers --->
Generic Driver Options --->
[ ] Support for uevent helper [UEVENT_HELPER]
[*] Maintain a devtmpfs filesystem to mount at /dev [DEVTMPFS]
[*] Automount devtmpfs at /dev, after the kernel mounted the rootfs
... [DEVTMPFS_MOUNT]
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]
[*] Display a user-friendly message when a kernel panic occurs
... [DRM_PANIC]
(kmsg) Panic screen formatter [DRM_PANIC_SCREEN]
Supported DRM clients --->
[*] 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]
Aktiver noen tilleggsfunksjoner hvis du bygger et 64-bit system.
Hvis du bruker menuconfig, aktiver dem i rekkefølgen CONFIG_PCI_MSI
først, deretter
CONFIG_IRQ_REMAP
, til
sist CONFIG_X86_X2APIC
fordi et alternativ kun vises etter at avhengighetene er valgt.
Processor type and features --->
[*] Support x2apic [X86_X2APIC]
Device Drivers --->
[*] PCI support ---> [PCI]
[*] Message Signaled Interrupts (MSI and MSI-X) [PCI_MSI]
[*] IOMMU Hardware Support ---> [IOMMU_SUPPORT]
[*] Support for Interrupt Remapping [IRQ_REMAP]
Hvis du bygger et 32-bits system som kjører på en maskinvare med
mer enn 4 GB RAM, juster konfigurasjonen slik at kjernen vil
kunne bruke opptil 64 GB fysisk RAM:
Processor type and features --->
High Memory Support --->
(X) 64GB [HIGHMEM64G]
Hvis partisjonen for LFS-systemet er i en NVME SSD (dvs
enhetsnoden for partisjonen er /dev/nvme*
i stedet for /dev/sd*
), aktivere NVME støtte ellers vil ikke
LFS systemet starte:
Device Drivers --->
NVME Support --->
<*> NVM Express block device [BLK_DEV_NVME]
Det er flere andre alternativer som kan være ønsket avhengig av
kravene til systemet. For en liste over nødvendige alternativer for
BLFS pakker, se
BLFS Indeks over kjerneinnstillinger.
Notat
Hvis vertsmaskinvaren din bruker UEFI og du ønsker å starte opp
LFS systemet med det, bør du justere noen kjernekonfigurasjon som
på følgende
BLFS side selv om du bruker UEFI
oppstartslaster fra vertsdistroen.
Begrunnelsen for de ovennevnte
konfigurasjonselementene:
-
Randomize the
address of the kernel image (KASLR)
-
Aktiver ASLR for kjernebilde for å redusere noen angrep
basert på faste adresser til sensitive data eller kode i
kjernen.
-
Compile the
kernel with warnings as errors
-
Dette kan forårsake bygningsfeil hvis kompilatoren og/eller
konfigurasjonen er forskjellig fra kjernens utviklere.
-
Enable kernel
headers through /sys/kernel/kheaders.tar.xz
-
Dette vil kreve cpio for å bygge kjernen.
cpio er ikke
installert av LFS.
-
Configure
standard kernel features (expert users)
-
Dette vil gjøre at noen alternativer vises i
konfigurasjonsgrensesnittet, men å endre disse alternativene
kan være farlig. Ikke bruk dette med mindre du vet hva du
gjør.
-
Strong Stack
Protector
-
Aktiver SSP for kjernen. Vi har aktivert det for hele
brukerplassen med --enable-default-ssp
konfigureringen for GCC, men kjernen bruker ikke GCC
standardinnstillingen for SSP. Vi aktiverer det eksplisitt
her.
-
Support for
uevent helper
-
Å ha dette alternativet satt kan forstyrre enhetens
behandling ved bruk av Udev.
-
Maintain a
devtmpfs
-
Dette vil opprette automatiserte enhetsnoder som er befolket
av kjerne, selv uten at Udev kjører. Udev kjører så på toppen
av dette, administrere tillatelser og legge til
symbolkoblinger. Denne konfigurasjonen element er nødvendig
for alle brukere av Udev.
-
Automount
devtmpfs at /dev
-
Dette vil montere kjernevisningen til enhetene på /dev ved
bytte til rotfilsystem rett før start av init.
-
Vis en
brukervennlig melding når en kjernepanikk
oppstår
-
Dette vil få kjernen til å vise meldingen riktig i tilfelle
kjernepanikk oppstår og en kjørende DRM driver støtter å
gjøre det. Uten dette ville det blitt mer vanskelig å
diagnostisere panikk: hvis ingen DRM driver kjører, vi ville
være på VGA konsollen som bare kan inneholde 24 linjer og den
relevante kjernemeldingen skylles ofte bort; hvis en DRM
driveren kjører, er skjermen ofte fullstendig rotete i
panikk. Fra og med Linux-6.12, ingen av de dedikerte driverne
for mainstream GPU modeller støtter virkelig dette, men det
støttes av «Simple
framebuffer driver» som kjører på VESA (eller
EFI) rammebuffer før den dedikerte GPU driveren er lastet.
Hvis den dedikerte GPU driveren er bygget som en modul (i
stedet for en del av kjernebildet) og ingen initramfs er
brukt, vil denne funksjonaliteten fungere helt fint før roten
av filsystemet er montert og det er allerede nok for å gi
informasjon om de fleste LFS konfigurasjonsfeil som
forårsaker en panikk (for eksempel en feil root=
innstilling i Seksjon 10.4,
«Bruke GRUB til å sette opp oppstartsprosessen»).
-
Panikkskjermformater
-
Still inn denne kmsg
for å sikre
at de siste kjernemeldingslinjer vises når en kjernepanikk
oppstår. Standard, bruker
, ville
få kjernen til å vise bare en «brukervennlig»
panikkmelding som ikke er nyttig å diagnostikkere. Det tredje
valget, qr_code
, ville få
kjernen til å komprimere de siste kjernemeldingslinjene i en
QR kode og vise den. QR koden kan inneholde flere
meldingslinjer enn ren tekst og den kan dekodes med en
ekstern enhet (som en smarttelefon). Men det krever en
Rust-kompilator som LFS ikke leverer.
-
Merk VGA/VBE/EFI
FB som generisk systemrammebuffer
og Enkel framebuffer driver
-
Disse gjør det mulig å bruke VESA rammebufferen (eller EFI
framebuffer hvis du starter opp LFS systemet via UEFI) som en
DRM enhet. VESA rammebufferen vil bli satt opp av GRUB (eller
EFI framebuffer vil bli satt opp av UEFI fastvaren), så DRM
panikken handleren kan fungere før den GPU spesifikke DRM
driveren er lastet.
-
Aktiver eldre
fbdev støtte for modusinnstillingsdriveren
og
Framebuffer Console
support
-
Disse er nødvendige for å vise Linux konsollen på en GPU
drevet av en DRI driver (Direct Rendering Infrastructure).
Siden CONFIG_DRM
(Direct
Rendering Manager) er aktivert, bør vi aktivere disse to
alternativene også, ellers får vi se en tom skjerm når DRI
driveren er lastet inn.
-
Support
x2apic
-
Støtte for å kjøre avbruddskontrolleren for 64-bit x86
prosessorer i x2APIC-modus. x2APIC kan være aktivert av
fastvare på 64-bit x86-systemer, og en kjerne uten dette
alternativet aktivert vil få panikk ved oppstart hvis x2APIC
er aktivert av fastvare. Dette alternativet har ingen effekt,
men gjør heller ingen skade hvis x2APIC er deaktivert av
fastvare.
Alternativt, make
oldconfig er kanskje mer hensiktsmessig i noen
situasjoner. Se README
filen for mer
informasjon.
Hvis ænskelig, hopp over kjernekonfigurasjonen ved å kopiere
kjernens konfigurasjonsfil, .config
,
fra vertssystemet (forutsatt at den er tilgjengelig) til den
utpakkede linux-6.13.7
mappen.
Derimot, vi anbefaler ikke dette alternativet. Det er ofte bedre å
utforske alle konfigurasjonsmenyer og lage kjernekonfigurasjonen
fra grunnen av.
Kompiler kjernebildet og modulene:
make
Hvis du bruker kjernemoduler, modulkonfigurasjon i /etc/modprobe.d
kan være nædvendig. Informasjon
knyttet til moduler og kjernekonfigurasjon er lokalisert i
Seksjon 9.3,
«Oversikt over enhets- og modulhåndtering» og kjerne
dokumentasjon i linux-6.13.7/Documentation
mappen. Også,
modprobe.d(5) kan
være av interesse.
Med mindre modulstætte er deaktivert i kjernekonfigurasjonen,
installere modulene med:
make modules_install
Etter at kjernekompileringen er fullfært, er flere trinn nædvendig
for å fullfære installasjonen. Noen filer må kopieres til
/boot
mappen.
Obs
Hvis du har bestemt deg for å bruke et separat /boot
partisjon for LFS systemet (kanskje dele
en /boot
partisjon med
vertsdistroen), filene som er kopiert nedenfor, skal gå dit. Den
enkleste måten å gjær det er å opprette oppfæringen for
/boot
i /etc/fstab
færst (les forrige seksjon for
detaljer), utfær deretter fælgende kommando som root
bruker i chroot environment:
mount /boot
Stien til enhetsnoden er utelatt i kommandoen fordi mount kan lese den fra
/etc/fstab
.
Stien til kjernebildet kan variere avhengig av plattformen som er
brukt. Filnavnet nedenfor kan endres for å passe din smak, men
stammen av filnavnet skal være vmlinuz for å være kompatibel med det
automatiske oppsettet av oppstartsprosessen beskrevet i neste
avsnitt. De følgende kommandoene antar et x86 arkitektur:
cp -iv arch/x86/boot/bzImage /boot/vmlinuz-6.13.7-lfs--wip
System.map
er en symbolfil for
kjernen. Den kartlegger funksjonsinngangspunktene til hver funksjon
i kjernens API, samt adressene til kjernedatastrukturene for
kjøringen av kjernen. Den brukes som en ressurs når man undersøker
kjerneproblemer. Utfør følgende kommando for å installere
kartfilen:
cp -iv System.map /boot/System.map-6.13.7
Kjernens konfigurasjonsfil .config
produsert av make
menuconfig steget ovenfor inneholder alle
konfigurasjonsvalgene for kjernen som nettopp ble kompilert. Det er
en god ide å beholde denne filen for fremtidig referanse:
cp -iv .config /boot/config-6.13.7
Installer dokumentasjonen for Linux kjernen:
cp -r Documentation -T /usr/share/doc/linux-6.13.7
Det er viktig å merke seg at filene i kjernekildens mappen ikke
eies av root. Når en pakke
pakkes ut som bruker root
(som vi gjorde inne i chroot), filene har bruker- og gruppe-IDer
for hva som helst de var på pakkerens datamaskin. Dette er
vanligvis ikke et problem for enhver pakke som skal installeres
fordi kildetreet blir fjernet etter installasjonen. Imidlertid er
Linux kildetreet ofte beholdt i lang tid. På grunn av dette er det
en sjanse at hvilken bruker-ID pakkeren brukte vil bli tildelt noen
på maskinen. Den personen ville da ha skrivetilgang til kjernens
kilde.
Notat
I mange tilfeller må konfigurasjonen av kjernen være oppdatert
for pakker som vil bli installert senere i BLFS. I motsetning til
andre pakker, er det ikke nødvendig å fjerne kjernekildetreet
etter at den nybygde kjernen er installert.
Hvis kjernekildetreet skal beholdes, kjør chown -R 0:0 på linux-6.13.7
mappen å sikre at alle filer eies
av brukeren root.
Hvis du oppdaterer konfigurasjonen og gjenoppbygger kjernen fra
et beholdt kjernekildetre, bør du normalt ikke kjøre make mrproper kommandoen.
Kommandoen ville rense .config
filen og alle .o
filer fra forrige
bygg. Til tross for at det er enkelt å gjenopprette .config
fra kopien i /boot
, å rense alle .o
filer er fortsatt bortkastet: for en enkel
konfigurasjonsendring, må ofte bare noen få .o
filer (om)bygges og kjernebyggesystemet vil
riktig hoppe over andre .o
filer
hvis de ikke er renset.
På den annen side, hvis du har oppgradert GCC, bør du kjøre
make clean for å
rense alle .o
filer fra forrige
bygg, ellers kan det nye bygget mislykkes.
Advarsel
Noe kjernedokumentasjon anbefaler å opprette en symbolkobling fra
/usr/src/linux
som peker på
kjernens kildemappe. Dette er spesifikt for kjerner før
2.6-serien og må ikke
opprettes på et LFS system, for det kan forårsake problemer for
pakker du kanskje ønsker å bygge når basis LFS systemet er
fullstendig.