Kompilera en ny kärna
Ord av tröst och uppmuntran på vägen
Första gången jag försökte kompilera om kärnan i Linux gick det åt pipsvängen. Andra gången också!
För en nybörjare framstår uppgiften att kompilera en ny kärna som nästan oöverstiglig men de flesta bekymmer en nybörjare stöter på beror på att de inte har ägnat tillräckligt med tid åt till att förstå hur man ska gå till väga och istället gissat sig fram.
Detta leder oftast (Läs alltid) till misslyckande och därför jag har skrivit denna lilla "Hur man..." som innehåller grundläggande information som jag tycker du behöver veta för att du ska lyckas med kompileringen av en ny kärna.
Mer info hittar du lätt på nätet. Sök t.ex efter:"kompilera kärna" så får du gott om träffar.
Behärskar du engelska är utbudet av s.k How-To:s synnerligen stort.
Varför kompilera då?
En anledning kan vara att du bara vill testa om du klarar av att vara lite hjärnkirurg så där mitt i vardagen.
Du kanske vill lära dig mer och se vilka möjligheter som finns dolda i en ny kärna.
Främsta anledningen är nog ändå att du vill trimma upp ditt system genom att ta bort stöd för sånt du inte har nytta av. Inte mycket lönt att ha stöd för t.ex SCSI-diskar eller PCMIA om du inte har det i din dator. Eller så vill du kanske lägga till stöd för sånt du saknar. Ett exempel kan vara stöd för NTFS filsystem som t.ex Windows XP använder.
Hämta hem en ny kärna
Du kan ladda hem ny kärna från kernel.org som är centrum för all information om kerneln. Där finns alla de tillgängliga kärnor du kan tänkas behöva. Oftast finns också kärnor att ladda hem på den webbplats som din distribution har.
Packa upp...
När du väl har hämtat hem en ny version av källkoden till kärnan är det dags att packa upp den.
I fortsättningen förutsätter alla kommandon att du är inloggad som root, vilket du enklast åstadkommer genom att skriva "su" följt av lösenordet för root.
Har du laddat ner källkodsfilen med ändelsen .gz utför du det första av följande kommandon, och om du har laddat ner den högre komprimerade .bz2 varianten utför du det andra kommandot:
tar zxvf linux-[versionsnummer].tar.gz
byt ut [versionsnummer] till det nummer som din hemladdade kärna har t.ex 2.6.14.3
eller:
bzip2 -d linux-[versionsnummer].tar.bz2
tar xvf linux-[versionsnummer].tar
Källkoden kommer nu att läggas i en katalog som heter "linux2.x.xx".
Konfigurering
Se nu till så att du befinner dig inne i /usr/src/linux. Nu bör du se till så att allt är rent och snyggt i källkodsstrukturen genom att propra till läget genom att ge följande kommando:
make mrproper
När detta är klart är du redo att börja välja vilka delar av kärnan du vill ska ingå i din nya, antingen som en modul eller direkt i kärnan. Moduler är verkligen en stor tillgång. Innan de fanns var man tvungen att kompilera in all funktionalitet rakt in i kärnan (monlitiskt) hur sällan man än behövde dessa funktioner. Kärnan kunde då ofta liknas vid en övergödd pingvin. Moduler är alltså lösningen på detta problem.
Kompilera
Det finns olika, mer eller mindre användarvänliga, sätt att välja vad som ska ingå i den nya kärnan. Vilket sätt man väljer spelar dock ingen roll för slutresultatet. Valen man kan göra är följande:
-
make config
Traditionella Ja och Nej-frågor kommer på konsollen, men du har ingen möjlighet att direkt ångra dig om du väljer fel val. -
make menuconfig
Här kan man grafiskt, men fortfarande på konsollen välja de delar man vill ha stöd för i kärnan. Det är enkelt att hoppa fram och tillbaka bland valen vilket gör att du kan gå tillbaka och ångra ett val du gjort. -
make xconfig
För att använda denna metod måste du vara inne i X. Metoden liknar menuconfig men användargränssnittet är av typen X, alltså grafiskt. Detta grafiska läge rekommenderas varmt särskilt till nybörjare.
Det är svårt att ge en generell vägledning i vilka delar som man bör ta med eftersom nästan alla har olika krav på vad de vill kunna göra i sin dator, och olika datorer har olika hårdvara.
Ett viktigt tips är att läsa hjälptexterna när man konfigurerar kärnan. Hjälptexter finns i stort sett till alla val man kan göra och är man osäker står det oftast en rekommendation i slutet på denna som anger vilket som är det vanligaste valet. Vid vissa val står det "experimental" och det kan vara god sed att undvika sådan val.
Dina krav, och hårdvara, kan givetvis vara annorlunda, så att följa dessa tips slaviskt är naturligtvis inte att rekommendera. Du bör dock inte välja bort något som beskrivs som väldigt viktigt i hjälptexten, om du nu inte är absolut säker på din sak. När man har gjort sina val, och dubbelkollat dessa vilket du bara kan göra om du kört "make menuconfig" eller "make xconfig" så kan du spara konfigurationen och avsluta konfigureringsprogrammet.
Nu när konfigureringen av din egen kärna är klar är sanningens minut (eller snarare minuter...) kommen.
Det är dags att genomföra kompileringen av kärnan!
Observera, att denna handledning gäller om du har version 2.6.xx av kärnan.
Ge kommandot:
make
Den färdiga kärnan hamnar då i /usr/src/linux/arch/i386/boot
Hur länge kompileringen tar att genomföra varierar givetvis beroende på hur kraftfull maskin du använder och hur mycket du har valt att inkludera i kärnan. När kompileringen är klar och du förhoppningsvis klarade dig utan att stöta på några problem kommer du att få lite information om den färdiga kärnan, t ex hur stor den blev. Men ta det nu lite lugnt för vi är inte färdiga riktigt än!
Nu är det nämligen dags att installera de moduler som du valt, och detta görs med det logiska kommandot:
make modules_install
Kopiera till boot
Nu tar du och kopierar över följande filer till /boot:
.config (finns i / )
System.map (finns i / )
bZimage (finns i /arch/i386/boot)
Jag rekommenderar att du byter namn på filerna innan du kopierar dom.
För att lätt kunna skilja på olika versioner av kärnan ge dom namn som är lätta att skilja på.
| Gammalt namn | Nytt namn |
| .config | 2.6.14.3.config Se min .config här... |
| System.map | 2.6.14.3.System.map |
| bZimage | 2.6.14.3.bZimage |
Kopiera nu över dom till /boot
Modifiering av lilo.conf
Ett vanligt fel som många ovana Linuxanvändare nu gör är att de startar om datorn i tron att allt är färdigt men ack så de bedrog sig. Ganska fort upptäcker de att de fortfarande kör den gamla kärnan! Använder man LILO för att starta Linux måste man också ändra dess konfigureringsfil och installera om LILO i bootsektorn. Lilo:s konfigureringsfil heter lilo.conf och finns i /etc katalogen. Här följer ett exempel på hur denna fil kan se ut:
boot=/dev/hda2
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
image=/boot/vmlinuz
label=linux-2.0.36
root=/dev/hda2
read-only
Exakt så här kommer det förmodligen inte se ut för dig, utan variationer kan förekomma bl.a beroende på vilken partition du har som "root partition". Ändra inte på dessa rader! Lägg istället in nya rader efter dessa som visar LILO var den nya kärnan finns.
Se min etc/lilo.conf här
Skriv in rader med följande struktur:
image=/boot/2.6.14.3.bZimage
label=linux.2.6.14.3
root=/dev/[din_root_partition]
read-only
"din_root_partition" ska du normalt ändra till samma root som står angivet ovanför dessa rader i din fil.
Nu är det endast en sak som återstår innan du kan testa din nykompilerade kärna, nämligen att installera om LILO i bootsektorn. Detta gör du med följande kommando:
/sbin/lilo
Om du angett fel sökväg i lilo.conf får du ett felmeddelande så då får du kontrollera att sökvägen är rätt och köra /sbin/lilo på nytt.
Går allt vägen är det nu dags att starta om datorn och testa den nya kärnan:
/sbin/reboot
När LILO startas ser du listan på de kärnor du kan välja att starta. Som du ser så finns även den gamla kärnan kvar. Det är bra att göra detta till vana att alltid spara gamla kärnan eftersom det alltid finns risk för att något kan gå fel med den nya kärnan. Vi gav den nya kärnan rubriken linux.test. För att starta den väljer du därför "linux.test" i LILO och trycker 'Enter'.
Beskåda sedan "the magic of Linux" när den nya kärnan startar!