4.7. Moduler

Moduler (eller mere korrekt: indlæsbare kerne-moduler) er en af de mere smarte ting ved Linux. Kort fortalt er et modul en driver, som systemadministratoren (root) kan indlæse og nedlægge, mens maskinen kører, dvs. du kan indlæse en driver uden at genstarte. I dette afsnit vil vi introducere det mest basale omkring moduler.

Modul-systemet blev skrevet om til kerne-version 2.2 (som følger med Red Hat 7.0 og SuSE 6.4). Vi vil antage, at du har en version 2.2-kerne. Du kan evt. tjekke det ved at skrive uname -r. For en standard-installation af Red Hat 6.2 vil din maskine svare "2.2.14-20".

4.7.1. Hvad findes der allerede indlæst?

Inden vi går i krig med at indlæse moduler, kan det være rart at vide, hvilke der allerede er indlæst. For at finde ud af det, skal du bruge kommandoen lsmod, som er en forkortelse for "list modules". Kommandoen kan udføres af alle brugere, men vær opmærksom på, at kommandoen ligger i kataloget /sbin, og at almindelige brugere ikke har dette katalog med i deres søgesti. Derfor skal du skrive /sbin/lsmod, hvis du ikke er logget ind som systemadministrator (root).

[root@linus /root]#  lsmod
Module                  Size  Used by
ppp                    18316   0  (autoclean)
slhc                    4328   0  (autoclean) [ppp]
autofs                  9028   1  (autoclean)
nfs                    29944   1  (autoclean)
lockd                  30856   1  (autoclean) [nfs]
sunrpc                 52356   1  (autoclean) [nfs lockd]
nls_iso8859-1           2020   1  (autoclean)
nls_cp437               3548   1  (autoclean)
vfat                   11516   1  (autoclean)
fat                    25664   1  (autoclean) [vfat]
awe_wave              157804   0 
sb                     33204   0 
uart401                 5968   0  [sb]
sound                  57208   0  [awe_wave sb uart401]
soundlow                 300   0  [sound]
soundcore               2372   7  [sb sound]

Tabellen, som lsmod producerer, indeholder navn på modulet, hvor meget hukommelse det bruger, hvor mange programmer der bruger modulet, samt om der er andre moduler, som bruger modulet. Tag nu PPP-modulet: det fylder 18315 bytes, og ingen programmer eller andre moduler benytter det (logisk, idet forbindelsen til internet-udbyderen er lukket ned).

4.7.2. Indlæs et modul

Typisk ligger moduler i en undermappe til /lib/modules. På en standard-installation af Red Hat 6.2 hedder undermappen 2.2.14-5.0 efter kernen (husk svaret fra uname). Nede i /lib/modules/2.2.14-5.0 finder du en række underkataloger. Alle modulerne er grupperet efter deres anvendelse, f.eks. indeholder undermappen cdrom drivere til cd-rom-drev (alle andre end ATAPI-drev). Til at indlæse et modul bruger du kommandoen modprobe. Du kan kun indlæse moduler som systemadministrator. Nedenfor viser vi, hvordan du kan indlæse en driver til HPFS (OS/2's filsystem).

[root@linus /root]#  modprobe hpfs

Det fine ved modul-systemet er, at du kun behøver at angive navnet på modulet; modprobe finder selv ud af, hvor det er placeret.

Det kan være, at du kommer til at angive det forkerte modul, dvs. du forsøger at indlæse et modul til et stykke hardware, som du ikke har. Nedenfor forsøger vi at indlæse driveren til et Intel EtherExpress Pro/100-kort; et kort, som ikke sidder i maskinen.

[root@linus /root]#  modprobe eepro100
/lib/modules/2.2.5-15/net/eepro100.o: init_module: Device or resource busy

4.7.3. Nedlæg et modul

Det kan ske, at du bliver træt af et modul eller blot i længere tid ikke har brug for det, og du derfor gerne vil nedlægge det igen. Der er to måder, du kan gøre det på. Den første kræver simpel tålmodighed: efter 60 sekunder vil ubrugte moduler automatisk blive nedlagt. Dette sørger en daemon ved navn kerneld for. Den anden måde er at gøre det selv. Til denne metode skal du bruge kommandoen modprobe -r ("remove module").

[root@linus /root]#  modprobe -r hpfs

Kigger du i mappen /lib/modules/2.2.14-5.0, ser du filen modules.dep. Filen indeholder information om, hvilke moduler et modul afhænger af. Filen er en tekstfil, så du kan bladre i den ved hjælp af less eller more. Filen skal du ikke pille ved – den bliver automatisk genereret under opstart af Linux ved at depmod -a køres. Næste gang din maskine starter, kan du se efter linjen "Finding module dependencies" – på det tidspunkt genereres filen. Derved sikrer man sig at der anvendes det rigtige modul, dette er specielt vigtigt hvis man har flere kerneversioner installeret.

4.7.4. Opsætning

Når vi taler om moduler, findes der en meget vigtig fil, som systemadministratoren kan rette i, nemlig /etc/modules.conf. Det skal lige siges, at filen bliver rettet af mange af de værktøjer, som vi omtaler i dette kapitel, f.eks. sndconfig, så måske kommer du aldrig selv til at rette i den. Lad os se på indholdet af en ikke helt ualmindelig modules.conf.

# /etc/modules.conf
alias parport_lowlevel parport_pc
pre-install pcmcia_core /etc/rc.d/init.d/pcmcia start
alias sound sb
pre-install sound modprobe sound dmabuf=1
options opl3 io=0x388
alias midi awe_wave
post-install awe_wave /bin/sfxload /etc/midi/GU11-ROM.SF2
options sb io=0x220 irq=5 dma=1 dma16=5 mpu_io=0x330

Syntaksen for filen er som følger: først et nøgleord, derefter et navn på et modul og til slut en række parametre.

Lad os begynde med det "lette" nøgleord først. Det lette nøgleord er "alias". Et alias betyder simpelthen, at når systemet spørger efter et modul, mener systemet i virkeligheden et andet. Det lyder lidt mærkeligt, men det er meget nyttigt. Et alias som alias eth0 eepro100 vil betyde at når Linux forsøger at initialisere ethernettet (eth0), skal driveren eepro100 bruges. Ofte kan Linux ikke automatisk detektere udvidelseskort i gamle maskiner, og det kan derfor være nyttigt at fortælle Linux, hvilket netkort der sidder i maskinen. Har du et gammelt kort, tilføjer du derfor en "alias"-linje som passer til dit kort. Et andet eksempel kan være hvis du skal sætte dit 3Com 90x-netkort i 10 Mbit-tilstand (og ikke 100 Mbit), så skal du indsætte følgende linjer:

alias eth0 3c90x
options 3c90x media_select=1

Et andet nøgleord er "options" (parametre). Her kan systemadministratoren angive en række parametre til en driver/modul. I det ovenstående eksempel på modules.conf står der f.eks. options sb io=0x220 irq=5 dma=1 dma16=5 mpu_io=0x330. Denne linje fortæller modulet sb en række ting – i dette tilfælde de relevante oplysninger omkring et SoundBlaster-lydkort (f.eks. at I/O-adressen er 220, og interruptet er 5).

Nøgleordet "pre-install" tillader at udføre kommandoerne efter modulnavnet før modulet installeres. . F.eks. kald af "/etc/rc.d/init.d/pcmcia start" inden pcmcia_core kan loades. Alt hvad der kommer efter modulets navn, tolkes som en kommando med tilhørende parametre. Ligeledes findes "post-install", som angiver en kommando, der skal udføres efter modulet er indlæst.