Μονάδες ενσωμάτωσης (Loadable modules)

Η ενότητα αυτή περιγράφει:

Τι είναι οι μονάδες ενσωμάτωσης (loadable modules)

Ο πυρήνας του Linux μπορεί να επεκταθεί ώστε να έχει περισσότερες δυνατότητες με δυο βασικού τρόπους: Όταν ρυθμίσετε
και μεταγλωττίσετε τον πυρήνα σας, αν καθορίσετε ένα χαρακτηριστικό του πυρήνα μ' ένα y τότε το λογισμικό που το υποστηρίζει θα γίνει μέρος του πυρήνα σας (το χαρακτηριστικό αυτά θα μεταγλωτιστούν με το νέο πυρήνα και πάντα θα χρησιμοποιούν τη μνήμη). Αν καθορίσετε το χαρακτηριστικό μ' ένα m τότε το χαρακτηριστικό θα είναι μια μονάδα ενσωμάτωσης που θα μπορεί να φορτώνεται/αφαιρείται όποτε εσείς θέλετε (και θα χρησιμοποιεί μνήμη μόνο αν η μονάδα αυτή φορτωθεί). Ένα n σημαίνει ότι το χαρακτηριστικό δεν θα είναι ενεργοποιημένο μ' αυτόν τον πυρήνα.

Ακολουθεί ένα παράθυρο ρύθμισης του πυρήνα με το make xconfig και:

linux kernel modules configuration

Χρήση loadable modules

Tο αρχείο /etc/modules.conf ρυθμίζει ποιες μονάδες ενσωμάτωσης φορτώνονται αυτόματα. Ακολουθεί ένα δείγμα:
# The Ethernet interface on this machine is an eepro100:
alias eth0 eepro100

# Automatically look for a parallel port:
alias parport_lowlevel parport_pc

# If somebody tries to use a scsi device, the adaptor is an atp870u:
alias scsi_hostadapter atp870u

# If somebody uses the usb bus, it is a usb-uhci type:
alias usb-controller usb-uhci

# The sound interface uses the i810_audio device:
alias sound-slot-0 i810_audio
Τροποποιώντας το /etc/modules.conf: Ας πούμε ότι η συσκευή Ethernet eepro100 χαλάει και αγοράζετε μια νέα κάρτα Ethernet που χρησιμοποιεί τον οδηγό tulip. Στην περίπτωση αυτή, η σχετική γραμμή στο αρχείο /etc/modules.conf θα πρέπει ν' αλλάξει στην εξής:
alias eth0 tulip
Στις περισσότερες περιπτώσεις, όταν επανεκκινήσετε με τη νέα κάρτα Ethernet, ο διαχεριστής ρυθμίσεων του Red Hat θα καταλάβει αυτόματα ότι μια νέα κάρτα Ethernet έχει εγκατασταθεί, και θ' αλλάξει το αρχείο /etc/modules.conf για σας.

Για να δείτε μια λίστα με τις μονάδες ενσωμάτωσης του πυρήνα στο σύστημά σας μαζί με την κατάστασή τους:

# lsmod
Module                  Size  Used by    Not tainted
i810_audio             26408   2 (autoclean)
ac97_codec             13768   0 (autoclean) [i810_audio]
soundcore               7108   2 (autoclean) [i810_audio]
scanner                10716   0 (unused)
mousedev                5688   0 (unused)
keybdev                 2944   0 (unused)
input                   6176   0 [mousedev keybdev]
hid                    11804   0 (unused)
usb-uhci               27436   0 (unused)
usbcore                81088   1 [scanner hid usb-uhci]
Για να δείτε μια λίστα με τ' αρχεία μονάδων:
# modprobe --list
/lib/modules/2.4.20/kernel/drivers/block/floppy.o
/lib/modules/2.4.20/kernel/drivers/block/loop.o
/lib/modules/2.4.20/kernel/drivers/char/rtc.o
/lib/modules/2.4.20/kernel/drivers/input/input.o
/lib/modules/2.4.20/kernel/drivers/input/keybdev.o
/lib/modules/2.4.20/kernel/drivers/input/mousedev.o
/lib/modules/2.4.20/kernel/drivers/net/dummy.o
/lib/modules/2.4.20/kernel/drivers/scsi/atp870u.o
/lib/modules/2.4.20/kernel/drivers/scsi/scsi_mod.o
/lib/modules/2.4.20/kernel/drivers/scsi/st.o
/lib/modules/2.4.20/kernel/drivers/sound/ac97_codec.o
/lib/modules/2.4.20/kernel/drivers/sound/i810_audio.o
/lib/modules/2.4.20/kernel/drivers/sound/soundcore.o
/lib/modules/2.4.20/kernel/drivers/usb/dc2xx.o
/lib/modules/2.4.20/kernel/drivers/usb/hid.o
/lib/modules/2.4.20/kernel/drivers/usb/scanner.o
/lib/modules/2.4.20/kernel/drivers/usb/usb-uhci.o
/lib/modules/2.4.20/kernel/drivers/usb/usbcore.o
/lib/modules/2.4.20/kernel/fs/fat/fat.o
/lib/modules/2.4.20/kernel/fs/msdos/msdos.o
/lib/modules/2.4.20/kernel/fs/vfat/vfat.o
Για να φορτώσετε μια μονάδα, και τις μονάδες που χρειάζεται, χρησιμοποιήστε το modprobe:
modprobe st
Για ν' αφαιρέσετε μια φορτωμένη μονάδα, χρησιμοποιήστε το rmmod:
rmmod st
Για να πάρετε πληροφορίες για μια μονάδα, χρησιμοποιήστε το modinfo:
# modinfo st
filename:    /lib/modules/2.4.20/kernel/drivers/scsi/st.o
description: "SCSI Tape Driver"
author:      "Kai Makisara"
license:     "GPL"
parm:        buffer_kbs int, description "Default driver buffer size (KB; 32)"
parm:        write_threshold_kbs int, description "Asynchronous write threshold (KB; 30)"
parm:        max_buffers int, description "Maximum number of buffer allocated at initialisation (4)"
parm:        max_sg_segs int, description "Maximum number of scatter/gather segments to use (32)"
parm:        blocking_open int, description "Block in open if not ready an no O_NONBLOCK (0)"

Για περισσότερες πληροφορίες