Aquest fitxer descriu l'estratègia a seguir per a carregar dinàmicament mòduls en el nucli de Linux. No és una descripció técnica de l'interior d'un mòdul: simplement mostra un exemple de com compilar i utilitzar els mòduls. Nota: Hauria d'assegurar-se'n que les modutils-x.I.Z.tar.gz que està utilitzant són les més recents per a aquest nucli. Els números "X.I.Z" reflecteixen la versió de nucli que era més recent en el moment del llançament del paquet modutils. Alguns paquets modutils no tenen en compte les noves característiques modulars a les que donen suport els nous nuclis. La versió requerida en l'actualitat es troba en el fitxer /usr/src/linux/Documentation/Changes. * * * NOTA * * * El nucli ha canviat per a eliminar el suport de kerneld i utilitzar el nou suport kmod. Recordi això al llegir aquest fitxer. Kmod fa exactament el mateix que kerneld, però no necessita de cap programari extern (llegeixi Documentation/kmod.txt) Començant... ------------- En qualsevol cas, el primer pas és compilar el nucli, tal com s'explica al fitxer linux/README. Normalment es realitza així: make menuconfig o make xconfig make dep make clean make bzImage o make bzlilo En "make menuconfig" o "make xconfig", vostè selecciona el que desitja incloure com a parts "residents" en el nucli i quines característiques desitja tindre disponibles com a mòduls carregables. Haurà de seleccionar com a mínim un joc de parts "residents" que es necessiten per a l'arrencada: El sistema de fitxers de la seva partició arrel Un controlador scsi, però busqui més avall una llista de mòduls SCSI Suport per a un disc dur normal Suport per a xarxa (CONFIG_NET) Suport per a TCP/IP (CONFIG_INET), però sense controladors! a més de totes aquelles coses sense les quals no pot viure... El joc de mòduls s'incrementa constantment, i podrà seleccionar l'opció "m" en "make menuconfig" o "make xconfig" per a totes les característiques que el nucli actual pugi oferir com a mòduls carregables. També té la possibilitat de crear mòduls que no depenguin tant de la versió del nucli. Aquesta opció pot seleccionar-se durant la configuració (make menuconfig o make xconfig) habilitant l'opció "Establir la informació de versió en tots els símbols dels mòduls" (CONFIG_MODVERSIONS), i és molt útil en les versions de nuclis "estables", tals com els nuclis de les sèries 1.2, 2.0 i 2.2. Si té mòduls que estan basats en codi font no inclòs en els codis font oficials del nucli, segur que li agradarà aquesta opció... Aquest és un exemple dels mòduls inclosos en els codis font del nucli: La majoria dels sistemes de fitxers:minix, msdos, umsdos, sysv, isofs, hpfs, smbfs, nfs Suport SCSI de mig nivell (requerit pels controladors scsi d'alt i baix nivell) La majoria de controladors SCSI de baix nivell: aha1542, in2000 Tots els controladors SCSI d'alt nivell: disk, tape, cdrom, generic. La majoria dels controladors ethernet: (masses per a donar-ne una llista, llegeixi el fitxer Documentation/networking/net-modules.txt) La majoria dels controladors CDROM: aztcd: Aztech,Orchid,Okano,Wearnes cm206: Philips/LMS CM206 gscd: Goldstar GCDR-420 mcd, mcdx: Mitsumi LU005, FX001 optcd: Optics Storage Dolphin 8000DREC sjcd: Sanyo CDR-H94A sbpcd: Matsushita/Panasonic CR52x, CR56x, CD200, Longshine LCS-7260, TEAC CD-55A sonycd535: Sony CDU-531/535, CDU-510/515 Molts mòduls de la secció misc, com: lp: impressora en línia binfmt_elf: carregador elf binfmt_java: carregador java isp16: interfície cdrom serial: la interfície sèrie (tty) Una vegada que hagi compilat el nucli, pot crear els mòduls teclejant: make modules Això compilarà tots els mòduls i actualitzarà el directori linux/modules. En aquest directori podrà trobar un joc d'enllaços simbòlics, apuntant a diversos fitxers objecte situats a l'arbre de directoris del nucli. Una vegada que ha creat els seus mòduls, també hauria de fer: make modules_install Això copiarà tots els mòduls acabats de fer en subdirectoris sota "/lib/modules/versión_núcleo", on "versión_núcleo" és quelcom com 2.2.9, o la versió correspnent... Tan aviat com hagi reiniciat el mòdul acabat de fer, pot instal·lar i eliminar mòduls al seu gust amb les utilitats: "insmod" i "rmmod". Després de llegir la pàgina de manual d'insmod, també sabrà el fàcil que és configurar un mòdul al fer "insmod" (pista: símbol=valor). Característiques addicionals: ---------------------------- També té accés a dues utilitats: "modprobe" i "depmod", on modprobe és una extensió a "insmod". Aquestes utilitats utilitzen (i mantenen) un joc de fitxers que descriuen tots els mòduls que estan disponibles per al nucli actual en la jerarquia de /lib/modules així com les seves interdependències. Utilitzant l'utilitat modprobe, vostè pot carregar qualsevol mòdul així: /sbin/modprobe module sense posar molta atenció al nucli que està executant, o de quins altres mòduls depén aquest mòdul. Amb l'ajuda del fitxer de configuració de modprobe: "/etc/conf.modules" pot ajustar el comportament de modprobe de moltes maneres, incloent un ajust automàtic de les opcions d'insmod per a cada mòdul. I, sí, HI HAN pàgines de manual per a totes aquestes heines... Per a utilitzar modprobe amb éxit, tindrà que col·locar -si la seva distribució no ho ha fet ja- el següent comandament en la seva rutina /etc/rc.d/rc.S. (Llegeixi més sobre això al fitxer "rc.hints" del paquet d'utilitats del nucli, "modules-x.i.z.tar.gz".) /sbin/depmod -a Això calcula les dependències entre mòduls diferents. Llavors, fa, per exemple /sbin/modprobe umsdos automàticament carregarà tant el mòdul umsdos com el mòdul msdos, ja que umsdos necessita msdos per a executar-se. Usant modinfo: -------------- De vegades necessitarà saber quins paràmetres son acceptats pel mòdul o trobarà un error (bug) i voldrà contactar amb el mantenidor. Llavors modinfo li serà molt útil: Cada mòdul (normalment) contè l'autor/mantenidor, una descripció i una llista de paràmetres. Per exemple "modinfo -a eepro100" ens retorna: Maintainer: Andrey V. Savochkin i "modinfo -d eepro100" ens retorna una descripció: Intel i82557/i82558 PCI EtherExpressPro driver i el més important "modinfo -p eepro100" ens retorna aquesta llista: debug int options int array (min = 1, max = 8) full_duplex int array (min = 1, max = 8) congenb int txfifo int rxfifo int txdmacount int rxdmacount int rx_copybreak int max_interrupt_work int multicast_filter_limit int La "última" utilitat: ----------------------- Bé, ja ha llegit tot el de més amunt, i se sent prou impressionat... Ara li direm que oblidi tot sobre com instal·lar i eliminar mòduls carregables... Amb el programari resident kerneld, totes aquestes tasques es realitzen automàticament. Simplement responga "S" a "Habilitar suport per a carregador de mòduls del nucli" (CONFIG_KERNELD o CONFIG_KMOD, depenent de si utilitza un nucli 2.0.x o anterior, o un 2.2.x) en "make menuconfig" o "make xconfig", i asseguris, en el cas de tindre un nucli 2.0.x, que /sbin/kerneld s'inicia tan habiat com sigui possible després de l'arrencada i, per a qualsevol versió del nucli, que "/sbin/depmod -a" ha sigut executat per al nucli actual. (Llegeixi més sobre això al paquet d'utilitats per a mòduls) Quan un programari desitgi que el nucli utilitzi una característica que només està disponible com a mòdul carregable, i si el nucli no té instal·lat aquest mòdul, el nucli demanarà al programari resident kerneld o a kmod que s'en façi càrrec de la situació i la dugui a terme el millor que pugui. Això és el que succeeix: - El nucli s'adona que es demana una característica que no està inclosa en el nucli. - El nucli envia un missatge a kerneld o a kmod, amb una descripció simbòlica de la característica necessitada. - kerneld, o kmod, li demana a modprobe que carregui el mòdul que encaixa amb la descripció simbòlica donada. - modprobe busca dins de la seva taula de traducció interna per a veure si hi ha un mòdul que hi encaixi. Aquesta taula pot ser reconfigurada i expandida afegint línies "àlies" en "/etc/conf.modules". - Se sol·licita a insmod que instal·li els mòduls que modprobe ha decidit que necessita el nucli. Cada mòdul serà configurat segons les línies de "opcions" en "/etc/conf.modules". - modprobe surt i kerneld o kmod li diu al nucli que la petició ha estat exitossa (o no...) - El nucli utilitza la característica acabada d'instal·lar només com si haguessi estat configurada en el nucli com a part "resident". El millor de tot és que un mòdul automàticament instal·lat ha estat sense utilitzar-se durant una estona (normalment 1 minut), el mòdul s'eliminarà automàticament també del nucli. Això fa que el nucli utilitzi la mínima part de memòria en un moment determinada, deixant-la disponible per a usos més productius que com portapapers de codi no utilitzat. En l'actualitat aquest és només un efecte col·lateral del benefici autèntic de kerneld: Només ha de crear un nucli mínim, això és més o menys independent de la configuració real de maquinari. La configuració del nucli "virtual" és, en el seu lloc, controlada per un fitxer de configuració de manera semblant al cas de màquina corrent amb el seu propi nucli. Això hauria de ser una bona notícia per a gent que manté múltiples màquines així com per als fabricants de distribucions. Per a utilitzar kerneld amb la menor quantitat de problemes, vostè necessita un modprobe d'una versió que es pugui considerar recent d'acord amb el seu nucli, així com un fitxer de configuració per a modprobe ("/etc/conf.modules"). Amb modprobe ja coneix quasi tots els mòduls, el fitxer de configuració mínima podria ser alguna cosa com: àlies scsi_hostadapter aha1542 # o el controlador SCSI que tingui àlies eth0 3c509 # o el controlador de xarxa que tingui # podria necessitar línies d'opcions per a algun controlador de xarxa: options 3c509 io=0x300 irq=10 # o per a algun un altre mòdul: options cdu31a cdu31a_port=0x1f88 sony_pas_init=1 Pot afegir aquestes línies també, però només són "cosmètiques": àlies net-pf-3 off # no hi ha disponible mòdul ax25 (encara) àlies net-pf-4 off # si no utilitza el mòdul ipx àlies net-pf-5 off # si no utilitza el mòdul appletalk Escrit per: Jacques Gelinas Bjorn Ekwall Traduït per: Antoni Bella Perez