Mindenki, aki használta a "betölthető modulokat", igazán "megszerette" őket! Szeretem a modulokat, mivel agyafúrt dolgok, és a nagyobb feladatokat kicsi, kezelhető részekre szedik szét. Ha elkezded használni, fogadok, hogy megszereted őket! A modulok csak a Linuxra jellemzőek. Ez volt a világ első olyan operációs rendszere, ami bemutatta a betölthető modulok fogalmát. Egyetlen más operációs rendszer sem rendelkezik ezzel a fogalommal, de a közeljövőben más rendszerek is megvalósíthatják.
A betölthető modulok memóriát spórolhatnak, és megkönnyítik a beállítást. A modulok hatóköre magában foglalja a fájlrendszereket, ethernet kártyák, szalagos meghajtók, nyomtatók és mások eszközmeghajtóit.
A modulok a rendszermag kódjának darabjai, amelyeket nem csatoltak (foglaltak bele) közvetlenül a bele. Az ember lefordíthatja őket elkülönítve is, és beillesztheti vagy eltávolíthatja a futó rendszermagból majdnem bármikor. Rugalmasságából kifolyólag nem ajánlott bizonyos rendszermag-jellemzőket beléjük kódolni. Sok népszerű eszközmeghajtó, mint például a PCMCIA és a QIC-80/40 szalagos eszközmeghajtók, betölthető modulok.
Olvasd el a Module-HOWTO (Modul HOGYAN) doksit: "http://www.tldp.org/HOWTO/Module-HOWTO" .
Olvasd el ezeket a kézikönyv-oldalakat is:
bash# rpm -i /mnt/cdrom/Redhat/RPMS/modutils*.rpm bash# man lsmod bash# man insmod bash# man rmmod bash# man depmod bash# man modprobe |
bash# man insmod bash# modprobe loop bash# insmod loop bash# lsmod |
A modulok segédeszközeinek RPM csomagját így telepítheted:
bash# rpm -i /mnt/cdrom/Redhat/RPMS/modutils*.rpm |
Az insmod beilleszti a modult a futó rendszermagba. A modulok általában a .o kiterjesztéssel rendelkeznek; a példaként említett neve drv_hello.o , így ennek beillesztéséhez kiadjuk az: " insmod drv_hello.o " parancsot. A rendszermag által jelenleg használt modulok listájához használd az lsmod parancsot. A kimenet valami ilyesmi: blah# lsmod Module: #pages: Used by: drv_hello 1 " drv_hello " a modul neve, egy lapnyi (4k) memóriát használ, és jelenleg nincs más modul, ami tőle függ. Eltávolításához használd az " rmmod drv_hello " parancsot. Figyeld meg, hogy az rmmod egy modulnevet, nem pedig egy fájlnevet igényel; ezt kinyerheted az lsmod listájából. A többi modul-segédeszköz céljait a kézikönyv-oldalaik írják le.
A 2.0.30-as verziótól kezdve, majdnem minden elérhető betölthető modul formájában. A használatukhoz először bizonyosodj meg, hogy nem állítod be őket a rendes rendszermagban; tehát nem válaszolsz y -el ezekre a " make config " alatt. Fordíts egy új rendszermagot és indítsd el. Aztán: cd az /usr/src/linux könyvtárba ismét, és: " make modules ". Ez lefordítja az összes modult, amit nem adtál meg a rendszermag konfigurációjában, és hivatkozást (link) készít hozzájuk az /usr/src/linux/modules könyvtárba. Használhatod őket egyenesen abból a könyvtárból vagy hajtsd végre a " make modules_install " parancsot, ami telepíti őket a /lib/modules/x.y.z könyvtárba, ahol x.y.z a rendszermag verziója.
Ez főleg a fájlrendszereknél lehet kényelmes. Valószínűleg nem használod gyakran a minix vagy a msdos fájlrendszert. Például, ha belebotlok egy msdos (iszonyat!) hajlékonylemezbe, csak beírom: insmod /usr/src/linux/modules/msdos.o , és aztán rmmod msdos , amikor végeztem. Ez az eljárás körülbelül 50k RAM-ot spórol a rendszermagban a normál működés során. Egy kis megjegyzés kívánkozik ide a minix fájlrendszer kapcsán: mindig közvetlenül a rendszermagba állítsd be, ha "mentőlemezen" akarod használni.
Tegyük fel, hogy már megcsináltad a "make modules" és "make modules_install" lépéseket. Később pedig még a "make clean"-t is a helyfelszabadítás érdekében. Most pedig változtatni akarsz valamelyik modul egyetlen C fájlján, és újra akarod építeni azt az egy modult, és a modulfájlt bemásolni a /lib/modules alá. Hogyan csinálod? Hiszen nem akarsz egy "make modules" parancsot kiadni, az mindent újraépít és 2-3 óráig tart!
Le tudsz fordítani egyetlen modulfájlt (mondjuk a foo.o-t) és telepítheted is. Ehhez egyszerűen szerkeszd meg a Makefile-t, és változtasd meg a SUBDIRS bejegyzést csakis azokra a könyvtárakra, amik érdekelnek.
Egy jó példa: azt vettem észre, hogy a rendszermagom nem támogatja az NTFS fájlrendszert (persze kiadtam a "make clean"-t a "make modules" után. A francba!). Így elhatároztam, hogy lefordítom az NTFS betölthető modulját. Nem akartam az egész készletet (mivel ez nálam 2 óráig tartana), ezért az alábbi módszert követtem, és csak a fs/ntfs modult fordítottam, majd kiadtam az "insmod ntfs" parancsot. Az egész 5 percig tartott!
Másik példa: ha csak az fs/autofs modul érdekel, akkor a következőket teszem:
cd /usr/src/linux mv Makefile Makefile.original cp Makefile.original Makefile.my ln -s Makefile.my Makefile # mivel néhány fájlnak még szüksége lehet a "Makefile"-ra vi Makefile.my # Megjegyzésekkel láttam el a "SUBDIRS" sorokat, és hozzáadtam azokat a könyvtárakat, amik érdekeltek # például a fs/autofs-hez: #SUBDIRS =kernel drivers mm fs net ipc lib abi crypto SUBDIRS =fs/autofs # Elmentettem a Makefile.my fájlt és kiadtam a következő parancsot: make -f Makefile.my modules # Ez megcsinálja az autofs.o modult # Most bemásoltam a modul objektumfájlt a célkönyvtárba: /lib/modules # VESZÉLYES: NE CSINÁLD EZT: "make -f Makefile.my modules_install" , mivel kitakaríthatja # a többi jót is a /lib/modules könyvtárból !! Csak másold be, így: cp autofs.o /lib/modules/2.4.18-19.8.0/kernel/fs/autofs # Most állítsunk vissza mindent a normál helyzetbe rm Makefile # This is a link to Makefile.my ln -s Makefile.original Makefile # Rögzítsd a változtatásokat a beállítófájlban a későbbi használat érdekében # Szerkeszd az /usr/src/linux/.config fájlt és állítsd be modulként a szolgáltatást cd /usr/src/linux mkdir /usr/src/kernelconfigs ; cp /usr/src/linux/.config /usr/src/kernelconfigs/.config.save; cp /usr/src/linux/.config /usr/src/linux/configs/.config.save # Különösen biztonságos cp /boot/config* /usr/src/linux/configs/ # Különösen biztonságos vi /usr/src/linux/.config # és változtasd meg a beállító paramétert. Például az én esetemben # az ntfs modulnál CONFIG_NTFS_FS=m jelzi, hogy ez modul. |
Többet is megtudhatsz a Makefile-ról és a make-ről, ha elolvasod a GNU make kézikönyv oldat:
University of Utah Makefile "http://www.math.utah.edu/docs/info/make-stds_toc.html"
University of Hawaii Makefile "http://www.eng.hawaii.edu/Tutor/Make"
A Linuxban - man make
A Linuxban - info make
Ismerkedj meg a modulokat elkészítő Makefile-al. A fájlnak van egy "module" sora, mint:
modules: $(patsubst %, _mod_%, $(SUBDIRS)) |
A patsubst függvény szintaktikája $(patsubst minta,helyettesítés,szöveg). A százalékjelet ([percnt]) ugyanúgy használja, mint a mintaillesztő szabályok - mint egy sztringet, ami illeszkedik a mintában és a helyettesítő szövegben is. Végigkeresi a "szöveg"-et elválasztójellel tagolt szavakért, amik illeszkednek a "mintá"-ra és kicseréli az előfordulásaikat a "helyettesítés"-re.
Ez a Makefile ugyanúgy tartalmaz szabványos shell-függvényeket, mint szabványos make függvényeket. A shell-függvények szintaktikája $(shell parancs). Ez a függvény kimenetét adja vissza (az új sorok kihúzásával).
Előző | Tartalomjegyzék | Következő |
Gyors lépések - a rendszermag fordítása | A rendszermag "klónozása" |