administracion del kernel
DESCRIPTION
Administracion de Kernel LinuxTRANSCRIPT
-
TTeeccssuupp
VViirrttuu@@ll
EEEssstttrrruuuccctttuuurrraaa
dddeeelll KKKeeerrrnnneeelll
Copyright 2010 por TECSUP
-
Estructura del Kernel Tecsup
Pgina 2
INDICE
1. Introduccin ................................................................................ 3 2. Objetivos ..................................................................................... 3
3. El Kernel ..................................................................................... 3 4. Abstraccin ................................................................................. 4 5. Composicin ............................................................................... 4
5.1. Programador de Procesos ................................................ 5 5.2. Administrador de Memoria ............................................. 7
5.3. Sistemas de Archivos Virtual .......................................... 8
5.4. Inter-Process Comunication .......................................... 11
5.5. Network Interface .......................................................... 12 6. MODULOS ............................................................................... 15
6.1. Comandos ...................................................................... 15 7. Numeracin del Kernel ............................................................ 16 8. Actualizacin del Kernel ........................................................... 17
8.1. Preparacin de la actualizacin ..................................... 17
8.2. Paquetes del Kernel ....................................................... 18 8.3. Descarga ........................................................................ 19 8.4. Realizando la actualizacin por RPM ........................... 20
8.5. Verificacin de la imagen de disco RAM inicial .......... 21 8.6. Configuracin del gestor de arranque ........................... 21
9. Actualizacin con las fuentes del Kernel .................................. 24 9.1. Compilar el kernel ......................................................... 24
10. Mdulos del kernel .................................................................... 26 11. Utilidades del mdulo del kernel .............................................. 26
12. BIBLIOGRAFIA ....................................................................... 29 13. Bibliografa ............................................................................... 29
-
Tecsup Estructura del Kernel
Pgina 3
Estructura del Kernel 1. Introduccin
Una de los pilares de la estructura del sistema Operativo Linux es el Kernel. El Kernel es el gestor del software con el hardware. Mostraremos un panorama de esta compleja seccin con la intencin de familiarizarnos con la estructura y los trminos tcnicos.
2. Objetivos Analizar la estructura del Kernel.
Describir las funciones que usan en la comunicacin del Kernel.
3. El Kernel
Es parte de la estructura de un Sistema Operativo. La estructura de un Sistema Operativo est compuesto de:
Controladores de Hardware Un sistema est compuesto por piezas de hardware, como CPU, memoria, discos duros y dispositivos de red.
Kernel Es el rea principal de inters de este documento.
Servicios del Sistema Operativo Estas son consideradas parte del sistema operativo, como un Administrador de Ventanas o Shells. Adems, incluye la plataforma de programacin (API) del Kernel (compilador y libreras)
Programas de Usuario Depende en realidad del uso que se le d a la mquina. Por ejemplo, una planilla de clculo.
El Kernel es un programa que es la interface entre el Hardware y los programas de aplicaciones
SISTEMA OPERATIVO
CONTROLADORES DE HARDWARE
KERNEL
SERVICIOS
PROGRAMAS USUARIO
-
Estructura del Kernel Tecsup
Pgina 4
4. Abstraccin El kernel de Linux presenta "una mquina virtual para la ejecucin de programas de usuario". Los procesos estn escritos de manera de NO conocer la arquitectura final en la cual van a ejecutarse, ya que el Kernel posee una capa de abstraccin. Es decir, el Kernel construye una interface virtual consistente independiente de la arquitectura o hardware en que corra, de manera transparente. Adems esta abstraccin permite que cada proceso crea que es el nico que est corriendo en la mquina, con uso exclusivo de memoria o de otros recursos de hardware.
5. Composicin El kernel est compuesto por cinco subsistemas:
Process Scheduler o Programador de Procesos
Memory Manager o Administrador de Memoria
Virtual File System o Sistema de Archivos Virtual
Network Interface o Interfaz de Red
Inter-Process Comunication o Comunicacion Entre Procesos Estos componentes son independientes entre s.
KERNEL
PROGRAMADOR PROCESOS ADMINISTRADOR
MEMORIA
SISTEMA DE ARCHIVOS
INTERFAZ DE RED
COMUNICACIN ENTRE PROCESOS
-
Tecsup Estructura del Kernel
Pgina 5
5.1. Programador de Procesos
PC o Process Scheduler (Programador de Procesos) es en realidad el corazn del Sistema Operativo. Sus responsabilidades son:
Permitirle a los procesos crear nuevas copias de s mismos (forking)
Determinar qu proceso tendr acceso a la CPU
Recibir interrupciones y desviarlas hacia el subsistema respectivo
Enviar mensajes a los procesos de usuario
Manejar el reloj de Hardware (Hardware Timer)
Liberar recursos cuando un programa los haya desocupado.
El Process Scheduler tambin soporta mdulos cargados dinmicamente. Una de las funcionabilidades ms
Toda operacin que se realiza en el Sistema Operativo es un proceso
-
Estructura del Kernel Tecsup
Pgina 6
importantes de esto ltimo son el Virtual File System y Network Interface. Tambin provee dos interfaces. Uno, provee una interface de llamada a sistema limitada que los procesos pueden llamar. Dos, provee una interface para el resto del espacio del Kernel. En tiempo de booteo, Linux posee slo un proceso, init(), que a su vez realiza copias de s mismo a travs de llamadas fork(). Cuando un proceso termina, ejecuta la llamada a _exit(). Acerca del timer, Linux maneja un timer interno que se inicia cada 10 milisegundos. Esto permite que los procesos se reasignen (Scheduling) cada 10 ms. Esta unidad se llama "clock tick" que sirve para medir la cantidad de ticks que un proceso en particular puede continuar ejecutndose sin forzar su reasignacin. Cada proceso se asigna con un identificador nico, llamado Process ID o pid, que es asignado a la lista de procesos o tabla de procesos. Finalmente, una estructura de mdulos es usada para representar los mdulos cargados en tiempo de ejecucin. Esta estructura posee campos que son usados para implementar una lista de estructura de mdulos. Es decir, un campo que apunta a la tabla de smbolos de los mdulos y otro con el nombre del mdulo.
Si usted quiere ver todos los procesos corriendo en el sistema y no solamente los iniciados por usted. Usted puede utilizar la opcin A o la opcin -e: ps A
PID TTY TIME CMD 1 ? 00:00:07 init 2 ? 00:00:00 kflushd 3 ? 00:00:02 kupdate . . . 372 ? 00:00:00 klogd
VISUALIZANDO LOS PROCESOS
# ps A
-
Tecsup Estructura del Kernel
Pgina 7
5.2. Administrador de Memoria
El Memory Manager o administrador de memoria permite lo siguiente:
Gran espacio de direcciones : Los programas pueden requerir ms memoria que la que fsicamente existe
Proteccin: La memoria asignada un proceso es privada para tal.
Mapas de Memoria : Se puede mapear un archivo dentro de un rea de memoria virtual y acceder al archivo como si fuera memoria
Acceso Limpio a la Memoria Fsica : el MM asegura que los procesos puedan usar transparentemente todos los recursos de la mquina, asegurando adems un rendimiento aceptable
Memoria Compartida: Permite que los procesos puedan compartir trozos de la memoria asignada.
El Administrador de memoria posee dos interfaces: una interfaz con llamada a sistema que es usada por los procesos de usuario (User Space) y una interface que es usada por los otros subsistemas (Kernel Space). Ya que Linux soporta multiples arquitecturas, es necesario entonces que existan rutinas especficas para abstraer los detalles del uso del hardware en una sola interface. El Memory Manager usa el administrador de memoria de hardware para mapear direcciones virtuales a direcciones fsicas. Gracias a esto, los procesos no estn conscientes de cuanta memoria fsica est asociada a una direccin virtual. Esto permite al MM poder mover trozos de memoria virtual dentro de la memoria fsica. Adems, permite que dos procesos puedan compartir dos trozos de memoria fsica si las regiones de memoria virtual asignadas a ellas son mapeadas en la misma direccin fsica. Otro concepto importante es el Swapping o intercambio, que es intercambiar (swap) memoria ocupada por procesos en un archivo. Esto le permite al kernel poder ejecutar mayor cantidad de procesos que usen mayor cantidad de memoria fsica existente. El MM posee un demonio, kswapd, para ejecutar la tarea de intercambiar zonas de memoria en archivos y viceversa. Este demonio chequea peridicamente si no existen direcciones fsicas mapeadas recientemente. Estas direcciones son vaciadas de la memoria fsica, y adems de esto, el MM minimiza la
-
Estructura del Kernel Tecsup
Pgina 8
cantidad de actividad de disco necesaria para hacer este intercambio. Si el administrador de memoria detecta un acceso no permitido (a la memoria) notifica al proceso con una seal. Si el proceso no sabe cmo manejar esta seal, el proceso es finalizado.
5.3. Sistemas de Archivos Virtual Linux est diseado para soportar distintos tipos de dispositivos fsicos. Incluso para un tipo especfico, como un disco duro, existen diferentes interfaces de manejo entre un fabricante de hardware y otro. Adems de los dispositivos fsicos, Linux posee soporte para sistemas de archivos lgicos que lo hace interoperante entre distintos sistemas operativos, con los siguientes propsitos:
Multiples dispositivos fsicos de hardware
Multiples sistemas de archivos lgicos
Mltiples tipos de archivos ejecutables
Homogeneidad, es decir, una interfaz comn entre los sistemas de archivos lgicos y el hardware
Rendimiento
Seguridad de datos, perder o corromper datos
Seguridad de acceso, restriccin a los archivos, quotas, permisos, etc.
Tambin se usan dos interfaces para el manejo de filesystems. Una interfaz para llamadas de usuarios y otra para los subsistemas del kernel. La interfaz para los usuarios maneja archivos y directorios. Las operaciones en archivos incluyen open/read/close/write/seek, que estn definidas en el estndar POSIX y en los directorios readdir/creat/unlink/chmod/stat tambien definidas en POSIX. Pero la interface de los subsistemas del Kernel es bastante ms interesante. Esta posee estructuras de datos y funciones para manipulacin directa para otros subsistemas. De hecho, existen dos interfaces para el resto del kernel: inodos y archivos. Volviendo con los controladores de dispositivos o drivers, Linux posee tres tipos de drivers: char, block y network. Los dos ms relevantes son char y block. Los dispositivos char son aquellos que su lectura es secuencial (de a un char a la vez), como un mouse. Los dispositivos block
-
Tecsup Estructura del Kernel
Pgina 9
pueden ser accedidos de cualquier manera, pero solo puede leerse o escribirse de a bloques. Todos los drivers soportan las operaciones mencionadas recin. Adems, cada dispositivo puede ser accesado como si fuera un archivo. Ya que el Kernel se entiende con los dispositivos de esa manera, no es complicado agregar un nuevo dispositivo, ya que solo es necesario implementar el cdigo especfico del hardware para el soporte de la abstraccin de archivos. Adems, el kernel posee un buffer de cach para mejorar el rendimiento cuando usa dispositivos block. Todo acceso a un dispositivo block pasa a travs de un subsistema de buffer. Este buffer aumenta considerablemente el rendimiento minimizando las lecturas y escrituras hacia y desde los dispositivos. Cada dispositivo posee una cola de peticin (request queue). Cuando el buffer no puede responder una peticin, se agrega una peticin a esta cola y hace que la peticin duerma (sleep) hasta que pueda responder. Este buffer usa un espacio separado del kernel como un thread nico, manejado por kflushd. Existen distintos mecanismos para mover datos entre el computador hacia los dispositivos:
Polling (votacin)
DMA (acceso directo a memoria)
Interrupciones
En el caso de polling, el driver verifica peridicamente el CSR (Control & Status Register) para ver si la peticin ha sido completada. Si es as, el dispositivo inicia la siguiente peticin y contina. Polling es altamente efectivo en dispositivos de transferencia lenta, como disketteras y modems. En el caso de DMA, el driver inicia una transferencia directa entre la memoria del computador y el perifrico. Esta transferencia es concurrente con la CPU y permite que la CPU siga haciendo otras tareas mientras se transfieren datos. Cuando la operacin termina, la CPU recibe una interrupcin. Cuando un dispositivo desea cambiar de estado (por ejemplo, presionar el botn del mouse) o reporta el final de una operacin, enva una interrupcin al procesador. Si
-
Estructura del Kernel Tecsup
Pgina 10
las interrupciones estn habilitadas, el procesador detiene su ejecucin actual y comienza a ejecutar el cdigo de manejo de interrupciones del kernel. El kernel encuentra el manejador correcto para invocar. Cuando una interrupcin es manejada, la CPU se ejecuta en un contexto especial, es decir, todas las interrupciones quedan pendientes hasta que la interrupcin actual haya terminado. Debido a esto, los manejadores de interrupciones deben ser altamente eficientes. Si ocurre el caso que un manejador de interrupciones no puede terminar el trabajo, reasigna el trabajo pendiente en un manejador de tipo "bottom-half" , es decir, cdigo que se ejecutar la prxima vez que la llamada sea completada para evitar latencias y promover la concurrencia. Volviendo ahora a los sistemas de archivos lgicos, es ms fcil acceder a un dispositivo si es manejado como un archivo que directamente en el hardware. Un filesystem lgico puede ser montado en un punto de montaje dentro del filesystem virtual. Esto significa que un bloque asociado a un dispositivo contiene archivos y una informacin de estructura que permite al filesystem lgico acceder al dispositivo. Un dispositivo slo puede tener un soporte lgico de archivo. Sin embargo, el dispositivo puede ser "adiestrado" para poseer soporte para un soporte lgico en otro tipo de filesystem. En pocas palabras y con una explicacin ms clara, los dispositivos por lo general se encuentran en /dev y cada dispositivo se representa como un archivo. Es perfectamente posible reescribir el manejador del dispositivo para que soporte otro tipo de filesystem lgico. Para el soporte de filesystems virtuales, Linux usa Inodos para representar un archivo en un dispositivo block. El inodo es virtual en el sentido que contiene operaciones que estn implementadas de distintas maneras, dependiendo del sistema lgico y fsico donde el archivo reside. El inodo es usado como un lugar de almacenamiento para toda la informacin relacionada con el manejo de, por ejemplo, abrir un archivo del disco. Guarda buffers, el largo del archivo, etc. Mucha de la funcionabilidad de los filesystems virtuales radica en los mdulos. Esta configuracin permite a los usuarios compilar un Kernel tan pequeo como sea posible, cargando solamente los mdulos que sean necesarios.
-
Tecsup Estructura del Kernel
Pgina 11
5.4. Inter-Process Comunication El IPC es un mecanismo en el cual los procesos que se estn ejecutando posean medios para compartir recursos, sincronizarse y compartir datos entre ellos. Linux implementa todas las formas de IPC a travs de recursos compartidos, estructuras de datos de kernel y colas de espera. Estas formas de IPC son a travs de
Seales
Colas de Espera
Bloqueos de Archivos
Pipes y Named Pipes, que permiten una transferencia de datos bidireccional y orientada a la conexin entre dos procesos, explcitamente seteando los pipes o comunicndolos a travs de named pipes en el sistema de archivos (N. del E.:piensen en ls -als | more como una forma de piping)
Unix Domain Sockets, otro medio de transferencia, ms usado en el modelo INET
IPC de System V compuesta por
Semforos
Colas de Mensaje
Memoria Compartida Una seal es una notificacin enviada a un proceso por el kernel o por otro proceso. Las seales se envan a travs de send_sig(). El nmero de seal se da como parmetro, como tambin el proceso destino. Los procesos pueden registrar sus propias seales, a travs de la funcin signal(). Los bloqueos de archivo estn soportados directamente por el kernel. Para bloquear un archivo, puede usarse open() simplemente. Pipes (tuberas) pueden ser usadas con pipe(), para filesystems read() o write() y para named pipes open(). Para Unix Domain Sockets, toda la funcionabilidad est encapsulada en socketcall(). En IPC de System V, existe una interfaz comn para los tres mtodos, ipc(). Las colas de espera son solo listas con los procesos que esperan por un evento del kernel, como la finalizacin de una lectura de DMA. Un proceso puede entrar
-
Estructura del Kernel Tecsup
Pgina 12
voluntariamente a una cola de espera con sleep_on() o interruptable_sleep_on() y despertar con wake_up() o wake_up_interruptable() (que remueve los procesos de esta cola). Los bloqueos de archivos ocurren para prevenir que dos procesos puedan acceder al mismo archivo. Esta exclusin puede ser hecha al archivo completa o a una porcin del archivo. Los Pipes y Named Pipes son similares, pero su creacin es diferente. En ambos casos debe existir un descriptor de archivo que esta enlazado a la tubera. Despus de la creacin de la tubera, una pgina de memoria es asociada a ella que es tratada como un buffer circular, donde las funciones de escritura se manejan de forma atmica. Si se llena este buffer, se bloquea el proceso de escritura. Si se leen ms datos de los existentes, el proceso de lectura se bloquea. As, cada tubera posee un proceso de espera asociado. Los semforos se implementan con colas de espera, siguiendo el modelo clsico de semforos. Cada semforo posee un valor asociado. Existen dos operaciones para este manejo, up() y down(). Cuando el valor del semforo es 0, el proceso que ocupa el semforo (para decrementar su estado) es bloqueado en la cola de espera. Las colas de mensajes son listas que los procesos leen o escriben secuencias de bytes. Los mensajes se reciben en el mismo orden que son escritos. Existen dos colas, una para los procesos que envan un mensaje completo a la cola y otra para ordenar las escrituras de los mensajes. La memoria compartida es la forma ms rpida de IPC. Permite que los procesos puedan compartir regiones de la memoria. La creacin de esta memoria compartida se hace a travs del administrador de memoria
5.5. Network Interface El sistema de red de Linux permite la conectividad entre distintas mquinas de una red y un modelo de conexin via sockets. Existen dos tipos de sockets, los BSD y los INET. Linux posee dos protocolos de transporte con distintos tipos de modelo de comunicacin y calidad de servicio. Estn los mensajes no confiables, basados en el protocolo
-
Tecsup Estructura del Kernel
Pgina 13
UDP y los mensajes confiables basados en TCP. Estos dos estn implementados sobre el protocolo de transporte y el protocolo IP. El protocolo IP est por encima de los drivers. A los drivers se les provee distintas formas de comunicacin: SLIP (Serial Link IP), PLIP (Parallel Line IP) y Ethernet. Un protocolo de resolucin de direcciones media entre el protocolo IP y los drivers de Ethernet. Su tarea es resolver direcciones IP lgicas y convertirlas en direcciones fsicas ethernet (de capa 3 a capa 2). Los servicios de red son usados por los otros subsistemas y por el usuario atraves de la interfaz de sockets, que son creados y manipulados atraves de socketcall(). Los datos son leidos y escritos a travs de read() y write() como si fuera un descriptor de archivo. El modelo BSD de sockets es presentado a los procesos de usuario. El modelo es orientado a la conexin, se permite hacer streaming (flujo) y se permiten buffers. La implementacin BSD est por sobre la INET. BSD maneja las tareas de forma similar al VFS (Virtual File System) y administra una estructura de datos general para las conexiones. Su propsito es la portabilidad a travs de la abstraccin de los detalles, a travs de una simple interfaz. La interfaz BSD es usada por Unix y Windows. El modelo INET administra los puntos finales de la comunicacin para los protocolos TCP y UDP. La lectura/escritura de red comienza por leer o escribir en un socket. Esto invoca a una llamada de sistema que es manejada por el VFS (o sea, las llamadas a archivo o sockets es simtrica). Desde ah, se determina que la llamada BSD sock_write() es la que implementa la llamada al filesystem. Esta rutina maneja detalles administrativos (permisos) y pasa el control a inet_write(), para despus llamar a una funcion de transporte, como tcp_write(). Las rutinas de escritura de la capa de transporte son las responsables de fragmentar los datos entrantes en paquetes de transporte. Estas rutinas pasan el control a ip_build_header() que construye una cabecera IP para ser insertada en el paquete a enviar. Luego, tcp_build_header() es llamada para crear una cabecera TCP. Una vez hecho esto, se envan los datos directamente al driver de red.
-
Estructura del Kernel Tecsup
Pgina 14
El sistema de red posee dos servicios de transporte diferentes. UDP posee una comunicacin no orientada a la conexin y no confiable. Est encargada de recibir paquetes de la capa IP y encontrar el socket de destino donde los datos deben ser enviados. Si no se encuentra el socket, se genera un error. TCP, en cambio, es bastante ms complicado. Adems del manejo de datos entre los procesos de recepcin y envo, realiza complicadas tareas de administracin de la conexin. TCP enva los datos al socket como un stream (flujo), en vez de una secuencia de datos (como UDP), pero garantiza una comunicacin confiable. El protocolo IP provee un servicio de transporte de paquetes. Dado un paquete y un destino, la capa de comunicacin IP es responsable del enrutamiento del paquete al host que corresponda. Para un flujo de datos saliente, IP es responsable de
Particionar el flujo en paquetes IP
Enrutar los paquetes a la direccin de destino
Generar una cabecera que ser usada por los drivers de red
Seleccionar el dispositivo de red apropiado para enviar los datos
Para un flujo de datos entrantes, IP es responsable de
Verificar la validez de la cabecera
Comparar la direccin de destino con la direccin local y reenviarlo si no corresponde
Desfragmentar el paquete IP
Enviar los paquetes a la capa TCP o UDP segn corresponda
El protocolo ARP (Address Resolution Protocol) es el responsable de convertir entre direcciones IP y direcciones de red reales. ARP soporta distintos tipos de hardware, Ethernet, FDDI, etc. Esta funcin es necesaria cuando los sockets se comunican con direcciones IP, ya que no pueden ser usadas directamente por los dispositivos de red. El subsistema de red provee sus propios drivers para conexiones seriales, paralelas y ethernet. Posee una interfaz de abstraccin para los dispositivos para ocultar
-
Tecsup Estructura del Kernel
Pgina 15
las diferencias entre las comunicaciones de las capas ms bajas y ms altas de este subsistema.
6. MODULOS
En este contexto, mdulo se refiere a un controlador de un dispositivo o servicio que puede cargarse o descargarse cuando el usuario o algn dispositivo lo solicitan (generalmente dinmicamente). Los mdulos que se distribuyen con el kernel estn ubicados en el directorio /lib/modules/version, donde version es la versin de su kernel, con la extensin .ko organizados en directorios que indican el tipo de dispositivo o el propsito por ejemplo:
fs - sistema de archivos
net - protocolos y hardware para redes. Para lograr configurar un dispositivo controlado por un mdulo: Asegurar que no haya conflictos entre el dispositivo con otros
y eventualmente conocer la configuracin que usa (algunos controladores auto detectan la configuracin del dispositivo, pero no todos).
Encontrar un mdulo que pueda manejar el dispositivo. Eventualmente pasar opciones al mdulo de acuerdo a la
configuracin del dispositivo (IRQ o I/O) 6.1. Comandos
6.1.1. lsmod Lista los mdulos cargados, de cada uno presenta nombre, tamao, cuenta de usos y lista de mdulos que lo usan (es equivalente a cat /proc/modules). 6.1.2. rmmod mdulos Descarga uno o ms mdulos cargados, mientras estos no estn siendo usados. Con la opcin -r intenta descargar recursivamente mdulos de los cuales el mdulo especificado dependa. El comando rmmod -a descarga todos los mdulos que no estn siendo usados. 6.1.3. insmod mdulo [opciones] Trata de cargar el mdulo especificado. Pueden pasarse opciones especficas para el mdulo, a continuacin del nombre con la sintaxis smbolo=valor. Puede indicarse una ruta no estndar para buscar mdulos establecindola en la variable MODPATH o en /etc/modules.conf. Dado que los mdulos se enlazan directamente con el kernel,
-
Estructura del Kernel Tecsup
Pgina 16
deben ser compilados para una versin precisa, con la opcin -f puede evitarse el chequeo de versiones.
6.1.4. depmod Como un mdulo puede requerir otros, hay dependencias que deben respetarse al cargar y descargar mdulos. depmod permite calcular tales dependencias entre varios mdulos o entre todos los disponibles con la opcin -a. 6.1.5. modprobe mdulo opciones Emplea la informacin de dependencias generada por depmod e informacin de /etc/modules.conf para cargar el mdulo especificado, cargando antes todos los mdulos de los cuales dependa. Para especificar el mdulo basta escribir el nombre (sin la ruta, ni la extensin .o) o uno de los alias definidos en /etc/modutils/alias.
7. Numeracin del Kernel La versin del kernel de Linux actualmente consta de cuatro nmeros. Por ejemplo, asumamos que el nmero de la versin est compuesta de esta forma: A.B.C[.D] (ej.: 2.2.1, 2.4.13 2.6.12.3). El nmero A denota la versin del kernel. Es el que cambia con menor frecuencia y solo lo hace cuando se produce un gran cambio en el cdigo o en el concepto del kernel. Histricamente solo ha sido modificado dos veces: en 1994 (versin 1.0) y en 1996 (versin 2.0). El nmero B denota la mayor revisin del kernel. Antes de la serie de Linux 2.6.x, los nmeros pares indicaban la versin estable lanzada. Por ejemplo una para uso de
fabricacin, como el 1.2, 2.4 2.6. Los nmeros impares, en cambio, como la serie 2.5.x, son versiones de desarrollo, es decir que no son consideradas de produccin. Comenzando con la serie Linux 2.6.x, no hay gran diferencia entre los nmeros pares o impares con respecto a las nuevas herramientas desarrolladas en la misma serie del kernel. Linus Torvalds dictamin que este ser el modelo en el futuro. El nmero C indica una revisin menor en el kernel. En la forma anterior de versiones con tres nmeros, esto fue cambiado cuando se implementaron en el kernel los parches de seguridad, bugfixes, nuevas caractersticas o drivers. Con la nueva poltica, solo es cambiado cuando se introducen nuevos drivers o caractersticas; cambios menores se reflejan en el nmero D.
-
Tecsup Estructura del Kernel
Pgina 17
El nmero D se produjo cuando un grave error, que requiere de un arreglo inmediato, se encontr en el cdigo NFS de la versin 2.6.8. Sin embargo, no haba otros cambios como para lanzar una nueva revisin (la cual hubiera sido 2.6.9). Entonces se lanz la versin 2.6.8.1, con el error arreglado como nico cambio. Con 2.6.11, esto fue adoptado como la nueva poltica de versiones. Bug-fixes y parches de seguridad son actualmente manejados por el cuarto nmero dejando los cambios mayores para el nmero C.
8. Actualizacin del Kernel
8.1. Preparacin de la actualizacin
Antes de actualizar el kernel, tome algunas precauciones. La primera es asegurarse que tiene un disco de arranque en caso de que haya problemas. Si el gestor de arranque no est configurado apropiadamente para arrancar el nuevo kernel, no ser capaz de arrancar su sistema a menos que tenga un disquete de arranque. Para crear un disco de arranque para su sistema, conctese como usuario root y en el intrprete de comandos teclee el siguiente comando:
Reinicie la mquina con el disquete de arranque y verifique que funciona antes de continuar. Con suerte, no necesitar usar el disquete, pero gurdelo en un lugar seguro por si acaso. Para determinar cules paquetes del kernel estn instalados, ejecute el comando siguiente en el intrprete de comandos:
La salida contendr alguno o todos de los siguientes paquetes, dependiendo del tipo de instalacin que haya realizado (el nmero de la versin puede variar):
# rpm -qa | grep kernel
# mkbootdisk `uname -r`
-
Estructura del Kernel Tecsup
Pgina 18
De la anterior salida, puede determinar qu paquetes necesita descargar para actualizar el kernel. El nico paquete necesario para un sistema con un nico procesador es el kernel.
8.2. Paquetes del Kernel Si tiene una computadora con ms de un procesador, necesita el paquete kernel-smp que contiene el soporte para ms de un procesador. Tambin se recomienda instalar el paquete kernel en el caso de que el kernel con varios procesadores no funcione correctamente con el sistema. Si tiene una computadora con una memoria superior a cuatro GB, necesita el paquete kernel-bigmem para que el sistema pueda usar ms de cuatro gigabytes de memoria. De todas maneras, se recomienda instalar el paquete kernel por si ocurriera algn error. El paquete kernel-bigmem existe slo para la arquitectura i686. Si est actualizando el kernel en un ordenador porttil o est usando PCMCIA, el paquete kernel-pcmcia-cs tambin es necesario. No necesita el paquete kernel-source a menos que vaya a recompilar el kernel por s mismo o vaya a desarrollarlo. El paquete kernel-doc contiene documentacin sobre desarrollo del kernel y no es necesario. Se recomienda si el sistema es usado para desarrollos del kernel. El paquete kernel-util incluye utilidades que pueden ser usadas para controlar el kernel o el hardware del sistema. No es necesario. Red Hat crea kernels que han sido optimizados para diferentes versiones x86. Las opciones son athlon para los sistemas AMD Athlon y AMD Duron, i686 para
sistemas Intel Pentium II, Intel Pentium III, e Intel Pentium 4, y i586 para sistemas Intel Pentium y AMD K6. Si no sabe cul es la versin de su sistema x86, use el
kernel-2.4.20-2.47.1
kernel-debug-2.4.20-2.47.1
kernel-source-2.4.20-2.47.1
kernel-doc-2.4.20-2.47.1
kernel-pcmcia-cs-3.1.31-13
kernel-smp-2.4.20-2.47.1
-
Tecsup Estructura del Kernel
Pgina 19
kernel para la versin i386 ya que es compatible con todas los sistemas basados en la arquitectura x86. La versin x86 del paquete RPM se encuentra en el nombre del fichero. Por ejemplo, kernel-2.4.20-2.47.1.athlon.rpm se ha optimizado para los sistemas AMD Athlon y AMD Duron y kernel-2.4.20-2.47.1.i686.rpm para los sistemas Intel Pentium II, Intel Pentium III, e Intel Pentium 4. Cuando haya determinado los paquetes necesarios para su kernel, seleccione la arquitectura apropiada para los paquetes kernel, kernel-smp, y kernel-bigmem. Use las versiones i386 de los otros paquetes.
8.3. Descarga
Hay varias maneras de saber si hay un kernel actualizado disponible para su sistema. Segn las distribuciones que use: 8.3.1. Distribucin RedHAt
http://www.redhat.com/apps/support/errata/, elija la versin del sistema Red Hat Linux que est usando y busque la errata de sta. Las erratas del kernel, normalmente estn bajo la seccin Security Advisories. Desde la lista de erratas, pulse kernel errata para ver los informes detallados de erratas. En el informe de erratas, hay una lista de paquetes RPM requeridos y un enlace para descargarlos desde el sitio FTP de Red Hat. Tambin puede descargarlos desde un FTP espejo de Red Hat. Una lista de sitios espejos est disponible desde http://www.redhat.com/download/mirror.html. Use Red Hat Network para descargar los paquetes RPM del kernel e instalarlos. Red Hat Network puede descargar el kernel ms reciente, actualizarlo en el sistema, crear una imagen de disco RAM inicial si se necesita y configurar el gestor de arranque para arrancar el nuevo kernel. Para ms informacin, consulte Red Hat Network User Reference Guide disponible en http://www.redhat.com/docs/manuals/RHNetwork/.
8.3.2. Cualquier Distribucin Revisar www.kernel.org
-
Estructura del Kernel Tecsup
Pgina 20
8.4. Realizando la actualizacin por RPM
Despus de obtener todos los paquetes necesarios, es hora de actualizar el kernel existente. En el intrprete de comandos de la shell como root, cmbiese al directorio que contiene los paquetes RPM y siga los pasos. Nota: Se recomienda encarecidamente guardar el kernel anterior por si tiene problemas con el kernel nuevo. Use el argumento -i con el comando rpm para mantener el viejo kernel. Si la opcin -U es usada para actualizar el paquete kernel, se sobreescribir el kernel instalado actualmente (la versin del kernel y la versin x86 pueden variar):
Si el sistema es un sistema multiprocesador, instale tambin los paquetes kernel-smp (la versin del kernel y la versin x86 pueden variar):
Si el sistema esta basado en i686 y contiene ms de 4 gigabytes de RAM, instale el paquete kernel-bigmem construido para la arquitectura i686 as como tambin (la versin del kernel puede variar):
Si los paquetes kernel-source, kernel-docs, o kernel-utils se van a actualizar, las versiones ms viejas lo ms probable es que no sean necesarias. Use los comandos siguientes para actualizar estos paquetes (las versiones pueden variar):
Si est usando PCMCIA (por ejemplo, en un porttil), necesitar tambin instalar kernel-pcmcia-cs y guardar la versin vieja. Si se usa la opcin -i probablemente tenga
rpm -Uvh kernel-source-2.4.20-2.47.1.i386.rpm
rpm -Uvh kernel-docs-2.4.20-2.47.1.i386.rpm
rpm -Uvh kernel-utils-2.4.20-2.47.1.i386.rpm
rpm -ivh kernel-bigmem-2.4.20-2.47.1.i686.rpm
rpm -ivh kernel-smp-2.4.20-2.47.1.i386.rpm
rpm -ivh kernel-2.4.20-2.47.1.i386.rpm
-
Tecsup Estructura del Kernel
Pgina 21
un conflicto ya que el kernel antiguo necesita este paquete para reiniciar con soporte PCMCIA. Para trabajar con ello, use la opcin --force como sigue (la versin puede variar):
8.5. Verificacin de la imagen de disco RAM inicial Si el sistema usa un controlador SCSI o un sistema de archivos ext3, necesitar un disco RAM inicial. El propsito de dicho disco es permitir a un kernel modular tener acceso a los mdulos que son necesarios para arrancar antes de que el kernel tenga acceso a los dispositivos donde los mdulos normalmente residen. El disco RAM inicial puede ser creado con el comando mkinitrd. Sin embargo, este paso es ejecutado automticamente si el kernel y sus paquetes asociados son instalados o actualizados desde los paquetes RPM distribuidos por Red Hat, Inc.; por tanto, no necesita ser ejecutado manualmente. Para verificar que fue creado, use el comando: Para asegurarse de que el archivo initrd-2.4.20-2.47.1.img fue creado (la versin debera coincidir la versin del kernel que acaba de instalar). Ahora que ya tiene instalado el nuevo kernel, necesita verificar que el gestor de arranque est configurado para cargar el nuevo kernel.
8.6. Configuracin del gestor de arranque El paquete RPM kernel configura el gestor de arranque GRUB o LILO para arrancar el nuevo kernel si cualquiera de estos gestores de arranque es instalado. Sin embargo, no configura el gestor de arranque para cargar el nuevo kernel por defecto. Es una buena idea confirmar que el gestor de arranque se ha configurado correctamente. Esto es un paso crucial. Si el gestor de arranque est configurado de forma incorrecta, no podrn arrancar el sistema. Si esto ocurre, arranque el sistema con el disquete de arranque que cre anteriormente e intente configurar de nuevo el gestor de arranque.
rpm -ivh --force kernel-pcmcia-cs-3.1.24-2.i386.rpm
# ls l /boot
-
Estructura del Kernel Tecsup
Pgina 22
8.6.1. GRUB Si selecciona GRUB como gestor de arranque, asegrese que el fichero /boot/grub/grub.conf contenga la seccin title con la misma versin del paquete kernel que acaba de instalar (lo mismo para los paquetes kernel-smp o kernel-bigmem):
Si ha creado una particin separada para /boot, el camino al kernel y la imagen initrd ser relativo a la particin /boot. Observe que el nuevo kernel no est configurado para ser el kernel por defecto. Para configurar GRUB para que arranque el nuevo kernel por defecto, cambie el valor de la variable default al nmero del ttulo de la seccin que contiene el nuevo kernel. La cuenta comienza con 0. Por ejemplo, si el nuevo kernel es el segundo ttulo en la seccin, configure default a 1. Comience evaluando el nuevo kernel reiniciando el computador y vigilando los mensajes para asegurarse de que el hardware es detectado adecuadamente.
8.6.2. LILO Si se utiliza LILO como el gestor de arranque, confirme que el archivo /etc/lilo.conf contiene una seccin image con la misma versin que el
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/hda2
# initrd /initrd-version.img
#boot=/dev/hda
default=3
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
title Red Hat Linux (2.4.20-2.47.1)
root (hd0,0)
kernel /vmlinuz-2.4.20-2.47.1 ro root=LABEL=/
initrd /initrd-2.4.20-2.47.1.img
title Red Hat Linux (2.4.20-2.30)
root (hd0,0)
kernel /vmlinuz-2.4.20-2.30 ro root=LABEL=/ initrd /initrd-2.4.20-2.30.img
-
Tecsup Estructura del Kernel
Pgina 23
paquete kernel que acaba de instalar (lo mismo para los paquetes kernel-smp o kernel-bigmem): Observe que El nuevo kernel no est configurado para ser el kernel por defecto. Para configurar LILO para que arranque el nuevo kernel por defecto, cambie el valor de la variable default al valor de label de la seccin image del nuevo kernel. Debe ejecutar el comando /sbin/lilo como root para activar los cambios. Despus de ejecutarlo, ver un resultado similar al siguiente:
El * despus de 2.4.20-2.47.1 significa que el kernel en esa seccin es el kernel por defecto que LILO arrancar. Comience evaluando el nuevo kernel reiniciando su ordenador y viendo los mensajes para asegurarse que su hardware es detectado apropiadamente.
Added 2.4.20-2.47.1 *
Added linux
prompt
timeout=50
default=2.4.20-2.30
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
message=/boot/message
linear
image=/boot/vmlinuz-2.4.20-2.47.1
label=2.4.20-2.47.1
initrd=/boot/initrd-2.4.20-2.47.1.img
read-only
append="root=LABEL=/"
image=/boot/vmlinuz-2.4.20-2.30
label=2.4.20-2.30
initrd=/boot/initrd-2.4.20-2.30.img
read-only
append="root=LABEL=/"
El gestor LILO esta discontinuado en la mayora de las distribuciones el GRUB es el nico que aparecer
-
Estructura del Kernel Tecsup
Pgina 24
9. Actualizacin con las fuentes del Kernel Descargar las fuentes desde www.kernel.org o un mirror. Tambin va ftp annimo: ftp ftp://ftp.kernel.org/pub/linux/kernel/ El archivo con las fuentes se nombra como linux-x.y.z.tar.gz, donde x e y son las cifras que determinan la versin de nuestro kernel. La primera hace referencia a la generacin y la segunda a la fase de desarrollo en la que se encuentra. Si la segunda cifra es impar, significa que nos encontramos ante un kernel inestable, por el contrario si la cifra es par el ncleo ser estable. Por ltimo, la z representa el nmero de versin en la que se encuentra una determinada versin del kernel, y como es lgico, intentaremos disponer de la versin ms actual possible, para as gozar de las numerosas ventajas que se van introduciendo con cada versin. Para descomprimir el tarball es importante que no haya ningn directorio /usr/src/linux. Normalmente este fichero suele ser un link simblico que apunta hacia el rbol de directorios de la versin del ncleo que este instalado en nuestra mquina. Si es as podemos borrarlo con un rm linux, o bien renombrar el directorio con mv:
Para poder compilar el kernel necesitaremos tener el compilador de C gcc, se encuentra en los instaladores de Linux. gcc-xxxx.rpm 9.1. Compilar el kernel
Entraremos como root en el sistema y nos situaremos en el directorio que contiene las fuentes del ncleo: # cd /usr/src/linux (esto nos sita en el directorio que contiene las fuentes) # make mrproper (trae la fuente del kernel a su estado bsico) Lo primero es generar los archivos de configuracin del nuevo kernel. Existen tres formas de generar estos archivos.
# tar zxvf linux-2.4.17.tar.gz
# ln -s linux-2.4.17 linux
-
Tecsup Estructura del Kernel
Pgina 25
# make config (modo texto basado en preguntas algo engorroso) # make menuconfig (modo texto con mens con ayuda) # make xconfig (modo grfico, requiere X-windows) La primera opcin es poco recomendable ya que deberemos responder a infinidad de complicadas preguntas que no deberemos fallar, de lo contrario, tendremos que volver a empezar otra vez desde el principio. El segundo mtodo se basa en una serie de mens y submens. Bastar con ir seleccionando las diferentes opciones que aparecen para adaptar el ncleo a nuestro hardware y capacitarlo para que haga lo que nos interese. Esta opcin dispone de una ayuda que nos explicar en qu consiste cada una de las opciones. Para ejecutar esta opcin es necesario tener instalado en nuestro sistema el paquete ncurses. El tercer mtodo slo funcionar si tenemos configurado el sistema X-windows. Si hemos optado por el mtodo de mens (menuconfig), o por el grfico (xconfig),una vez seleccionadas todas las opciones que nos interese saldremos de la aplicacin guardando los cambios realizados. Ahora ya estamos en condiciones de compilar el ncleo con las opciones que acabamos de seleccionar, para ello haremos lo siguiente: # make dep (o make depend libera de dependencias del ncleo para que la compilacin sea correcta) # make clean # make bzImage (Este comando compila el ncleo y genera una imagen comprimida) # make modules (Compila los modulos) # make modules_install (instala los mdulos ) # make install (Copia el nuevo ncleo al directorio /boot) Otra manera de instalar los mdulos y el kernel una vez compilados podra ser esta: # cp arch/i386/boot/bzImage > /boot/ (Esto desde la ubicacin actual --> /usr/src/linux # mv /boot/System.map /boot/System.old # cp System.map /boot/System.map
-
Estructura del Kernel Tecsup
Pgina 26
10. Mdulos del kernel
El kernel de Linux tiene un diseo modular. En el momento de arranque, slo se carga un kernel residente mnimo en memoria. Por ello, cuando un usuario solicita alguna caracterstica que no est presente en el kernel residente, se carga dinmicamente en memoria un mdulo kernel, tambin conocido algunas veces como un controlador. Durante la instalacin, se prueba el hardware en el sistema. Basado en esta prueba y en la informacin proporcionada por el usuario, el programa de instalacin decide qu mdulos necesita cargar en el momento de arranque. El programa de instalacin configura el mecanismo de carga dinmica para que funcione de forma transparente. Si se aade un nuevo hardware despus de la instalacin y este requiere un mdulo kernel, el sistema debe ser configurado para cargar el mdulo adecuado para el nuevo hardware. Cuando el sistema es arrancado con el nuevo hardware, se ejecuta el programa Kudzu detecta el nuevo hardware si es soportado y configura el mdulo necesario para l. El mdulo tambin puede ser especificado manualmente modificando el archivo de configuracin del mdulo, /etc/modules.conf. Los mdulos de tarjetas de vdeo usados para desplegar la interfaz del sistema X Window son parte del paquete XFree86, no del kernel; por lo tanto, este captulo no se aplica a ellos.
Por ejemplo, si un sistema incluye un adaptador de red SMC EtherPower 10 PCI, el archivo de configuracin del mdulo contiene la lnea siguiente:
Si una segunda tarjeta de red es aadida al sistema y es idntica a la primera tarjeta, aada la lnea siguiente al archivo /etc/modules.conf:
11. Utilidades del mdulo del kernel Est disponible un grupo de comandos para el manejo de mdulos kernel si el paquete modutils est instalado. Use estos
alias eth1 tulip
alias eth0 tulip
-
Tecsup Estructura del Kernel
Pgina 27
comandos para determinar si un mdulo ha sido cargado exitosamente o cuando se est probando mdulos diferentes para una nueva pieza de hardware. El comando /sbin/lsmod muestra una lista de los mdulos cargados actualmente. Por ejemplo:
Por cada lnea, la primera columna es el nombre del mdulo, la segunda columna es el tamao del mdulo y la tercera es el recuento de usos. La informacin despus del recuento de usos vara un poco por mdulo. Si se lista (unused) en la lnea del mdulo, el mdulo no est siendo usado actualmente. Si (autoclean) est en la lnea para el mdulo, este puede ser limpiado automticamente por el comando rmmod -a. Cuando se ejecuta este comando, cualquier mdulo que este etiquetado con autoclean, que no ha sido usado desde la accin previa de autoclean, ser cargado. Red Hat Linux no realiza esta accin de autoclean por defecto. Si el nombre de un mdulo esta listado al final de la lnea entre corchetes, el mdulo entre corchetes es dependiente del mdulo listado en la primera columna de la lnea. Por ejemplo, en la lnea
Los mdulo del kernel hid y usb-uhci dependen del mdulo usbcore.
Module Size Used by Not tainted
iptable_filter 2412 0 (autoclean) (unused)
ip_tables 15864 1 [iptable_filter]
nfs 84632 1 (autoclean)
lockd 59536 1 (autoclean) [nfs]
sunrpc 87452 1 (autoclean) [nfs lockd]
soundcore 7044 0 (autoclean)
ide-cd 35836 0 (autoclean)
cdrom 34144 0 (autoclean) [ide-cd]
parport_pc 19204 1 (autoclean)
lp 9188 0 (autoclean)
parport 39072 1 (autoclean) [parport_pc lp]
autofs 13692 0 (autoclean) (unused)
e100 62148 1
microcode 5184 0 (autoclean)
keybdev 2976 0 (unused)
mousedev 5656 1
hid 22308 0 (unused)
input 6208 0 [keybdev mousedev hid]
usb-uhci 27468 0 (unused)
usbcore 82752 1 [hid usb-uhci]
ext3 91464 2
jbd 56336 2 [ext3]
usbcore 82752 1 [hid usb-uhci]
-
Estructura del Kernel Tecsup
Pgina 28
La salida /sbin/lsmod es la misma que la salida de /proc/modules. Para cargar un mdulo del kernel, use el comando /sbin/modprobe seguido del nombre del mdulo. Por defecto, modprobe intenta cargar el mdulo desde los subdirectorios /lib/modules//kernel/drivers/. Hay un subdirectorio para cada tipo de mdulo, tal como el subdirectorio net/ para los controladores de interfaces de red. Algunos mdulos del kernel tienen dependencias, es decir que otros mdulos deben ser cargados antes para que el otro se cargue. El comando /sbin/modprobe verifica estas dependencias y carga los mdulos necesarios antes de cargar el mdulo especfico. Por ejemplo, el comando
Carga cualquier dependencia de mdulos y luego el mdulo hid. Para imprimir a la pantalla todos los comandos a medida en que /sbin/modprobe los ejecuta, use la opcin -v. Por ejemplo:
Se despliega una salida similar a lo siguiente: # /sbin/insmod /lib/modules/2.4.20-2.47.1/kernel/drivers/usb/hid.o
Using /lib/modules/2.4.20-2.47.1/kernel/drivers/usb/hid.o Symbol version prefix 'smp_'
El comando /sbin/insmod tambin existe para cargar mdulos kernel; sin embargo no resuelve dependencias. Por ello se recomienda el uso de /sbin/modprobe. Para descargar mdulos del kernel, use el comando /sbin/rmmod seguido por el nombre del mdulo. La utilidad rmmod slo descarga mdulos que ya no son usados y que no son una dependencia de otro mdulo en uso. Por ejemplo, el comando:
/sbin/rmmod hid
/sbin/modprobe -v hid
/sbin/modprobe hid
-
Tecsup Estructura del Kernel
Pgina 29
Baja el mdulo del kernel hid. Otra utilidad muy conveniente es modinfo. Use el comando /sbin/modinfo para mostrar informacin sobre el mdulo del kernel. La sintaxis general es:
Las opciones incluyen -d, lo cual muestra una breve descripcin del mdulo, y -p lo que lista los parmetros que el mdulo soporta. Para una lista completa de las opciones, consulte la pgina del manual de modinfo (man modinfo).
12. BIBLIOGRAFIA Libro de Kernel http://www.kroah.com/lkn/ Video de Kernel http://video.google.com/videoplay?docid=-3498228245415745977
13. Bibliografa Manual de Kernel (www.kernel.org)
/sbin/modinfo [options]