Linux Kernel Modules Installatie HOWTOrhw@bigfoot.comVertaald door: EllenBokhorst
Beschrijft de installatie van Linux kernelmodules.
1.0datum onbekendrhwInitiële Release
Dit document wordt gedistribueerd onder de voorwaarden van de
GNU Free Documentation License (GFDL) en alle voorwaarden en
beperkingen die daarin staan zijn van toepassing.
LinuxkernelmoduleDoel van dit document
Mijn ervaring met Linux en modules bestaat hieruit dat de bestaande
documenten er niet in slagen mij naar tevredenheid een uitleg te
geven over hoe men Linux met modules geconfigureerd en met succes werkend
instelt. De procedure uitgelegd in dit document is
verscheidene malen met succes toegepast op zowel mijn eigen systeem
als over het Internet waarbij ik iemand aanwijzigingen gaf om een
bepaalde feature proberen werkend te krijgen waarvoor een driver nodig
was die alleen in de vorm van een module werd geleverd.
Op mijn eigen systeem draait een RedHat 4.1 distibutie van Linux, en
ik ontwikkelde de procedure vanuit deze setup. Ik heb het sindsdien
met succes op systemen geïnstalleerd waarop diverse Slackware
distributies draaide, en op een systeem met een Debian distributie.
De benodigde procedure om modules correct onder Linux te configureren
op al deze drie is hierin gedocumenteerd.
Ik heb dezelfde procedure recent met RedHat 4.2 toegepast, maar met
inconsistente resultaten op schijnbaar identieke systemen. Ik heb
nog niet vastgesteld wat het probleem is, dus kan in dit stadium
geen garanties geven of het wel of niet op je systeem zal werken.
Dit document wordt gedistribueerd onder de voorwaarden van de
GNU Free Documentation License. Je zou hiervan samen met dit document
een kopie moeten hebben ontvangen. Zo niet, dan is het beschikbaar
vanaf
http://www.fsf.org/licenses/fdl.html"Veronderstellingen
Voor de stappen in dit document kunnen worden toegepast, moet de
lezer een werkende Linux installatie tot zijn beschikking hebben
waarbij men als gebruiker root bij de Linux
prompt kan komen, aangezien de meeste te nemen stappen alleen
kunnen worden ondernomen door de genoemde gebruiker.
De bestaande kernel kan zo worden gecompileerd dat er wel of geen
gebruik wordt gemaakt van modules, en er kunnen zelfs foutmeldingen
worden getoond tijdens de opstartprocedure als resultaat van
geconfigureerde modules die op dat moment niet beschikbaar zijn,
op voorwaarde dat aan de bovenstaande conditie is voldaan.
Er wordt in dit document verondersteld dat het startpunt van de
bronstructuur voor de huidige kernel is te vinden in
/usr/src/linux en er wordt tevens vanuit
gegaan dat dit ook het startpunt is van een uit te voeren reeks
opdrachten.
Compileertijd versnellen
Als je machine met 16 of meer Megabyte RAM is uitgerust, dan kan er
een aardige snelheidswinst worden geboekt door de kernel twee of meer
modules parallel te laten compileren.
Dit zal de belasting op de machine verhogen onderwijl de kernel wordt
gecompileerd, maar het zal de tijd bekorten die de compilatie in beslag
zal nemen.
Voordat je deze methode kunt gebruiken, moet je de hoeveelheid aanwezig
RAM op je machine controleren, want als je dit te hoog instelt, zal het
de compilatie vertragen. Ervaring heeft aangetoond dat de optimale
waarde afhankelijk is van de hoeveelheid RAM in je systeem overeenkomstig
de volgende formule, tenminste voor systemen tot 32 Megabyte RAM,
alhoewel dit wat conservatief kan zijn voor systemen met grotere
hoeveelheden RAM:
N = [RAM in Megabytes] / 8 + 1
Voor degenen die niet zo van wiskunde houden, staan de waarden voor
de gebruikelijke hoeveelheden RAM in de volgende tabel:
Wanneer je hebt besloten tot het juiste aantal, wijzig je het bestand
/usr/src/linux/Makefile en zoek je naar de regel
waarin thans staat:
MAKE=make
Vervang het door:
MAKE=make -j N
waar N het eerder vastgestelde getal is.
De kernel hercompileren voor gebruik met modules
De kernel kan opnieuw worden geconfigureerd voor gebruik met modules
voor alles behalve het bestandssysteem dat als root wordt gemount
(in de meeste gevallen is dit het ext2 bestandssysteem).
Er zijn echter bepaalde items die moeilijk juist in te stellen zijn
als modules, dus raad ik het volgende aan om in de kernel te compileren:
Ethernet hardware drivers.
SCSI CD-ROM drivers.
Aan de andere kant bestaan er bepaalde drivercombinaites die
ALLEEN als modules functioneren, vooral
combinaties bestaande uit één of meer uit de volgende groep:
Een Parallel Printer,
Een Parallel Poort drive, zoals de
IOMEGA ZipDrive of
JazzDrive, of de BackPack CD-ROM drive, en
De PLIP Daemon.
Je zult moeten besluiten wat je in de kernel compileert en wat als
modules, maar neem bovenstaande punten daarbij in overweging. De
werkelijke keuzes worden gemaakt tijdens de compilatie, door de
tweede instructie uit de volgende reeks:
cd /usr/src/linux
make menuconfig
make dep clean modules modules_install zImage
Wanneer dat is gebeurd, moeten de module afhankelijkheden in kaart
worden gebracht. Dit
wordt bewerkstelligd met de volgende opdracht:
depmod -a
De nieuwe kernel moet nu in de bootreeks worden ingevoegd.
Ik veronderstel dat de lezer voor dit doel gebruik maakt van
LILO, aangezien dit de
enige bootloader is waarmee ik ervaring heb.
Ik raad je aan de nieuw gecompileerde kernel NIET automatisch als de
standaard Linux kernel in te voegen want als het niet functioneert,
het dan zeer moeilijk is de Linux setup te herstellen zonder een volledig
nieuwe installatie uit te voeren, wat niet is aan te bevelen.
Daarom heb ik het volgende record in het bestand
/etc/lilo.conf:
image=/usr/src/linux/arch/i386/boot/zImage
label=new
alias=n
read-only
vga=ask
optional
Dit record geeft aan dat er een OPTIONELE bootoptie is (welke zal worden
genegeerd als de image in kwestie niet bestaat) wat het bestand
/boot/newlinux zal booten als dit wordt gekozen,
en het biedt de mogelijkheid de videomodus te selecteren waarin het
zal worden geboot.
Veronderstel het bestaan van het bovenstaande record in
/etc/lilo.conf, de gereviseerde kernel
bevindt zich na de compilatie reeds op de juiste lokatie
en het kan via de volgende opdracht worden geïnstalleerd:
lilo
Nadat dat is gebeurd, moet de lezer als volgt de volgende stappen
nemen die relevant zijn met betrekking tot de gekozen distributie:
Debian of RedHat voor gebruik van modules configureren
Voordat deze stappen worden uitgevoerd, wordt verondersteld dat die
in
reeds zijn opgevolgd.
De Debian en RedHat distributies hebben identieke bootprocedures,
dus hebben ze ook identieke procedures voor het configureren van
modules.
Ingelogd als root, gebruik je je favoriete teksteditor om een
nieuw bestand met de naam
/etc/rc.d/init.d/modules.init aan te maken
met de volgende inhoud:
# Module initialisatie.
#
# Start de module auto-loading daemon.
/sbin/kerneld
# Mount alle thans niet gemounte auto-mounted partities.
/sbin/mount -a
Na het aanmaken van het bovenstaande bestand, voer je de volgende
stappen uit onderwijl ingelogd als root:
cd /etc/rc.d
chmod 755 init.d/*
cd rc3.d
ln -s ../init.d/modules.init 05modules.init
Het systeem kan nu opnieuw worden opgestart, en wanneer het dit doet,
zal het constateren dat modules volledig zijn geïmplementeerd.
Slackware voor gebruik van modules configureren
Voordat deze stappen worden uitgevoerd, wordt verondersteld dat die
in
reeds zijn opgevolgd.
Het bestand /etc/rc.d/rc.M moet als volgt worden
gewijzigd:
Zo ongeveer op regel 18, staat:
# Blank screen after 15 minutes idle.
/bin/setterm -blank 15
Voeg direct daarna, de volgende paragraaf in,
beginnend en eindigend met de gebruikelijke lege regels:
# Laad de kernel module auto-loader.
/sbin/kerneld
Ongeveer 12 regels verder staat het volgende:
# if there is no /etc/HOSTNAME, fall back on this default:
Onmiddelijk hiervoor, voeg je de volgende paragraaf in,
wederom met de gebruikelijk lege regels rondom:
# Mount de resterende niet gemounte auto-mount drives.
/sbin/mount -a
Sla het bestand op wanneer de wijzigingen zijn aangebracht.
Voor Slackware zijn geen verdere aanpassingen nodig.
Andere distributies voor gebruik van modules configureren
Voordat deze stappen worden uitgevoerd, wordt verondersteld dat die
in
reeds zijn opgevolgd.
De precieze procedure voor andere distributies zijn we niet te
weten gekomen, maar waarschijnlijk is dit gelijk aan het voorgaande.
Om vast te stellen welke, bekijk je als volgt een weergave van de
inhoud van de directory /etc/rc.d:
cd /etc/rc.d
ls -l *.d rc.*
Uit de resulterende weergave, kun je een van de volgende drie opties
selecteren:
Als in deze weergave een directory met de naam
init.d voorkomt en nog een aantal
direectory's met namen die overeenkomen met
rc?.d waar het vraagteken kan worden
vervangen door enkele cijfers, en waarin
GEEN bestand is opgenomen met de naam
rc.M, dan kan die distributie worden
geconfigureerd voor modules door de procedure te volgen
onder de titel
.
Als in deze weergave geen directory is opgenomen met de
naam init.d, maar wel een bestand met
de naam rc.M dan kan die distributie
voor modules worden geconfigureerd door de procedures te volgen
die terug te vinden zijn onder de titel
.
Als deze weergave met geen van bovenstaande criteria overeenkomt,
dan komt in deze distributie een bootscript voor die niet in
deze HowTo wordt behandeld.
In dat geval wordt je uitgenodigd contact op te nemen met de
auteur van dit document om advies.