Kernel

De doc.ubuntu-es
Saltar a: navegación, buscar


Contenido

Definición

...


En un sistema Linux la interacción final con dispositivos la realizan los controladores o el kernel. Dicho de otra forma, un dispositivo sólo podrá ser usado si el kernel lo soporta o si existe un controlador capaz de controlarlo y si se configura apropiadamente para hacerlo. Por esto, los dispositivos que se produzcan hoy, no pueden ser operados con controladores ya existentes (a menos que los dispositivos hayan sido diseñados para ser operados con estos, caso que para algunos dispositivos como tarjetas de sonido, tarjetas de video o modems es poco común), por esto mismo, eventualmente, si actualiza el hardware de su computador o si desea usar un cierto servicio del kernel, también deberá actualizar algún módulo o eventualmente el kernel completo. Aunque algunos controladores autodetectan la configuración del dispositivo, esto no siempre ocurre y en algunos casos tendrá que probar (cacharrear), hasta hacer funcionar el módulo que maneja el dispositivo (en estas pruebas la documentación del dispositivo y la del módulo serán de utilidad. Si desea experimentar rapidamente emplee modconf).

Las fuentes en C de cada versión del kernel cuentan con controladores para diversos dispositivos. Cuando se compila una versión, algunos de esos controladores pueden unirse con el kernel mismo (estáticamente), otros pueden dejarse como módulos para cargarse/descargarse cuando la parte estática del kernel este operando, otros pueden ser excluidos del proceso de compilación (y por lo tanto no podrán ser usados ni cuando el kernel esté operando).

Módulos

En este contexto, módulo se refiere a un controlador de un dispositivo o servicio que puede cargarse o descargarse cuando el usuario o algún dispositivo lo solicita (i.e dinámicamente). Los módulos que se distribuyen con en el kernel están ubicados en el directorio /lib/modules/version, donde versión es la versión de su kernel (uname -r), con la extensión .o (1) organizados en directorios que indican el tipo de dispositivo o el propósito, por ejemplo fs (sistema de archivos), net (protocolos y hardware para redes).

Para lograr configurar un dispositivo controlado por un módulo, puede emplear las herramientas del paquete modutils o modconf para:

  1. Asegurar que no haya conflictos entre el dispositivo con otros y eventualmente conocer la configuración que usa (algunos controladores autodetectan la configuración del dispositivo, pero no todos).
  2. Encontrar un módulo que pueda manejar el dispositivo.
  3. Eventualmente pasar opciones al módulo de acuerdo a la configuración del dispositivo (e.g IRQ o dirección base).

En Debian las herraminetas del paquete modutils se configuran en los achivos del directorio /etc/modutils (con la información de esos archivos y de /etc/modules se genera el archivo de configuración de módulos /etc/modules.conf (2)). Los programas que ese paquete incluye son:

  • lsmod

Lista los módulos cargados, de cada uno presenta nombre, tamaño, cuenta de usos y lista de módulos que lo usan (es equivalente a cat /proc/modules).

  • rmmod módulos

Descarga uno o más módulos cargados, mientras éstos no estén siendo usados. Con la opción -r intenta descargar recursivamente módulos de los cuales el módulo especificado dependa. El comando rmmod -a descarga todos los módulos que no estén siendo usados.

  • insmod módulo [opciones]

Trata de cargar el módulo especificado. Pueden pasarse opciones específicas para el módulo, a continuación del nombre con la sintaxis símbolo=valor (los símbolos posibles dependen del módulo, pueden verse algunos en /usr/share/modconf/descr.gz que es la ayuda presentada por modconf o en último caso en las fuentes del módulo en los macros MODULE_PARAM y MODULE_PARAM_DESCR). Puede indicarse una ruta no estándar para buscar módulos estableciéndola en la variable MODPATH o en /etc/modules.conf. Dado que los módulos se enlazan directamente con el kernel, deben ser compilados para una versión precisa, con la opción -f puede evitarse el chequeo de versiones.

  • depmod

Como un módulo puede requerir otros, hay dependencias que deben respetarse al cargar y descargar módulos. depmod permite calcular tales dependencias entre varios módulos o entre todos los disponibles con la opción -a (3). Por defecto depmod -a escribe las dependencias en el archivo /lib/modules/version/modules.emp. Cada línea de ese archivo tiene el nombre de un módulo seguido del caracter ':' y los módulos de los cuales depende, separados por espacios.

  • modprobe módulo opciones

Emplea la información de dependencias generada por depmod e información de /etc/modules.conf para cargar el módulo especificado, cargando antes todos los módulos de los cuales dependa. Para especificar el módulo basta escribir el nombre (sin la ruta, ni la extensión .o) o uno de los alias definidos en /etc/modutils/alias (o en otro archivo del directorio /etc/modutils). Si hay líneas pre-install o post-install en /etc/modules.conf, modprobe puede ejecutar un comando antes y/o después de cargar el módulo. Como opciones para cargar el módulo usa prioritariamente las dadas en la línea de comandos y después las especificadas en líneas de la forma options módulo opciones en el archivo /etc/modules.conf (4)

Puede emplear estos programas para configurar sus módulos y puede hacer permanentes los cambios, agregando el módulo y las opciones en el archivo /etc/modules (5).

Para hacer más fácil la configuración de módulos, Debian ofrece las siguientes herramientas:

  • modconf

Para listar, cargar y descargar módulos con menús. Este programa muestra los módulos disponbiles en categorías y con ayudas sobre su uso y permite cargarlos o descargarlos del kernel, actualizando automáticamente los archivos /etc/modules y /etc/modules.conf (cambiando los archivos apropiados de /etc/modutils) para que los módulos configurados sean cargados automáticamente en el siguiente arranque. La información sobre los módulos disponibles la obtiene del directorio /lib/modules, los módulos cargados y sus parámetros los lee de /etc/modutils y /etc/modules.conf y la ayuda y la información interna de los archivos en /usr/share/modules.conf ---modconf es un script para el intérprete de comandos.

  • update-modules

Actualiza el archivo /etc/modules.conf a partir de la información de los archivos del directorio /etc/modutils. En Debian no se edita directamente /etc/modules.conf.

Es posible que el kernel del que disponga no cuente con módulos que soporten ciertos dispositivos, en tal caso se puede:

  1. buscar en Internet un módulo precompilado para la versión del kernel que tiene,
  2. buscar fuentes de un módulo o
  3. buscar una versión del kernel que incluya soporte para el dispositivo.


Configuración del kernel

Además de cargar y descargar módulos, algunas características del kernel pueden ser modificadas mientras está en funcionamiento el sistema, bien escribiendo en algunos archivos del directorio /proc, o con el programa sysctl. Este programa con la opción -a presenta todas las variables modificables y su valor, entre otras encuentra variables que mantienen datos autodetectados en dispositivos (en particular del CDROM), datos de la interacción entre el kernel y el sistema de archivos,datos sobre los protocolos y dispositivos de redes, y detalles del kernel.

Para cambiar un valor se emplea:

/sbin/sysctl -w kernel.hostname=comp

con un nombre de variable en lugar de kernel.hostname y un valor adecuado en lugar de comp. Pueden hacerse cambios que se vuelven a tomar cada vez que el sistema inicia en el archivo /etc/sysctl.conf.

En cuanto a los módulos, las imágenes precompiladas del kernel producidas por Debian incluyen estáticamente varios controladores comunes y prácticamente los demás controladores los incluye como módulos. Por esto, si la versión del kernel que tiene soporta sus dispositivos y los servicios que desea, casi con seguridad usted NO necesita recompilar el kernel (puede confirmar si la imagen que tiene, soporta el controlador como módulo revisando en el directorio de módulos, o puede comprobar si éste se incluye estáticamente, efectuando el segundo paso para una instalación usando como archivo de configuración el de la imagen de su kernel).

Eventualmente, si su dispositivo no es detectado automáticamente o el módulo apropiado no es cargado automáticamente (6), tendrá que pasar los paramétros apropiados de una de las dos siguientes formas:

  • Controlado estático

Pase los parámetros apropiados desde el cargador de arranque o configúrelos de forma permanente con su cargador de arranque

  • Módulo (dinámico)

Pase los paramétros de configuración a insmod/modprobe o configúrelos de forma permanente en /etc/modules, o en un archivo de /etc/modutils

Eventualmente puede encontrar y usar algún programa que le ayude a determinar los parámetros apropiados y/o a realizar las configuraciones, o tendrá que consultar los manuales del dispositivo o incluso probar varias opciones hasta determinarlos.

Si tras consultar esta documentación o la del kernel o cualquier otra más actualizada, determina que una versión del kernel diferente a la que tiene, soporta cierto dispositivo o servicio que requiere, el método más sencillo que puede intentar es instalar una imagen precompilada disponible en algún depósito de paquetes de Debian (el nombre es de la forma kernel-image-version).

En caso de requerir un kernel con una configuración muy especial (por ejemplo, que incluya estáticamente ciertos módulos o que excluya de la compilación módulos para hacer un kernel pequeño) o si requiere una versión para la que que no haya imagenes precompiladas de Debian, recomendamos instalar primero una versión precompilada con una versión cercana a la que desea instalar, para tomar la configuración de esta y modificarla antes de compilar la nueva versión. Además recomendamos esto porque las imagenes precompiladas actualizan otros programas indispensables para las nuevas versiones del kernel.

Para obtener las fuentes, puede recurrir a paquetes Debian para algunas versiones de las fuentes en depósitos oficiales (paquetes con nombres de la forma kernel-sources-version) y las fuentes de cualquier versión en el sitio de desarrollo del kernel (http://www.kernel.org). Cuando obtenga fuentes del kernel de Linux, tenga en cuenta que el segundo número de la versión sea par, si es impar se trata de una versión para desarrolladores pero NO para usuarios finales.


Lecturas recomendadas

Para manejar mejor las herramientas de módulos, puede consultar las páginas man de modules.conf, insmod, modprobe

Algunos módulos que se distribuyen separados del kernel requieren ser compilados. Puede encontrar ayuda de como hacerlo en:

http://www.scyld.com/expert/modules.html

Otro documento donde puede consultar el proceso de compilación está disponible en Internet en:

http://structio.sourceforge.net/pablo/actualiz-kernel.html



(1) Esta extensión es típica de código objeto que es código generado por un compilador a partir de un archivo fuente (en el caso de Linux el compilador es gcc). Puede "unirse" estáticamente con más código objeto empleando un encadenador (en el caso de Linux el encadenador es ld) o dinámicamente usando /lib/ld.so (ver Administración de programas) o en el caso de módulos con insmod.

(2) El archivo de configuración de modutils puede variarse especificando uno diferente en la variable MODULECONF

(3) La especificación de las rutas para buscar módulos puede hacerse con MODPATH o en /etc/modules.conf en las líneas de la forma path[tipo]

(4) El archivo /etc/modules.conf puede tener comentarios en líneas iniciadas con el caracter '#', puede tener líneas para: modificar las dependencias entre módulos (below, above, probe, probeall, depfile); para manejar las rutas donde buscar módulos (path, keep); para ejecutar comandos antes, en vez o después de instalar o descargar los módulos (pre-install, install, post-install, pre-remove, remove, post-remove); para especificar opciones por defecto para algunos módulos o insmod (options, insmod_opt); para crear alias o para definir variables o tener en cuenta sólo ciertas partes del archivo (alias, define, if, else, elseif, endif).

(5) Durante el arranque las dependencias entre módulos son generadas automáticamente y los módulos especificados (junto con sus opciones) en el archivo /etc/modules son cargados.

(6) kmod es el programa que se encarga de cargar módulos automáticamente por demanda i.e. sin intervención del usuario

Fuentes

Versión 1.1. Publicada en Febrero de 2003

TRABAJO CEDIDO AL DOMINIO PÚBLICO

Nosotros Vladimir Támara, Jaime Irving Dávila, Pablo Chamorro e Igor Támara hemos escrito "Aprendiendo a aprender Linux: Guías para colegios con plataforma de referencia S-Helio 1.1", que asisten el uso, la instalación y la administración de redes Linux en colegios. Por este medio cedemos esta obra al dominio público, renunciando a todos los derechos patrimoniales con lo que esperamos facilitar su adaptación y uso en colegios. En particular quedan permitidos para siempre: el uso, la copia, la redistribución y la modificación de este escrito y sus fuentes.

Confirmamos que el trabajo es nuestro y no copia del trabajo de alguien más. Apreciamos que al usarlo cite la fuente http://structio.sourceforge.net/guias/AA_Linux_colegio/, y nos alegraría que nos informara (<structio-guias@lists.sourceforge.net>).

Herramientas personales