5.9. 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 6.1 og SuSE 6.3). 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.1 vil din maskine svare "2.2.12-20".

5.9.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 bruger 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).

5.9.2. Indlæs et modul

Typisk ligger moduler i et underkatalog til /lib/modules. På en standard-installation af Red Hat 6.0 hedder underkataloget 2.2.5-15 efter kernen (husk svaret fra uname). Nede i /lib/modules/2.2.5-15 finder du en række underkataloger. Alle modulerne er grupperet efter deres anvendelse, f.eks. indeholder underkataloget cdrom drivere til CDROM drev (alle andre end ATAPI-drev). Til at indlæse et modul bruger du kommandoen insmod, som er en forkortelse for "install module". 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]#  insmod hpfs

Det fine ved modul-systemet er, at du kun behøver at angive navnet på modulet; insmod 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]#  insmod eepro100
/lib/modules/2.2.5-15/net/eepro100.o: init_module: Device or resource busy

5.9.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øger en dæmon ved navn kerneld for. Den anden måde er at gøre det selv. Til denne metode skal du bruge kommandoen rmmod ("remove module").

[root@linus /root]#  rmmod hpfs

Kigger du i kataloget /lib/modules/2.2.5-15, ser du filen modules.dep. Denne fil skal du ikke pille ved - den bliver automatisk genereret under opstart af Linux (næste gang din maskine booter, se efter linjen "Finding module dependencies" - på det tidspunkt genereres filen). Filen indeholder information om, hvilke moduler et modul afhænger af. Filen er en tekstfil, så du kan bladre i den vha. less eller more.

5.9.4. Konfiguration

Når vi taler om moduler, findes der en meget vigtig fil, som systemadministratoren kan rette i, nemlig /etc/conf.modules. 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 conf.modules.

# /etc/conf.modules
alias parport_lowlevel parport_pc
pre-install pcmcia_core /etc/rc.d/init.d/pcmcia start
alias sound sb
pre-install sound insmod 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 defektere indstikskort 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 nøgleord er "options". Her kan systemadministratoren angive en række options til en driver/modul. I det ovenstående eksempel på conf.modules 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 Sound Blaster lydkort (f.eks. at I/O adressen er 220, og interruptet er 5).

Nøgleordet "pre-install" fortæller modul-systemet, at før et modul indlæses skal et andet modulet være indlæst. Alt hvad der kommer efter modulets navn, tolkes som en kommando med tilhørende options. Ligeledes findes "post-install", som angiver en kommando, der skal udføres efter modulet er indlæst.