IMPORTANT: Per accedir als fitxer de subversion: http://acacha.org/svn (sense password). Poc a poc s'aniran migrant els enllaços. Encara però funciona el subversion de la farga però no se sap fins quan... (usuari: prova i la paraula de pas 123456)

Introducció

El maquinari és gestionat pels drivers. Els drivers són utilitzats pel kernel (kernel drivers) per comunicar-se amb els dispositius de maquinari. La majoria de drivers són mòduls del kernel.

Normalment s'emmagatzemen a:

/ lib/modules

i es programari que pot ser carregat o descarregat pel kernel per tal d'accedir al maquinari.

Paquet module-init-tools

A Ubuntu i altres sistemes Debian, les comandes de gestió de mòduls del kernel les proporciona el paquet module-init-tools.Els fitxers instal·lats per aquest paquet són:

$ dpkg -L module-init-tools | more
/. 
/bin
/bin/lsmod
/sbin
/sbin/insmod
/sbin/modprobe
/sbin/rmmod
/sbin/depmod
/sbin/modinfo
/sbin/update-modules
/etc
/etc/modprobe.d
/etc/modprobe.d/arch
/etc/modprobe.d/arch/x86_64
/etc/modprobe.d/blacklist-watchdog
/etc/modprobe.d/blacklist-framebuffer
/etc/modprobe.d/blacklist-amd76-edac
/etc/modprobe.d/options
/etc/modprobe.d/aliases
/etc/modprobe.d/isapnp
/etc/modprobe.d/blacklist-firewire
/etc/modprobe.d/blacklist
/etc/depmod.d
/etc/depmod.d/ubuntu.conf
/etc/init.d
/etc/init.d/module-init-tools
/lib
/lib/modules
/usr
/usr/share
/usr/share/doc
/usr/share/doc/module-init-tools
/usr/share/doc/module-init-tools/changelog.gz
/usr/share/doc/module-init-tools/copyright
/usr/share/doc/module-init-tools/changelog.Debian.gz
/usr/share/man
/usr/share/man/man5
/usr/share/man/man5/modprobe.conf.5.gz
/usr/share/man/man5/modules.dep.5.gz
/usr/share/man/man5/modules.5.gz
/usr/share/man/man5/depmod.conf.5.gz
/usr/share/man/fr
/usr/share/man/fr/man5
/usr/share/man/fr/man5/modules.5.gz
/usr/share/man/man8
/usr/share/man/man8/depmod.8.gz
/usr/share/man/man8/insmod.8.gz
/usr/share/man/man8/modinfo.8.gz
/usr/share/man/man8/modprobe.8.gz
/usr/share/man/man8/rmmod.8.gz
/usr/share/man/man8/update-modules.8.gz
/usr/share/man/man8/lsmod.8.gz
/sbin/lsmod 

Fitxers de configuració:

$ dpkg -L module-init-tools | grep etc
/etc
/etc/depmod.d
/etc/depmod.d/ubuntu.conf
/etc/modprobe.d
/etc/modprobe.d/blacklist-ath_pci.conf
/etc/modprobe.d/blacklist-firewire.conf
/etc/modprobe.d/blacklist-framebuffer.conf
/etc/modprobe.d/blacklist-watchdog.conf
/etc/modprobe.d/blacklist.conf
/etc/init.d
/etc/init.d/module-init-tools

Comandes:

$ dpkg -L module-init-tools | grep bin
/bin
/bin/lsmod
/sbin
/sbin/insmod
/sbin/rmmod
/sbin/depmod
/sbin/modprobe
/sbin/modinfo
/sbin/lsmod

Comanda lsmod

Es poden consultar els mòduls actualment carregats amb la comanda lsmod:

$ lsmod
Module                  Size  Used by
nls_iso8859_1          12032  0 
nls_cp437              13696  0 
vfat                   18816  0 
fat                    58272  1 vfat
usb_storage            99648  0 
binfmt_misc            16776  1 
i915                   67844  2 
drm                    96424  3 i915
bridge                 56212  0 
stp                    10500  1 bridge
bnep                   20224  2 
vboxnetflt             92200  0 
vboxdrv               121512  1 vboxnetflt
...

La primera columna és el nom del mòdul i la segona columna mostra la mida del mòdul. La tercera columna mostra quins mòduls utilitzant el mòdul. Per exemple el mòdul fat és utilitzat pel mòdul vfat. El número indica el nombre de mòduls o processos que utilitzin aquest mòdul. En el cas que un mòdul utilitzi un altre, el nom apareix al final de la línia.

La comanda lsmod el que fa es mostrar informació dels mòduls a partir del fitxer:

/proc/modules

És una comanda molt simple, que tal com podeu veure al seu manual:

$ man lsmod

la comanda no té paràmetres.

NOTA: lsmod només mostra només informació dels mòduls del kernel i no mostra per exemple el drivers que ha estat compilats directament al nucli del sistema operatiu. Per aquesta raó un mòdul pot ser s'ha de carregar en un sistema però en un altre no.

insmod i modprobe. Carregant mòduls del kernel

Linux permet carregar mòduls del kernel amb dos comandes diferents:

  • insmod: insereix un sol mòdul al kernel. Si el mòdul depèn d'altres mòduls, les dependències han d'estar carregades abans d'executar insmod.
  • modprobe: carrega automàticament els mòduls dels que depèn el mòdul que volem carregar.

IMPORTANT: Normalment no caldrà carregar un mòdul manualment gràcies a que el kernel de Linux és capaç de carregar-los automàticament (module auto-loader feature). Aquesta característica ha d'estar activada al compilar el nucli de Linux (fet força habitual en kernels moderns).

Un exemple de com utilitzar insmod

$ sudo insmod /lib/modules/2.6.26/kernel/drivers/gpio/max7301.ko

Els mòduls del kernel solen tenir la extensió .ko.

NOTA: Cal indicar el camí complet al inserir un mòdul.

Modprobe funciona de forma similar:

$ sudo modprobe floppy

Com veieu s'indica el nom del mòdul en comptes del path complet. Amb insmod hagués estat:

$ sudo insmod /lib/modules/2.6.28-11-generic/kernel/drivers/block/floppy.ko

Tant al final de la comanda insmod com a la comanda modprobe es poden passar opcions del mòdul que estem carregant.

Modprobe utilitza per defecte el fitxer de configuració

/etc/modprobe.conf

o si no existeix els fitxers de la carpeta:

/etc/modprobe.d

Consulteu l'apartat Fitxer /etc/modprobe.conf o carpeta /etc/modprobe.d/.

Modprobe també es pot utilitzar per tal d'eliminar mòduls amb la opció -r:

$ sudo modprobe -r floppy

Podeu trobar un exemple d'ús a:

Vegeu també la comanda rmmod.

Opcions de modprobe

Podeu consultar el manual amb:

$ man modprobe

O online a:

Mostrar el mòduls disponibles

$ modprobe -l

Es poden utilitzar wildcards:

$ modprobe -l f*
kernel/fs/fat/fat.ko
kernel/fs/freevxfs/freevxfs.ko
kernel/crypto/fcrypt.ko
...

Mostrar les dependències d'un mòdul:

Es poden mostrar amb la opció --show-depends

$ sudo modprobe --show-depends nfsd
insmod /lib/modules/2.6.28-15-generic/kernel/fs/exportfs/exportfs.ko 
insmod /lib/modules/2.6.28-15-generic/kernel/net/sunrpc/sunrpc.ko 
insmod /lib/modules/2.6.28-15-generic/kernel/net/sunrpc/auth_gss/auth_rpcgss.ko 
insmod /lib/modules/2.6.28-15-generic/kernel/fs/nfs_common/nfs_acl.ko 
insmod /lib/modules/2.6.28-15-generic/kernel/fs/lockd/lockd.ko 
insmod /lib/modules/2.6.28-15-generic/kernel/fs/nfsd/nfsd.ko 

Com podeu veure us mostra el path complet dels mòduls que cal carregar abans de nfsd (que apareix al final). Fixeu-vos que la versió del mòdul coincideix amb la versió del kernel que esteu utiltizant:

$ uname -r
2.6.28-15-generic

Forçar la càrrega d'un mòdul

Si intentem carregar un mòdul que no es correspon amb la nostra versió del kernel, modprobe donarà un error. Podeu forçar la càrrega amb la opció -f o --force. Aquesta opció pot ser potencialment perillosa però a vegades necessària amb mòduls de terceres parts.

Verbose

La opció -v mostra els detalls de la carrega del mòdul.

Indicar el fitxer de configuració

Modprobe utilitza per defecte el fitxer de configuració

/etc/modprobe.conf

o si no existeix els fitxers de la carpeta:

/etc/modprobe.d

Es poden canviar aquests fitxers per defecte amb la opció -C

Mostrar la configuració:

Es pot consultar la configuració de modprobe amb

$ sudo modprobe -c 

Fer una prova sense canvis

Aquesta opció normalment es coneix en angles com --dry-run (execució seca)

$ sudo modprobe -n floppy

També es pot utilitzar --dry-run o --show i normalment es combina amb el paràmetre verbose.

rmmod

Aquesta comanda elimina mòduls (de forma similar al que fa modprobe -r). Un exemple:

$ sudo rmmod floppy

En cas que el mòdul no estigui carregat us donarà el següent error (torneu a repetir la comanda anterior):

$ sudo rmmod floppy
ERROR: Module floppy does not exist in /proc/modules

També disposa de les opcions verbose (-v) i force (-f). Normalment els mòduls es poden tenir carregats encara que no s'utilitzin, l'únic que fan es consumir memòria. Però pot ser que vulguem eliminar un mòdul per que no és compatible amb un altre mòdul.

La opció -w (wait) s'espera a que un mòdul no estigui en ús abans d'eliminar-lo. De forma similar a insmod, rmmod no eliminarà un mòdul del qual depenen altres mòduls que estan en funcionament.

modinfo

Aquesta comanda mostra informació sobre un mòdul concret:

$ modinfo floppy
filename:       /lib/modules/2.6.28-15-generic/kernel/drivers/block/floppy.ko
alias:          block-major-2-*
license:        GPL
author:         Alain L. Knaff
srcversion:     264AF399EBCDF87F4520A29
alias:          acpi*:PNP0700:*
alias:          pnp:dPNP0700*
depends:        
vermagic:       2.6.28-15-generic SMP mod_unload modversions 586 
parm:           floppy:charp
parm:           FLOPPY_IRQ:int
parm:           FLOPPY_DMA:int

La comanda, en sistemes Debian la proporciona el paquet module-init-tools tal i com podeu observar a:

$ which modinfo
/sbin/modinfo
$ dpkg -S /sbin/modinfo
module-init-tools: /sbin/modinfo

Podeu consultar altres opcions al manual:

$ man modinfo

O online a:

depmod

Genera els fitxers map i modules.dep. Per exemple per a un kernel 2.6.22-14-generic:

  • /lib/modules/2.6.22-14-generic/modules.dep

Un exemple dels continguts del fitxer:

$ cat /lib/modules/2.6.22-14-generic/modules.dep | more
/lib/modules/2.6.22-14-generic/kernel/fs/autofs/autofs.ko:
/lib/modules/2.6.22-14-generic/kernel/fs/befs/befs.ko:
/lib/modules/2.6.22-14-generic/kernel/fs/gfs2/locking/dlm/lock_dlm.ko: /lib/modules/2.6.22-14-generic/kernel/fs/gfs2/gfs2.ko /lib/modules/2.6.22
-14-generic/kernel/fs/dlm/dlm.ko /lib/modules/2.6.22-14-generic/kernel/fs/configfs/configfs.ko
/lib/modules/2.6.22-14-generic/kernel/fs/gfs2/locking/nolock/lock_nolock.ko: /lib/modules/2.6.22-14-generic/kernel/fs/gfs2/gfs2.ko
...

Els mòduls es poden oferir serveis entre ells (símbols) establint així una relació de dependència. Depmod crea una llista de dependències entre mòduls llegint els mòduls de la carpeta /lib/modules/`uname -r` i determinant quins símbols necessita cada mòduls i quins símbols ofereix. També es generen diversos fitxers de mapa a la carpeta /lib/modules/`uname -r`.

Normalment la comanda depmod s'executa durant l'engegada del sistema (mitjançant el fitxer rc) però si es modifica manualment el fitxer modules.conf aleshores cal tornar a executar la comanda depmod.

Les opcions de la comanda són:

(TODO)
                                depmod Options
 Option             Function
                    Search for all modules in all directories specified by the
 -a, --all
                    modules.conf file.
                    Compare file time stamps and run a depmod -a if anything has
 -A
                    changed.
                    Show all of the unresolved symbols for each module.
 -e, --errsyms
                    Output the module dependency information to the console instead of
 -n, --show
                    the modules.dep file.
                    Output all error information to syslog instead of the console.
 -s, --syslog
                    Enable verbose mode, which lists the name of each module as it is
 -v, --verbose
                    loaded.
                    Do not display missing symbol errors.
 -q, --quiet
                    Show the depmod version information.
 -V, --version
                    Override the default security precaution that keeps module utilities
 -r, --root
                    from loading modules owned by nonroot users.

Podeu trobar un exemple d'ús a:

Podeu consultar altres opcions al manual:

$ man depmod

O online a:

Fitxers del mòduls. /lib/modules

Els mòduls es troben a la carpeta /lib/modules. De fet aquí teniu tots els moduls de tots els kernels que us heu instal·lat fins al moment.

Per accedir als mòduls del kernel actual podeu utilitzar uname a:

$ cd /lib/modules/`uname -r`

A la carpeta /lib/modules/2.6.28-15-generic/kernel/drivers els modules estan organitzats per carpetes:

 The block directory contains all of the modules for block devices. These
 include such things as tape drives, floppy drives, and RAID devices.
The cdrom directory holds all modules for CD-ROMs. These are proprietary
 CD-ROM controllers, such as the old Creative Labs and Mitsumi interfaces.
 These are not for current CD-ROMs, which are EIDE/ATAPI or SCSI.
The fs directory holds the file system modules. Almost all of the Linux sup-
 ported file systems can be supported via modules. You should always compile
 in the file system that the root volume needs.
The ipv4 directory holds the IP networking modules. It also includes IP Masq
 modules to be used when performing network address translation. The ipv6
 directory holds the modules needed to support the new IP v6 specification.
The net directory holds all network interface driver modules. It also contains
 drivers for network protocols, such as PPP or SLIP. If you install a new net-
 work card and need to find the module to load, you should check this
 directory.
The scsi directory holds all SCSI device drivers. Modules to enable SCSI emu-
 lation with IDE devices, used with CD-R/W drives, are also stored here.
                                                                                483
                                        Chapter 13 ✦ Working with the Kernel

✦ The video directory holds the drivers for video capture devices. This is still

 in early development, so there are not many drivers yet.

✦ The misc directory holds everything else. All sound card drivers are kept

 here, as are game devices such as joysticks. Peripheral interface drivers for
 things such as serial ports, parallel ports, and USB are stored here.


Fitxers de configuració

/etc/modules

Aquest fitxer conté una llista dels mòduls que volem que s'executin durant l'arrancada del sistema.

$ cat /etc/modules 
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored. 

lp

L'script (en sistemes System V, tipus Debian) és /etc/init.d/module-init-tools.

Podeu consultar el manual amb:

$ man modules

/etc/modules.conf

Antic fitxer de configuració de mòduls en kernels 2.4 o anteriors. Vegeu el següent apartat. En algunes distribucions el fitxer és /etc/conf.modules.

Fitxer /etc/modprobe.conf o carpeta /etc/modprobe.d/

El fitxer principal de configuració de modprobe és

/etc/modprobe.conf

O si no existeix els fitxers de la carpeta:

/etc/modprobe.d/

La sintaxi és una simplificació del fitxer /etc/modules.conf, utilitzat en versions 2.4 del kernel o anteriors. Segons el manual, cada línia del fitxer o fitxers pot ser una de les següents opcions:

alias wildcard modulename: permet assignar un nom alternatiu a un mòdul

options modulename option : permet afegir opcions a un mòdul.

install modulename command: executa l'ordre command en compte de inserir el mòdul 

Podeu consultar el manual:

$ man modprobe.conf

O online a:

Carpeta /etc/depmod.d/

Són els fitxers de configuració de la comanda depmod.

/lib/modules/{kernel-version}/modules.dep.

Per exemple:

$ cat /lib/modules/2.6.28-15-generic/modules.dep

Fitxer Sys V: /etc/init.d/module-init-tools

Fitxer que carrega els mòduls especificats al fitxer /etc/modules.

Troubleshooting. Resol·lució de problemes

Com comprovar la llista de mòduls del kernel suportats

Cal consultar la configuració del kernel que teniu actualment instal·lat:

/boot/config-`uname -r`

Per exemple per conprovar el suport per a autofs:

$ grep AUTOFS /boot/config-`uname -r`
CONFIG_AUTOFS_FS=m
CONFIG_AUTOFS4_FS=m

Vegeu també

  • LPI_101.1. Determinar i configurar el maquinari