Linux – Friheden til systemadministration: Version 2.8.20060113 – 2021-01-07 | ||
---|---|---|
forrige | Kapitel 4. Linux-kernen | næste |
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".
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).
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
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.
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.