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:- För att få kärnan mindre.
- För att få stöd för ny hårdvara i datorn.
- För att lägga in något annat stöd som inte fanns tidigare.
- För att det är roligt.
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.- Fördelar
- Allt stöd finns alltid på plats.
- Inga konfigureringar behövs göras.
- Nackdelar
- Kärnan blir väldigt lätt väldigt stor.
- Kärnan tar upp minne även för moduler och drivrutiner som sällan används.
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.
- Fördelar
- Kärnan blir mindre.
- drivrutiner som sällan används gör inte av med minne. om man ser till att inte ladda in dem förrän de behövs.
- Nackdelar
- Kräver ofta mer konfigurering.
- Det tar en liten stund att ladda in en modul i minnet.
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-essentialI 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.orgPacka 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.xzNu 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 detcd linux-5.4.40Nu ä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-2024
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".