Zorg eerst dat je aan de benodigde onderdelen komt: een geschikte kernel en het laatste modules package. Dan moet je de module utility's volgens de instructies in het package installeren. Tamelijk simpel: Pak gewoon de broncode uit en start make install. Hiermee worden de volgende programma's in /sbin geïnstalleerd: genksysm, insmod, lsmod, modprobe, depmod en kerneld. Ik raad je aan wat regels toe te voegen aan je opstartscripts om de benodigde setup uit te voeren op het moment dat je Linux boot. Voeg de volgende regels toe aan het bestand /etc/rc.d/rc.S (als je Slackware draait) of aan /etc/rc.d/rc.sysinit als je SysVinit, d.w.z. Debian, Corel, RedHat, Mandrake of Caldera draait:
# Start kerneld - dit moet zeer vroeg gebeuren in het bootproces, # zeker VOORDAT je fsck op bestandssystemen uitvoert # waarvoor wellicht automatisch diskdrivers moeten worden geladen if [ -x /sbin/kerneld ] then /sbin/kerneld fi # Hier komen de standaard fsck opdrachten # En de mount opdracht om het root fs read-write te mounten # Update kernel-module dependencies file # Je root-fs MOET nu read-write zijn gemount if [ -x /sbin/depmod ] then /sbin/depmod -a fi |
Deze opdrachten kunnen reeds voorkomen in het SysV init script. Het eerste deel start kerneld zelf. Het tweede deel roept depmod -a tijdens de systeemstart aan om een lijst met alle beschikbare modules samen te stellen en het analyseert de onderlinge afhankelijkheden. De depmod map vertelt kerneld dan of voor een module een andere module moet zijn geladen voordat het zichzelf laadt.
![]() | Recente versies van kerneld hebben een optie om te worden gelinkt met de GNU gdbm library, libgdbm. Als je dit activeert bij het bouwen van de module utility's, dan zal kerneld niet starten als libgdm niet beschikbaar is wat het geval kan zijn als /usr zich op een aparte partitie bevindt en het starten van kerneld plaatsvindt voordat /usr is gemount. De aanbevolen oplossing is om /usr/lib/libgdbm te verplaatsen naar /lib, of om kerneld statisch te linken. |
Pak vervolgens de kernelsources uit, configureer en bouw naar wens een kernel. Als je dit nog nooit eerder hebt gedaan, dan moet je beslist het README bestand lezen in de hoofdirectory van de Linux sources. Wanneer je make xconfig uitvoert om de kernel te configureren, let dan op de volgende vragen:
Enable loadable module support (CONFIG_MODULES) [Y/n/?] Y |
Je moet de laadbare module ondersteuning selecteren, anders zullen er geen te laden modules zijn voor kerneld! Geef gewoon Y als antwoord.
Kernel daemon support (CONFIG_KERNELD) [Y/n/?] Y |
Dit is natuurlijk ook nodig. Dan is er heel veel wat als module kan worden gebouwd, je zult vragen te zien krijgen als:
Normal floppy disk support (CONFIG_BLK_DEV_FD) [M/n/y/?] |
waar je kunt antwoorden met een M voor "Module". Gewoonlijk hoeven alleen de drivers die nodig zijn op je systeem om op te starten in de kernel te worden gebouwd; de rest kan worden gebouwd als modules.
![]() | Essentiële drivers |
---|---|
Essentiële drivers die noodzakelijk zijn om je systeem te booten moeten in de core kernel worden gecompileerd en kunnen niet als modules worden geladen. Kenmerkend zijn hier de harddisk-driver en de driver voor het root filesysteem. Als je een dual-boot machine hebt en het rekent op bestanden die te vinden zijn op de andere partitie, dan moet je in de core kernel ook ondersteuning compileren voor dat bestandssysteem. |
Wanneer je make config hebt doorlopen, compileer en installeer je de nieuwe kernel en de modules met make dep clean bzlilo modules modules_install.
Oef.
![]() | Compileren van een kernel-image |
---|---|
De opdracht make zImage zal stoppen zonder een kernel te installeren en de nieuwe kernel-image achterlaten in het bestand arch/i386/boot/zImage. Om dit image te gaan gebruiken, zul je het naar waar je je boot-image hebt, moeten kopiëren en het handmatig met LILO moeten installeren. Zie voor meer informatie over het configureren, bouwen en installeren van je eigen kernel de Kernel-HOWTO, welke regelmatig wordt gepost naar comp.os.linux.answers, en beschikbaar is vanaf het Linux Documentatie Project en mirrors. |
Start je systeem nu opnieuw op met de nieuwe kernel. Wanneer het systeem weer opkomt, kun je ps ax uitvoeren, en als het goed is, zie je dan een regel voor kerneld:
PID TTY STAT TIME COMMAND 59 ? S 0:01 /sbin/kerneld |
Een van de fraaie dingen met kerneld is dat zodra je de kernel en de daemon hebt geïnstalleerd, er weinig instellingen nodig zijn. Probeer om te beginnen één van de drivers die je als een module compileerde; het is eerder waarschijnlijk dan niet dat het zonder verdere configuratie zal werken. Als ik de floppy driver als een module compileerde, dan zou ik een DOS diskette in het diskettestation kunnen doen en typen:
osiris:~ $ mdir a: Volume in drive A has no label Volume Serial Number is 2E2B-1102 Directory for A:/ binuti~1 gz 1942 02-14-1996 11:35a binutils-2.6.0.6-2.6.0.7.diff.gz libc-5~1 gz 24747 02-14-1996 11:35a libc-5.3.4-5.3.5.diff.gz 2 file(s) 26689 bytes |
De floppy driver werkt! Het wordt automatisch door kerneld geladen wanneer ik de floppy disk probeer te gebruiken.
Om te bekijken of de floppy module inderdaad is geladen, kun je /sbin/lsmod uitvoeren om een opsomming van alle thans geladen modules te zien te krijgen:
osiris:~ $ /sbin/lsmod Module: #pages: Used by: floppy 11 0 (autoclean) |
De "(autoclean)" betekent dat de module automatisch door kerneld zal worden verwijderd als het meer dan een minuut niet wordt gebruikt. Dus de 11 pagina's geheugen (= 44kB, één pagina is 4 kB) zullen alleen worden gebruikt wanneer ik het diskettestation benader. Gebruik ik de diskette meer dan een minuut niet, dan wordt het geheugen vrijgegeven. Heel fraai, als je weinig geheugen hebt voor je applicaties!