4.6. Omkonfigurere Linux-kernen

Kernen er det program, der styrer computeren. Den består af en række forskellige funktioner, og vi vil i dette afsnit diskutere, hvordan du kan omkonfigurere kernen, så den kommer til at passe bedre til din computer. Sagen er nemlig den, at den kerne, som følger med f.eks. Red Hat, indeholder en række funktioner, som du måske ikke har brug for. Ved at omkonfigurere kernen slipper du for at spilde en masse hukommelse (og måske tid). Du kan måske også mangle understøttelse for en hardware-del, f.eks. USB (Universal Serial Bus). USB er for nylig kommet med i Linux-kernen, hvorfor du kan blive nødt til at lave en ny Linux-kerne.

Et par bemærkninger omkring drivere til Linux er på sin plads. Drivere kan eksistere på to måder under Linux: Som en del af kernen eller som et modul. Hvis driveren er en del af kernen, ligger den fast i hukommelsen hele tiden, men et modul indlæses først i det øjeblik, der er brug for det – ja, faktisk kan et modul også fjernes fra hukommelsen, når der ikke er brug for det længere (se Afsnit 4.7). Det er klart en fordel at benytte moduler, hvis man ikke har megen hukommelse.

4.6.1. Bliv klar til at oversætte kernen

Første trin til at lave din egen kerne er at se, om du fik installeret hele kildeteksten til Linux-kernen. Der er to muligheder; enten fra den installations-cd-rom du har, eller fra en helt ny kildetekst. Du skal bruge ca. 150 MB diskplads.

Hvis du vil installere kildeteksten til kernen, så skriv:

[root@linus /root]#  rpm -ivh /cdrom/RedHat/RPMS/kernel-headers-2.2.5-15.i386.rpm
[root@linus /root]#  rpm -ivh /cdrom/RedHat/RPMS/kernel-source-2.2.5-15.i386.rpm

Dette gør, at kildeteksten lægges ind i /usr/src/linux.

I øvrigt kan det tilrådes at lade /usr/src/linux være et symbolsk link til et versionsafhængigt underkatalog:

[root@linus /root]#  ls -l /usr/src/linux
lrwxrwxrwx   1 root root   11 Jan 31 12:01 linux -> linux-2.2.5
drwxr-xr-x  17 root root 1024 Jan 25 21:22 linux-2.0.36
drwxr-xr-x  15 root root 1024 Jan 31 20:45 linux-2.2.5

Antag, at du vil opgradere til kerne 2.3.1, som du henter hjem fra http://www.kernel.org (eller et spejl – f.eks. ftp://ftp.sunsite.dk), dvs. nu vil du installere kildeteksten selv (uden RPM). Typisk henter man kildeteksten i filformat tar-bzip, f.eks. linux-2.4.17.tar.bz2.

Du behøver ikke at lægge kildeteksten ind som root – faktisk bør nu nok hellere lade være, da du så ikke ødelægger noget i /usr/src/linux. Pak filen ud et sted som passer dig og oversæt kernen der.

[tyge@hven ~]$ cd ~
[tyge@hven ~]$ tar xjvf linux-2.4.17.tar.bz2
...

Gå (brug cd) ned til linux og læs README (med less README). I denne fil er det forklaret, hvordan du oversætter kernen. Du bør også altid læse linux/Documentation/Changes, som beskriver, hvordan dit system bør være konfigureret, for at du kan oversætte kernen.

4.6.2. Oversæt Linux-kernen

For det første skal du skifte til kataloget linux, hvor kildeteksten til kernen er placeret. Skriv nu make xconfig. Du vil nu se et vindue som det nedenfor.

Figur 4-1. Hovedmenu for opsætning af Linux-kernen

Som du kan se, er der en række punkter, som du kan konfigurere. Du kan nu trykke på "General Setup", og du vil få et vindue som nedenfor. I langt de fleste punkter i menuen kan du vælge mellem "y", "m" og "n". Vælges "y", bliver funktionen en del af kernen, mens "n" betyder, at den ikke kommer med. Hvis du vælger "m", bliver den ikke en del af kernen, men funktionen vil eksistere som et modul. Som du også kan se, er der mulighed for at få en forklaring ved at trykke på knappen "help". Når du har konfigureret kernen, trykker du på "Save and exit".

Tip: Til bogens eksempler på www.linuxbog.dk/admin/eksempler kan der findes en .config-fil under kerne/. Denne fil (linux/.config) dannes når man kører make xconfig eller make menuconfig (tekstbaseret). Filen vil tilsvarende anvendes når man kører en af de to make-kommandoer.

Figur 4-2. "General Setup" menuen

Du er nu klar til at generere en ny kerne. Der er en række skridt, som du bare skal følge. Først gennemgås alle afhængigheder i kernen (make dep). Selve oversættelsen af kernen (make bzImage) og moduler (make modules) kan godt tage en rum tid afhængig af hvor meget du har taget med, og hvor hurtig din maskine er.

Bemærk at det kun er ved selve installationen af eventuelle moduler til sidst at du bliver nødt til at være root.

[tyge@hven ~]$ cd linux
[tyge@hven ~/linux]$ make clean
[tyge@hven ~/linux]$ make dep
[tyge@hven ~/linux]$ make bzImage
[tyge@hven ~/linux]$ make modules
[tyge@hven ~/linux]$ su root
[root@linus /home/tyge/linux]#  make modules_install

Bagefter kan du finde den nye Linux-kerne i linux/arch/i386/boot/bzImage (hvis du bruger en Intel-kompatibel maskine). Du kan teste den nye kerne ved at kopiere den til en diskette og så starte fra denne. Brug dd if=linux/arch/i386/boot/bzImage of=/dev/fd0 for at teste på denne måde. Er du tilfreds med den nye kerne, kan du kopiere kernen til /boot og rette i LILO's opsætningsfil (/etc/lilo.conf) og køre /sbin/lilo, hvis du anvender LILO til at starte maskinen.

Moduler laves til kernen svarende til kernens versionsnummer under /lib/modules, dvs. for kerne 2.4.10 gemmes de i /lib/modules/2.4.10. Nu spørger du måske om, hvorfor man i det hele taget laver en kerne og så moduler. Dels kan kernen blive mindre og derfor ofte hurtigere. Men er der fejl i et modul, kan man hurtigt rette i modulets kildetekst, genoversætte kildeteksten og starte modulet på ny – uden at genstarte maskinen!

Tip: Man kan også skrive make menuconfig i stedet for make xconfig. Man får et hurtigere tekst-baseret program frem – og man har eksakt de samme muligheder for at styre opsætningen.

4.6.3. Opgradering af kernen

Hvis man har lavet en god opsætning af Linux-kernen og noget tid senere får brug for at opgradere til en ny kerne-version, så kan det være irriterende at skulle afkrydse eksakt de samme valgmuligheder igen med risiko for at noget bliver gjort forkert. En god procedure er at kopiere den gamle .config-fil, som ligger i dit linux-katalog over til et sted du vælger – og det kan være klogt at gemme den under et navn som viser hvilken dato og kerneversion, den passer med. F.eks. kan man køre cp ~/linux/.config ~/kernecompile/kerne.config-DATO-KERNEVERSION.

Start med at hente den nye kerne-kildetekst hjem (bemærk, at hvis du henter et patch, så passer den typisk ikke til den Linux-version du fik med din Linux-distribution). Hvis du hentede version 2.4.18, så flyt eller slet eventuelle andre kerne-kataloger.

Gå nu til linux og kør følgende (I dette eksempel er brugeren »root« – men det er ikke nødvendigt). Pak først den nye kerne-kildetekst ud som vist lidt tidligere (tar xjvf KERNE.tar.bz2).

[root@linus /root]# cd linux
[root@linus linux]# make mrproper
[root@linus linux]# cp /root/kerne.config-DATO-KERNEVERSION .config

I den sidste linje anvender vi den forrige kernes parametre som grundsten for den nye – sagen er at vi nu kører make oldconfig, hvor man kun skal svare på om de nye drivere skal være med i den nye kerne. Alt der er uændret spørges man ikke om.

[root@linus linux]# make oldconfig
[root@linus linux]# make dep
[root@linus linux]# make bzImage
[root@linus linux]# make modules
[root@linus linux]# make modules_install
[root@linus linux]# cp arch/i386/boot/bzImage /boot/vmlinuz-x.y.z

Endelig skal man rette /etc/lilo.conf til at pege på /boot/vmlinuz-x.y.z og køre /sbin/lilo.

4.6.4. Lav en redningsdiskette

Har du brug for at lave en redningsdiskette (eng. rescue disk), med Linux-kernen på, som du kan starte din Linux-maskine fra, så kan du gøre det med mkbootdisk. Find først ud af hvilken kerne der er på dit system. Kør f.eks. ls /lib/modules/. Står der 2.2.12-20, så skal du – som root - skrive

[root@linus /root]#  /sbin/mkbootdisk --device /dev/fd0 2.2.12-20
Disken har Linux-kernen, og du kan også bruge denne disk, hvis du skal flytte rundt på dine harddiske (fra primær til sekundær osv).