Het is noodzakelijk om de volledige broncode van FreeBSD geïnstalleerd te hebben om de kernel te bouwen.
Eerst wordt er een overzicht gegeven van de mappen waarin de
kernel gebouwd wordt. Alle genoemde mappen staan onder de map
/usr/src/sys
, die ook toegankelijk is via
de padnaam /sys
. Er zijn hier een aantal
mappen aanwezig die de verschillende delen van de kernel
representeren, maar de meest belangrijke hiervan zijn
, waarin
de kernelinstellingen bewerkt worden en
arch
/confcompile
, waarin de aangepaste kernel gebouwd
wordt. arch
representeert hier
één van i386
,
amd64
,
ia64
, powerpc
,
sparc64
of pc98
(een
alternatieve ontwikkelingstak van PC-hardware die populair is in
Japan). Alles binnen de map van een bepaalde architectuur is er
alleen voor die architectuur. De rest van de code is
machine-onafhankelijk en hetzelfde op alle platformen waarnaar
FreeBSD eventueel overgezet kan worden. De indeling van de
mapstructuur is logisch: alle ondersteunde apparaten,
bestandssystemen en opties staan in een eigen submap.
Dit voorbeelden in dit hoofdstuk veronderstellen dat de i386-architectuur gebruikt wordt. Als dit voor de lezer anders is, moeten de bijhorende aanpassingen aan de padnamen worden gemaakt.
Als de map /usr/src/
niet aanwezig is op een systeem (of als het leeg
is), dan is de broncode niet geïnstalleerd. De eenvoudigste
manier om de volledige broncode te installeren is csup(1) te
gebruiken zoals beschreven in Paragraaf 25.6, “Broncode synchroniseren”. U dient
tevens een symbolische link naar /usr/src/sys/
aan te maken:
#
ln -s /usr/src/sys /sys
Daarna kan vanuit de map
het
instellingenbestand arch
/confGENERIC
naar de naam
voor de aangepaste kernel gekopieerd worden. Bijvoorbeeld:
#
cd /usr/src/sys/i386
/conf
#
cp GENERIC MIJNKERNEL
Traditioneel bestaat deze naam geheel uit hoofdletters en als
er meerdere FreeBSD-machines worden beheerd met verschillende
hardware is het een goed idee om het te vernoemen naar de
hostnaam van de machine. Omwille van dit voorbeeld wordt het
genoemd.MIJNKERNEL
Het kernelinstellingenbestand direct onder
/usr/src
opslaan kan een slecht idee zijn.
In geval van problemen kan het verleidelijk zijn om
/usr/src
te verwijderen en opnieuw te
beginnen. Nadat dit gedaan is kost het vaak maar enkele
seconden om te realiseren dat het instellingenbestand voor de
aangepaste kernel verwijderd is. Ook moet
GENERIC
niet gewijzigd worden, omdat het
tijdens de volgende keer dat de broncodeboom bijgewerkt
wordt, overschreven kan worden waarbij de wijzigingen
in de kernelinstellingen verloren gaan.
Het kan gewenst zijn om het kernelinstellingenbestand
ergens anders op te slaan en een symbolische link naar het
bestand in de map
aan te
maken:i386
#
cd /usr/src/sys/i386
/conf
#
mkdir /root/kernels
#
cp GENERIC /root/kernels/MIJNKERNEL
#
ln -s /root/kernels/MIJNKERNEL
Nu moet
met de
favoriete tekstverwerker bewerkt worden. Voor beginners is
waarschijnlijk alleen de tekstverwerker
vi beschikbaar, die te ingewikkeld is
om hier te beschrijven, maar goed is beschreven in vele boeken in
de bibliografie. FreeBSD biedt
ook de eenvoudigere tekstverwerker ee,
die voor een beginner de keuze bij uitstek is. De
commentaarregels in het begin kunnen gewijzigd worden om de
persoonlijke instellingen of de veranderingen die gemaakt zijn ten
opzichte van MIJNKERNEL
GENERIC
weer te geven.
Voor degenen die een kernel op SunOS™ of een andere BSD
hebben gebouwd zal veel van dit bestand bekend voorkomen.
Echter, voor degenen die van een ander besturingssysteem zoals
DOS komen, kan het instellingenbestand
GENERIC
overdonderend overkomen, dus moeten
de beschrijvingen in de sectie Het Instellingenbestand
zorgvuldig opgevolgd worden.
Als de broncodeboom
gesynchroniseerd is met de nieuwste broncode van het
FreeBSD-project, moet altijd
/usr/src/UPDATING
gelezen worden voordat
enige bijwerkstappen worden genomen. Dit bestand beschrijft
alle belangrijke zaken en gebieden binnen de broncodestructuur
die speciale aandacht nodig hebben.
/usr/src/UPDATING
komt altijd overeen met
de lokale versie van de FreeBSD-broncode en is daarom meer
bijgewerkt met nieuwe informatie dan dit handboek.
Nu moet de broncode voor de kernel gecompileerd worden.
Het is noodzakelijk om de volledige broncode van FreeBSD geïnstalleerd te hebben om te kernel te bouwen.
Ga naar de map /usr/src
:
#
cd /usr/src
Compileer de kernel:
#
make buildkernel KERNCONF=MIJNKERNEL
Installeer de nieuwe kernel:
%
make installkernel KERNCONF=MIJNKERNEL
Bij het bouwen van een aangepaste kernel worden standaard
alle kernelmodules ook herbouwd. Om de
kernel sneller bij te werken en alleen de aangepaste modules
te bouwen kan /etc/make.conf
aangepast
worden voordat de kernel wordt gebouwd:
Met deze variabele wordt een lijst van te bouwen modules ingesteld die gebouwd moeten worden in plaats van allen.
Deze variabele stelt een lijst in van modules op het topniveau die moeten worden uitgesloten van het bouwproces. Andere variabelen die mogelijk ook nuttig zijn in het proces van het bouwen van een kernel staan beschreven in de handleiding voor make.conf(5).
De nieuwe kernel wordt naar de map /boot/kernel
gekopieerd als
/boot/kernel/kernel
en de oude kernel wordt
verplaatst naar /boot/kernel.old/kernel
. Nu
moet het systeem afgesloten worden en opnieuw worden opgestart om
gebruik te maken van de nieuwe kernel. Er zijn wat instructies
voor problemen
oplossen aan het einde van dit hoofdstuk, die erg nuttig
kunnen zijn als er iets misgaat. Vergeet niet om het gedeelte te
lezen waarin staat uitgelegd hoe te herstellen als de nieuwe
kernel niet
opstart.
Andere bestanden die te maken hebben met het opstartproces,
zoals de boot loader(8) en instellingen worden opgeslagen
in /boot
. Modules van derde partijen of
eigen modules kunnen in /boot/kernel
opgeslagen worden,
alhoewel gebruikers erop bedacht moeten zijn dat het erg
belangrijk is dat de modules synchroon worden gehouden met de
gecompileerde kernel. Modules die niet bedoeld zijn om met de
gecompileerde kernel te draaien kunnen voor instabiliteit of
onjuistheden zorgen.