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".
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).
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 |
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.
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.