NetBSD.SE Logotype
Meny
Välkommen till NetBSD.se

Sök bland pkgsrc/wip:Sök efter manual:
 


Att skräddarsy en NetBSD-kärna (kernel)
2004-10-19 21:13:40 inskickat av Emil Hessman

GuiderDen här guiden lär dig att skräddarsy en NetBSD-kärna (kernel) för ett specifikt system - vilket leder till många fördelar.

Guiden förutsätter att användaren har root-rättigheter i samtliga steg som beskrivs, observera dessutom översättningen av ord som kernel (kärna), patchlevel (programfixnivå), shell (skal) med flera.

Innehållsförteckning:

1 - Introduktion
2 - Förberedelser
 2.1 - Hämta källkoden
  2.1.1 - Uppdatera källkoden
 2.2 - Bygg verktygskedjan
3 - Redigera, konfigurera samt kompilera kärnan
 3.1 - Redigera kärnkonfigurationen
 3.2 - Konfigurera kärnan
 3.3 - Kompilera kärnan
4 - Om problem uppstår
5 - Källor


1 - Introduktion

En skräddarsydd kärna (kernel) leder i regel till förbättrad prestanda, och eftersom den kärna som medföljer NetBSD som standard, GENERIC, är avsedd att stödja i stort sett alla hårdvarukonfigurationer på en viss plattform kan det vara en fördel att skräddarsy en kärna för det specifika systemet ifråga och dess särskilda behov.

Man kan alltså lägga till/ta bort stöd för enheter som inte är/är inkluderade i GENERIC-kärnan.
Storleken på kärnan kan dessutom reduceras avsevärt genom att skräddarsy en ny, vilket kan utgöra en stor prestandaskillnad främst på äldre maskiner.


2 - Förberedelser

Innan det är dags för att konfigurera kärnan i avsnitt "3 - Redigera, konfigurera samt kompilera kärnan" behövs det lite förberedelser, bland annat skall källkoden hämtas (eller uppdateras) och verktygskedjan (toolchain) skall eventuellt byggas. Observera att för att överhuvudtaget kunna bygga en ny kärna är kompilatorerna (comp.tgz), som följer med bassystemet som standard, minst lika nödvändiga som kärnans källkod.

Om kompilatorerna inte installerades när NetBSD installerades, hämta då först hem rätt version av comp.tgz och packa upp dem i /.

comp.tgz återfinns på bland annat ftp.NetBSD.org - sökvägen är ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-{VERSION}/{PLATTFORM}/binary/sets/comp.tgz

Där {VERSION} och {PLATTFORM} bytes ut mot respektive version och plattform av NetBSD som används.
Om det råder några tvivel om vilken version och/eller plattform som används, tag hjälp av kommandot:

$ uname -prs

Packa därefter upp comp.tgz i / :

$ cd /
$ tar --unlink -zxvpf .../comp.tgz


2.1 - Hämta källkoden

Källkoden återfinns vanligtvis i /usr/src/sys på systemet, saknas denna katalog så saknas även källkoden.
För att erhålla källkoden följ nedanstående steg ...

Sätt följande variabler i skalet (shell):

csh, sh och ksh är så kallade skal (shells), kommandot $ echo $SHELL anger vilket som används.

För csh:
$ setenv CVS_RSH /usr/bin/ssh
$ setenv CVSROOT anoncvs@anoncvs.se.NetBSD.org:/cvsroot


För sh/ksh:
$ CVS_RSH=/usr/bin/ssh; export CVS_RSH
$ CVSROOT=anoncvs@anoncvs.se.NetBSD.org:/cvsroot; export CVSROOT


Gå därefter till /usr-katalogen och kör CVS med dessa växlar:

$ cd /usr
$ cvs checkout -rnetbsd-{VERSION} -PA src


Där {VERSION} ersätts av den version som skall erhållas, till exempel så är version 1.6 = 1-6 och version 2.0 = 2-0. Om en särskild programfixnivå (patchlevel) önskas så återföljs till exempel 1-6 av -PATCHXXX, vilket t.ex. ger 1-6-PATCH002 för version 1.6.2.
Att ange rätt programfixnivå kan dessutom vara viktigt så att kärnan och den del processer som körs utanför systemets kärna (userland) är synkroniserade i förhållande till varandra.

För att erhålla -current utesluts helt enkelt "-rnetbsd-{VERSION}" från den sista raden.
Den här guiden går dock inte närmare in på hur man följer -current och därför rekommenderas denna dokumentation (Engelska) varmt för den intresserade.

Exempel:

För att erhålla källkoden för 1.6: $ cvs checkout -rnetbsd-1-6 -PA src
För att erhålla källkoden för 1.6.2: $ cvs checkout -rnetbsd-1-6-PATCH002 -PA src
För att erhålla källkoden för 2.0: $ cvs checkout -rnetbsd-2-0 -PA src
För att erhålla källkoden för -current: $ cvs checkout -PA src

Observera att hela källkoden för NetBSD hämtas när src anges, om det råder platsbrist eller om enbart kärnträdet önskas - ange då src/sys istället för src.
Det skall dock tilläggas att det är ett mer korrekt sätt att hämta och bygga från hela källkoden, src.

Exempel för enbart kärnträdet:

$ cvs checkout -rnetbsd-{VERSION} -PA src/sys

(Om enbart kärnträdet (src/sys) hämtades, hoppa då över avsnitt "2.2 - Bygg verktygskedjan" och gå vidare till avsnitt "3 - Redigera, konfigurera samt kompilera kärnan").

2.1.1 - Uppdatera källkoden

Om källkoden redan finns på systemet, men är i behov av en uppdatering, följ dessa steg ...

Ange följande variabler om de inte är angivna redan:

För csh:
$ setenv CVS_RSH /usr/bin/ssh
$ setenv CVSROOT anoncvs@anoncvs.se.NetBSD.org:/cvsroot


För sh/ksh:
$ CVS_RSH=/usr/bin/ssh; export CVS_RSH
$ CVSROOT=anoncvs@anoncvs.se.NetBSD.org:/cvsroot; export CVSROOT


Kör make cleandir i /usr/src, och därefter CVS:

$ cd /usr/src
$ make cleandir
$ cvs update -rnetbsd-{VERSION} -PAd


Detsamma gäller för {VERSION} här som ovan, ersätt helt enkelt {VERSION} med den version som skall erhållas.

Om det råder platsbrist eller om enbart kärnträdet skall uppdateras, gå då till katalogen /usr/src/sys istället för /usr/src.
Som sagt är det dock ett mer korrekt sätt att hämta och bygga från hela källkoden, /usr/src.

För att enbart uppdatera kärnträdet, /usr/src/sys, gör såhär:

$ cd /usr/src/sys
$ make cleandir
$ cvs update -rnetbsd-{VERSION} -PAd


(Om enbart kärnträdet (src/sys) uppdaterades, hoppa då över avsnitt "2.2 - Bygg verktygskedjan" och gå vidare till avsnitt "3 - Redigera, konfigurera samt kompilera kärnan").

2.2 - Bygg verktygskedjan

Observera: Genomför ej detta steg om enbart kärnträdet (src/sys) hämtades/uppdaterades.

Härnäst skall verktygskedjan (toolchain) byggas, skapa därför katalogen /usr/obj, gå sedan till /usr/src och om källkoden uppdaterades (src) kör då make obj här.
Bygg därefter verktygskedjan med kommandot ./build.sh tools.

Se nedan för en bättre översikt, steg för steg:

$ mkdir /usr/obj
$ cd /usr/src
$ make obj
(Genomför enbart detta steg om hela källkoden (src) uppdaterades, annars inte)
$ ./build.sh tools


3 - Redigera, konfigurera samt kompilera kärnan

I dessa tre steg (3.1, 3.2 och 3.3) redigeras, konfigureras samt kompileras kärnan till det skräddarsydda system som eftersträvas.

3.1 - Redigera kärnkonfigurationen

Gå till /usr/src/sys/arch/{PLATTFORM}/conf och skapa en kopia av GENERIC med ett lämpligt namn, redigera sedan denna fil. Vanligtvis döper man filen till sitt hostname ($ hostname) i versaler, MYKERNEL i det här exemplet.

Ersätt som vanligt {PLATTFORM} mot den plattform av NetBSD som används.

Exempel:

$ cd /usr/src/sys/arch/i386/conf
$ cp GENERIC MYKERNEL
$ vi MYKERNEL


Redigera MYKERNEL efter behag och behov.
Lägg till eller ta bort stöd för hårdvara med hjälp av dmesg(8) för att avgöra vilken hårdvara som är installerad och behövs.
Se även manualsidan för options(4) för vidare information om vad som kan ingå i en kärna.

För vidare läsning se källorna i avsnittet "5 - Källor" där mer vägledning kan erhållas.

3.2 - Konfigurera kärnan

Konfigurera kärnan genom att:

$ config MYKERNEL

Om allt går som det skall, så genererar config(8) de nödvändiga filerna för en kompilering av kärnan. Om fel uppstår, gå tillbaka, felsök och korrigera problemen i MYKERNEL för att sedan köra config igen.

3.3 - Kompilera kärnan

Så var det dags att kompilera den nya kärnan, vilket utförs med dessa kommandon:

$ cd ../compile/MYKERNEL
$ make depend
$ make


Detta resulterar i filen netbsd - vilket är själva kärnan, denna nya kärna är avsedd att ersätta den nuvarande netbsd-kärnan i root-katalogen.

Se dock till att spara den nuvarande kärnan om problem skulle uppstå genom att:

$ mv /netbsd /netbsd.old

Flytta därefter den nya kärnan till root-katalogen:

$ mv netbsd /

I root-katalogen återfinns nu den nya kärnan "netbsd" samt den gamla kärnan "netbsd.old".

Den nya kärnan aktiveras först i samband med en omstart, så starta om med kommandot reboot:

$ reboot

Förhoppningsvis gick nu allting bra och systemet kör en skräddarsydd kärna!


4 - Om problem uppstår

När systemet startas om efter det att den nya kärnan har tagits i bruk, så kan det hända att kärnan inte fungerar som den skall. Starta då om systemet med den gamla kärnan som sparades som netbsd.old och ta bort den icke fungerande, se stegen nedan ...

Starta om systemet

Avbryt nedräkningen genom att trycka på mellanslag

Kör nedanstående kommando för att starta systemet med den gamla kärnan:

$ boot netbsd.old -s

Återställ därefter systemet med följande kommandon:

$ fsck /
$ mount /
$ mv netbsd.old netbsd
$ exit


Systemet skall nu vara återställt i det skick som det var innan den nya kärnan installerades.


5 - Källor

NetBSD Documentation: Kernel
NetBSD Tuning, Kernel Tuning

The NetBSD Guide - Chapter 9. Compiling the kernel
The NetBSD Guide - Chapter 19. Obtaining sources by CVS

Tracking NetBSD-current

Manualsidor:

dmesg(8)
config(8)
options(4)


skrivut.gif Utskriftsformat mail.gif Skicka artikeln till någon


Kommentarer tillhörande (Att skräddarsy en NetBSD-kärna (kernel))


Namn (tomt = anonym):
Din email:






© 2003-2008 NetBSD.se
Materialet som publicerats på denna sida tillhör respektive författare. Materialet får kopieras med förutsättning av att källanvisning medförs som i detta fall är www.netbsd.se. Eventuella kommentarer tillhör skrivande individ. All information erbjuds utan garanti på funktion och duglighet och NetBSD.se tar inget ansvar för händelser som åsakats på grund av något på denna sida. NetBSD är ett registrerat varumärke som tillhör The NetBSD Foundation. Alla varumärken och copyright på denna sida ägs av deras respektive ägare. Vår maskot går under BSD-licensen och är fri att användas.