Administracion Del Kernel

Embed Size (px)

DESCRIPTION

Administracion de Kernel Linux

Citation preview

  • 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]