m (actualizo versión estable) |
m (estilo) |
||
| Línea 7: | Línea 7: | ||
| fecha_versión_estable = 13 de julio de 2008 | | fecha_versión_estable = 13 de julio de 2008 | ||
| género = [[:Categoría:Sistema Linux|Kernel]] | | género = [[:Categoría:Sistema Linux|Kernel]] | ||
| − | | licencia = [[w:software libre| | + | | licencia = [[w:software libre|libre]] ([[w:licencia pública general de GNU|GPL]]) |
| español = No | | español = No | ||
| web = [http://www.kernel.org/ www.kernel.org] | | web = [http://www.kernel.org/ www.kernel.org] | ||
|
Este artículo necesita ser wikificado en base al manual de estilo de este wiki. Por favor, colabora editándolo conforme a las normas de edición de este sitio. No elimines este aviso hasta que lo hayas hecho. |
| Linux | |
|---|---|
|
| |
| Género:
|
Kernel |
| Licencia:
|
libre (GPL) |
| En Español:
|
No |
| Sitio Web:
|
www.kernel.org |
Contenido |
En un sistema Linux la interacción final con dispositivos la realizan los controladores o el kernel (núcleo). 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).
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, puedes emplear las herramientas del paquete modutils o modconf para:
En Debian las herramientas 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<code>
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 <code>-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<code>
Emplea la información de dependencias generada por depmod e información de <code>/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).
Puedes 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:
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 CD-ROM), 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:
Pase los parámetros apropiados desde el cargador de arranque o configúrelos de forma permanente con su cargador de arranque.
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. 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.
Los kernels van cambiando de versión y a medida que van apareciendo los vamos actualizando, pero tengamos en cuenta que cuando uno actualiza un kernel, no hace más que instalar la última versión del mismo, y las versiones anteriores siguen estando en nuestras máquinas, uno lo nota en el aumento del listado del GRUB. Una vez probada la última versión del kernel y viendo que no nos presentó ningún problema, estamos en condiciones de eliminar los kernels antiguos.
1. Listar los kernels instalado con el siguiente comando:
dpkg --get-selections | grep linux-image
2. Eliminar los kernels anteriores, excepto el ultimo con el siguiente comando:
sudo aptitude purge paquete
paquete es el nombre del kernel, ej: linux-image-2.6.20-12-generic
3. Si el paquete no se encuentra actualizado te pedira hacerlo, esto no es necesario ya que procederemos a eliminar el kernel con el siguiente comando:
sudo aptitude remove paquete
Para manejar mejor las herramientas de módulos, puedes consultar las páginas man de modules.conf, insmod, modprobe.
Algunos módulos que se distribuyen separados del kernel requieren ser compilados. Puedes encontrar ayuda de cómo 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 enlazador (en el caso de Linux el enlazador 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
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>).