10.3. Linux-6.13.7

Linux pakken inneholder Linux kjernen.

Omtrentlig byggetid: 0.4 - 32 SBU (typically about 2.5 SBU)
Nødvendig diskplass: 1.7 - 14 GB (typically about 2.3 GB)

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]

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]

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]

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]

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]

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:0linux-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]

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.

10.3.2. Konfigurere rekkefølgen på Linux modullasting

Mesteparten av tiden lastes Linux moduler automatisk, men noen ganger trenger den en bestemt retning. Programmet som laster moduler, modprobe eller insmod, bruker /etc/modprobe.d/usb.conf for dette formålet. Denne filen må opprettes slik at hvis USB-driverne (ehci_hcd, ohci_hcd og uhci_hcd) har blitt bygget som moduler, vil de bli lastet inn i riktig rekkefølge; ehci_hcd må lastes før ohci_hcd og uhci_hcd i rekkefølge for å unngå at det sendes ut en advarsel ved oppstart.

Opprett en ny fil /etc/modprobe.d/usb.conf ved å kjøre følgende:

install -v -m755 -d /etc/modprobe.d
cat > /etc/modprobe.d/usb.conf << "EOF"
# Begin /etc/modprobe.d/usb.conf

install ohci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i ohci_hcd ; true
install uhci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i uhci_hcd ; true

# End /etc/modprobe.d/usb.conf
EOF

10.3.3. Innhold i Linux

Installerte filer: config-6.13.7, vmlinuz-6.13.7-lfs--wip, og System.map-6.13.7
Installerte mapper: /lib/modules, /usr/share/doc/linux-6.13.7

Korte beskrivelser

config-6.13.7

Inneholder alle konfigurasjonsvalgene for kjernen

vmlinuz-6.13.7-lfs--wip

Motoren til Linux systemet. Når du slår på datamaskinen, er kjernen den første delen av operativsystemet som blir lastet. Den oppdager og initialiserer alle komponenter i datamaskinens maskinvare, gjør deretter disse komponentene tilgjengelige som et tre med filer til programvarer og forvandler en enkelt CPU til en multitasking-maskin med å kjøre mange programmer tilsynelatende samtidig

System.map-6.13.7

En liste over adresser og symboler; den kartlegger inngangspunktene og adresser til alle funksjonene og datastrukturene i kjernen