Kompilera linuxkärna


Varför kompilera en linuxkärna

Varför vill man kompilera upp/kompilera om en linuxkärna? Några av de främsta skälen är: I en modern Linuxdistribution behöver du dock i stort sett aldrig själv kompilera Linuxkärnan. Den Linuxkärna som följer med i din Linuxdistribution innehåller vanligtvis allt du behöver.

Monolitisk kärna versus moduler

Vi kompilering av kärnan går det att välja att lägga in allt stöd in i kärnfilen. Kärnan blir då monolitisk. Det har för och nackdelar.

Många drivrutiner kan även kompileras som moduler. Drivrutinerna ligger då som separata filer under /lib/modules istället för att ligga i kärnfilen. Fördelen med det är att de går att ladda in och ut ur kärnan under drift när de behövs utan att boota om datorn.

Hur gör jag för att kompilera upp en kärna

Du måste först och främst se till att du har gcc, make m.fl. utvecklingsverktyg. I Ubuntu kan du installera build-essential.
sudo apt-get install build-essential
I Fedora/RedHat och CentOS kan du installera paketgruppen 'Development Tools'.
  sudo yum group install "Development Tools"

Sedan behöver du installera källkoden till Linuxkärnan. Vad paketet/paketen heter varierar mellan olika Linuxdistributioner.


Tar-arkiv

Istället för att installera källkoden till Linuxkärnan från ett paket kan du hämta hem källkoden i form av ett tar-arkiv från https://www.kernel.org

Packa nu upp tar-arkivet med källkoden till Linuxkärnan. Om källkoden finns i filen linux-5.4.40.tar.xz gör:

tar xvf linux-5.4.40.tar.xz
Nu finns källkoden till Linuxkärnan på plats. Nu kan du konfigurera och kompilera den enligt nedan.


Konfigurera kärnan

Gå till katalogen du fick när du packade upp källkodsarkivet. Med källkoden ovan som exempel blir det
cd linux-5.4.40
Nu är det dags att konfigurera linuxkärnan. Om du har en gammal configuration som du vill utgå från kopiera den och kalla kopian för .config. Exempel:
cp /boot/config-4.15.0-99-generic .config

Om du har utgått från en existerande konfiguration/gammal konfiguration så måste du först köra make oldconfig och svara på ett antal frågor. För de flesta frågor fungerar det utmärkt att trycka på <ENTER> och därmed välja default-alternativet.

kjell-e@shaun:~/Downloads/linux-5.4.40$ make oldconfig
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/kconfig/conf.o
  HOSTCC  scripts/kconfig/confdata.o
  HOSTCC  scripts/kconfig/expr.o
  LEX     scripts/kconfig/lexer.lex.c
  YACC    scripts/kconfig/parser.tab.[ch]
  HOSTCC  scripts/kconfig/lexer.lex.o
  HOSTCC  scripts/kconfig/parser.tab.o
  HOSTCC  scripts/kconfig/preprocess.o
  .
  .
  .
  MediaTek MT76x2E (PCIe) support (MT76x2E) [N/m/?] (NEW) 
  MediaTek MT76x2U (USB) support (MT76x2U) [N/m/?] (NEW) 
  .
  .
  .
  National Semiconductor LM95234 and compatibles (SENSORS_LM95234) [M/n/y/?] m
  National Semiconductor LM95241 and compatibles (SENSORS_LM95241) [M/n/y/?] m
  National Semiconductor LM95245 and compatibles (SENSORS_LM95245) [M/n/y/?] m
  .
  .
  .

Konfigurera linuxkärnan kan göras med make menuconfig, make xconfig eller make gconfig. Med xconfig och gconfig får man ett grafiskt fönster att navigera runt i. Notera att xconfig kräver att Qt och Qt-bibliotek är installerade, gconfig kräver att GTK+ och dess gtk-bibliotek är installerade. Menuconfig kräver att ncurses och dess bibliotek är installerat.

Nedan visas exempel från menuconfig.
kjell-e@shaun:~/Downloads/linux-5.4.40$ make menuconfig

När du är färdig med konfigurationen välj exit och välj att spara. Då kommer konfigurationen att sparas som .config.


kompilera och installera kärnan

Kompilera därefter med: make all.
  kjell-e@shaun:~/Downloads/linux-5.4.40$ make all
  SYSTBL  arch/x86/include/generated/asm/syscalls_32.h
  SYSHDR  arch/x86/include/generated/asm/unistd_32_ia32.h
  SYSHDR  arch/x86/include/generated/asm/unistd_64_x32.h
  SYSTBL  arch/x86/include/generated/asm/syscalls_64.h
  HYPERCALLS arch/x86/include/generated/asm/xen-hypercalls.h
  .
  .
  .

Installera slutligen linuxkärnan med make install och kärnmodulerna med make modules_install.

Parametrar till Linuxkärnan

Till Linuxkärnan går det att ändra på en del parametrar. Läs vidare under kernelparametrar.


Korsreferenser

Källkoden till Linuxkärnan finns i form av korsreferenshypertextformat på http://lxr.linux.no/




Riktigt gamla kärnor

Denna del kan de flesta hoppa över då den bara tar upp information om riktigt gamla linuxkärnor.

Det skiljer sig en del åt mellan de olika gamla kärnorna hur man gör. Välj nedan för olika kärnor.

Copyright © 2010-2020 Kjell Enblom.
This document is covered by the GNU Free Documentation License, Version 1.3

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".