You are on page 1of 46

UNIVERSIDAD MAYOR DE SAN SIMON FACULTAD DE CIENCIAS Y TECNOLOGIA CARRERA DE ING.

DE SISTEMAS

COMPILACION NUCLEO KERNEL

INTEGRANTES: Fernandez Villcaes Vicente Flores Acevedo Milver F. Rojas Vallejos Bladimir GRUPO: 1 CARRERA: ING. SISTEMAS

CBBA - BOLIVIA

COMPILACION DEL NUCLEO KERNEL LINUX

COMPILACION DE KERNEL

Que es el Kernel?

Qu es el kernel?
Para explicar en palabras sencillas lo que es un kernel, empecemos por saber que cada computadora, lector de discos, disco duro, tarjeta de video, etc. es diferente y el kernel es el programa que sabe que hacer para que esos componentes ejecuten su tarea como abrir un documento, borrarlo de un disco o mostrar una imagen en pantalla. El kernel debe saber cmo hablar a esos diferentes componentes materiales y controlar las labores corrientes que Hacemos a diario con nuestras computadoras.
Las funciones ms importantes del mismo, aunque no las nicas, son:

Administracin de la memoria para todos los programas y procesos en ejecucin. Administracin del tiempo de procesador que los programas y procesos en ejecucin utilizan.

Es el encargado de que podamos acceder a los perifricos/elementos de nuestra computadora de una manera cmoda. Hasta que empez el desarrollo de la serie 2.6 del ncleo, existieron dos tipos de versiones del ncleo.

COMPILACION DEL NUCLEO KERNEL LINUX Versin de produccin: La versin de produccin, era la versin estable hasta el momento. Esta versin era el resultado final de las versiones de desarrollo o experimentales. Cuando el equipo de desarrollo del ncleo experimental, decida que tena un ncleo estable y con la suficiente calidad, se lanzaba una nueva versin de produccin o estable. Esta versin era la que se deba utilizar para un uso normal del sistema, ya que eran las versiones consideradas ms estables y libres de fallos en el momento de su lanzamiento.

Versin de desarrollo: Esta versin era experimental y era la que utilizaban los desarrolladores para programar, comprobar y verificar nuevas caractersticas, correcciones, etc. Estos ncleos solan ser inestables y no se deban usar sin saber lo que se haca.

Arquitectura del Kernel Linux

Debido a que el kernel de Linux es monoltico, tiene ms complejidad que en los otros tipos de kernels. Esta fue una caracterstica de diseo que estaba bajo un poco de debate en los primeros das de Linux y an tiene algunos de los defectos de diseo que los ncleos monolticos son inherentes a tener. Una cosa que los desarrolladores del kernel de Linux hicieron para conseguir solucionar estas fallas es hacer mdulos del kernel que pueden ser cargados y descargados en tiempo de ejecucin, lo que significa que puede agregar o quitar caractersticas de su ncleo en el momento. Esto puede ir ms all de la adicin de la funcionalidad de hardware para el ncleo, mediante la inclusin de mdulos que ejecutan los procesos del servidor, como la virtualizacin de bajo nivel, pero tambin puede permitir que el ncleo pueda ser del todo reemplazado sin necesidad de reiniciar el equipo en algunos casos.

COMPILACION DEL NUCLEO KERNEL LINUX

COMPILACION DEL NUCLEO KERNEL LINUX

Tomar nota de los componentes del equipo


La mayor parte del trabajo para compilar un Kernel es el habilitar las opciones correctas en la interfaz de configuracin. Por lo que es necesario conocer bien los componentes que forman el equipo.

Versiones de Linux
Para darse una idea del crecimiento exponencial de Linux al paso de los aos, basta con ver la cantidad de lneas de cdigo que ha tenido en sus versiones:

El kernel y sus componentes


Cuando compilamos y construimos el kernel se generan varios archivos comunes, adems de uno o ms mdulos binarios especficos de la arquitectura para la que se ha construido el ncleo. Los archivos comunes se construyen siempre, independientemente de la arquitectura objetivo. Dos de ellos son System.map y vmlinux. El primero de ellos lo vimos por encima en el captulo anterior yconsiste en una lista de los smbolos del kernel as como de sus direcciones (similar a la salida de la orden nm vmlinux) en un archivo plano que se puede visualizar com o cualquier archivo de texto corriente. Este archivo nos puede servir a la hora de depurar para seguir la pista dentro del kernel de los smbolos que nos interesen. El segundo es el kernel propiamente dicho en formato ELF1 propio de la arquitectura de tipo ejecutable, sin embargo, es importante notar aqu que normalmente este archivo nunca se arranca directamente. Una de las razones es porque casi siempre se encuentra comprimido, por lo que se hace imprescindible un cargador de arranque que ponga en

COMPILACION DEL NUCLEO KERNEL LINUX

marcha el proceso de descompresin de la imagen. Ms adelante veremos este proceso en ms profundidad.

Parte de la salida de la construccin del kernel

Este archivo (vmlinux) es el kernel propiamente dicho, una imagen monoltica y completamente independiente, sin ninguna referencia externa. Cuando se ejecuta en el contexto apropiado (por un cargador de arranque) arranca la placa en la que se est ejecutando y, como resultado, la placa se queda con un ncleo completamente funcional y lista para realizar el resto de la inicializacin del sistema.

COMPILACION DEL NUCLEO KERNEL LINUX

Como se coment en la introduccin, la imagen vmlinux est compuesta de varias imgenes binarias (figura 3.1), as que podemos estudiar las que ms nos interesen. Claro est, no entraremos en detalle acerca de qu es cada una y para qu sirve porque queremos estudiar las cuestiones de implementacin de una arquitectura concreta y eso entra ms en el campo del diseo general del kernel2. Por ejemplo, para nosotros es interesante el primer objeto, head.o. Este binario se ensambla a partir de .../arch/arm/kernel/head.S, que es un archivo fuente en ensamblador de la arquitectura que estamos tratando y que realiza algunas inicializaciones del kernel a muy bajo nivel. Este archivo contiene las primeras lneas ejecutables del kernel propiamente dicho. Ms adelante veremos el proceso de arranque del ncleo con mayor detalle. Dando un vistazo a la figura 3.1, vemos que las mayores porciones de la imagen pertenecen al cdigo del sistema de archivos, la red y los drivers. Dentro del cdigo del mdulo kernel y los mdulos propios de la arquitectura se encuentra el planificador de procesos, la gestin de procesos y hebras y otras funcionalidades principales del ncleo.

COMPILACION DEL NUCLEO KERNEL LINUX

COMPILACION DEL NUCLEO KERNEL LINUX

Anatoma del ncleo Linux


El kernel de Linux es el ncleo de un sistema operativo extenso y complejo, y aunque su tamao es enorme, est correctamente organizado en subsistemas y capas. En este artculo, se explorar la estructura general del kernel de Linux y se conseguir conocer sus subsistemas e interfaces del ncleo ms importantes.

Dado que la meta de este artculo es introducirse en el kernel de Linux y explorar su arquitectura y componentes principales, empezaremos con una vuelta rpida por la historia del kernel, despus nos centraremos en la arquitectura del kernel de Linux a vista de pjaro y, finalmente, examinaremos sus subsistemas ms importantes. El kernel de Linux tiene ms de seis millones de lneas de cdigo, por lo tanto, esta introduccin no es exhaustiva. Los recursos ayudarn a profundizar.

COMPILACION DEL NUCLEO KERNEL LINUX Un pequeo viaje a travs de la historia de Linux

Aunque podra decirse que Linux es el sistema operativo de cdigo abierto ms popular, su historia es realmente bastante corta considerando la lnea temporal de los sistemas operativos. En los primero momentos de la computacin, los programadores desarrollaban sobre el hardware directamente en el lenguaje que l entenda. La falta de un sistema operativo significaba que nicamente una aplicacin (y por lo tanto un nico usuario) poda usar un dispositivo enorme y caro de cada vez. Los primeros sistemas operativos fueron desarrollados en los aos 50 para proveer de una experiencia de desarrollo ms simple. Algunos ejemplos son General Motors Operating System (GMOS) desarrollado para el IBM 701 y el FORTRAN Monitor System (FMS) desarrollado por la aviacin americana para el IBM 709.

En los aos 60, el Instituto Tecnolgico de Massachussets (MIT) y un grupo de compaas desarrollaron un sistema operativo experimental llamado Multics (Multiplexed Information and Computing Service) para la GE-654. Uno de los desarrolladores de este sistema, AT&T, abandon Multics y desarroll su propio sistema operativo en 1970 llamado Unics. Junto con este sistema operativo vino el lenguaje C, para el que fue desarrollado y, posteriormente, reescrito con el fin de hacer el desarrollo del sistema operativo portable.

Veinte aos ms tarde, Andrew Tanenbaum creo una versin de UNIX con un microkernel llamada MINIX que corra en pequeos PC. Este sistema operativo de cdigo abierto inspir el desarrollo inicial de Linux por parte de Linus Torvals a principios de los 90 Linux evolucion rpidamente para transformarse de ser un proyecto de una sola persona a un proyecto de desarrollo de extensin mundial que involucraba a miles de programadores. Una de las ms importantes decisiones para Linux fue la adopcin de la Licencia Pblica General de la GNU (GPL). Bajo la GPL, el kernel de Linux fue protegido contra l la explotacin comercial, y adems beneficiado por el espacio de desarrollo del proyecto GNU. Esto permiti que aplicaciones tiles como GCC y varias Shell fueran soportadas.

COMPILACION DEL NUCLEO KERNEL LINUX

Introduccin al kernel de Linux


Ahora, visin a grandes rasgos sobre la arquitectura del sistema operativo GNU/Linux. Puedes pensar en un sistema operativo desde dos niveles.

10

COMPILACION DEL NUCLEO KERNEL LINUX

En la parte ms alta est el espacio de usuario o aplicacin. Aqu es donde las aplicaciones de usuario son ejecutadas. Por debajo del espacio de usuario est el espacio del ncleo donde aparece el kernel de Linux.

Tambin est la librera de C de GNU (glibc) que provee la interfaz de llamadas al sistema que conecta con el kernel y provee del mecanismo de transicin entre las aplicaciones usuario y el ncleo. Esto es importante, ya que el kernel y las aplicaciones de usuario ocupan diferentes reas de direcciones protegidas. Y mientras cada proceso de usuario ocupa su propio espacio de direcciones virtual, el kernel ocupa un espacio de direcciones nico.

Podemos ir ms all dentro del kernel dividindolo en tres niveles a grandes rasgos. En lo ms alto esta la interfaz de llamadas al sistema, que implementa las funciones bsicas tales como read o write. Por debajo de ella, se encuentra el cdigo del kernel, o mejor dicho, el cdigo del kernel independiente de la arquitectura, este cdigo es comn a todas las arquitecturas de procesadores soportadas por Linux. Ms abajo an, est el cdigo dependiente de la arquitectura, que forma lo que es ms comnmente llamado BSP (Board Support Package). Este cdigo es especfico para cada procesador y plataforma.

Propiedades del kernel de Linux


Cuando discutimos acerca de un sistema extenso y complejo, podemos enfocarlo desde varias perspectivas. Una forma acertada en la descomposicin de la arquitectura es el proveer de un modo de entender mejor el cdigo, y esto es lo que haremos aqu.

El kernel de Linux, implementa un nmero de atributos importantes de arquitectura. Tanto al ms alto nivel, como al ms bajo nivel, el kernel es dividido en unos distintos subsistemas. Linux puede ser considerado tambin como un kernel monoltico ya que engloba dentro de l todos los servicios bsicos. Esto lo diferencia de una arquitectura de microkernel donde el kernel provee de servicios bsicos tanto de comunicacin, de entrada/salida, manejo de procesos y memoria y los servicios ms especficos estn conectados a la capa del microkernel. Cada uno tiene sus ventajas y desventajas.

11

COMPILACION DEL NUCLEO KERNEL LINUX

A lo largo del tiempo el kernel de Linux ha conseguido eficiencia en trminos de uso de memoria y CPU, as como ser extremadamente estable. Pero el aspecto ms interesante de Linux, dado su tamao y complejidad, es su portabilidad. Linux puede ser compilado para funcionar en un enorme nmero de procesadores y plataformas con diferentes restricciones de arquitectura y necesidades. Un ejemplo es la capacidad de Linux para correr en un procesador con MMU como en uno que no la tiene. El port uClient del kernel de Linux provee soporte para arquitecturas sin MMU.

Sistemas principales del kernel de Linux


Ahora, echaremos un vistazo a los principales componentes del kernel de Linux usando el desglose.

12

COMPILACION DEL NUCLEO KERNEL LINUX

Interfaz de llamadas al sistema (SCI)


La SCI es una fina capa que provee de la capacidad de realizar llamadas a funciones desde el espacio de usuario al kernel. Tal y como se ha discutido previamente, esta interfaz puede ser dependiente de la arquitectura, incluso dentro de la misma familia de procesadores. La SCI es realmente un interesante servicio multiplexador y demultiplexador de llamadas al sistema. Puede encontrarse su implementacin en ./linux/kernel, as como las porciones dependientes de la arquitectura en ./linux/arch.

Gestin de procesos
La gestin de procesos est centrada en la ejecucin de los procesos. En el kernel, son llamados hilos y representan una virtualizacin individual del procesador (cdigo del hilo, registros de la CPU, datos y pila). En el espacio de usuario, se suele usar el trmino proceso, aunque en la implementacin de Linux no separa los dos conceptos (hilos y procesos). El ncleo provee una API a travs de la SCI con la que se pueden crear nuevos procesos (fork, exec, o funciones POSIX), parar un proceso (kill, exit) y comunicarse y sincronizarse entre ellos (signal, o mecanismos POSIX)

La gestin de procesos es necesaria para compartir la CPU entre los hilos activos. El kernel implementa un novedoso algoritmo de planificacin que opera en tiempo constante, sin tener l cuenta el nmero de procesos que compiten por la CPU. Este es el planificador O(1), denotando que le lleva misma cantidad de tiempo la planificacin de un slo hilo que la de varios. El planificador O(1) tambin soporta multiproceso (SMP). Se pueden encontrar las fuentes de la gestin de procesos en ./linux/kernel (y los dependientes de la arquitectura en ./linux/arch).

Gestin de memoria
Otro importante recurso que es controlado por el kernel es la memoria. Por eficiencia, dada la manera en la que el hardware maneja la memoria virtual, la memoria es gestionada en lo que se llaman pginas (4kb para la mayora de las arquitecturas). Linux incluye las definiciones para manejar la memoria disponible, as como los mecanismos hardware para el mapeo fsico y virtual.

13

COMPILACION DEL NUCLEO KERNEL LINUX Pero la gestin de memoria es mucho ms que manejar buffers de 4KB. Linux contiene abstracciones de buffers ms all de los de 4KB, como el localizador de slabs. Este esquema de manejo de memoria usa buffers de 4kb como base, pero adems reserva estructuras dentro de ellos, llevando la cuenta de que pginas estn completas, parcialmente usadas o vacas. Esto permite que el esquema de memoria crezca y disminuya dinmicamente segn las necesidades incluso del sistema ms grande. Con varios usuarios haciendo uso de la memoria, existen ocasiones en las que la memoria disponible puede agotarse. Por esta razn, las pginas pueden ser movidas de memoria y guardadas en el disco. Este proceso se llama intercambio (swapping) ya que las pginas son intercambiadas entre la memoria y el disco duro. Se pueden encontrar ms recursos sobre el manejo de la memoria en ./linux/mm El sistema de archivos virtual El sistema de archivos virtual (VFS- virtual file system) es un aspecto interesante del kernel de Linux ya que provee una interfaz comn de abstraccin para los sistemas de archivos. El VFS proporciona una capa de intercambio entre la SCI y los sistemas de archivos soportados por el kernel.

14

COMPILACION DEL NUCLEO KERNEL LINUX

En la parte ms alta del VFS se encuentra un API comn que contiene las abstracciones de funciones tales como open, close, read y write. En la parte ms baja, estn las abstracciones del sistema que definen cmo debe ser implementada la capa superior. Estas son aadidos para el sistema de ficheros dado (existen ms de 50). Se pueden encontrar las fuentes del sistema de archivos en ./linux/fs

Bajo la capa del sistema de archivos est la cach del buffer, que proporciona un conjunto sencillo de funciones a la capa del sistema de archivos (independientemente del sistema de ficheros en particular). Esta capa de cach optimiza el acceso a los dispositivos fsicos manteniendo brevemente informacin (o arriesgndose a leer de forma anticipada para que los datos estn disponibles para cuando hagan falta). Por debajo del cach del buffer estn los drivers de los dispositivos, que implementan la interfaz de cada dispositivo especfico.

15

COMPILACION DEL NUCLEO KERNEL LINUX

Drivers de dispositivos

16

COMPILACION DEL NUCLEO KERNEL LINUX

La inmensa mayora del cdigo del kernel de Linux est en los drivers de los dispositivos que hacen a determinado elemento hardware usable. El rbol de cdigo de Linux proporciona un subdirectorio para los drivers que est, a su vez, divido entre los varios dispositivos que soporta, tales como Bluetooth, I2C, de serie... Se pueden encontrar en el cdigo en ./linux/drivers.

Cdigo dependiente de la arquitectura Aunque Linux es independiente de la arquitectura en la que corra, hay varios elementos que deben tenerla en cuenta para operaciones habituales y eficiencia. El subdirectorio ./linux/arch define la porcin del kernel dependiente de la arquitectura contenida en un nmero de subdirectorios que son especficos a ella (en conjunto forman la BSP). Para un tpico ordenador de sobremesa, se usa el directorio i386. Cada directorio de cada arquitectura contiene otros subdirectorios que se centran en un aspecto concreto del kernel, como el inicio, gestin de memoria...Puedes encontrar el cdigo dependiente de la plataforma en ./linux/arch

17

COMPILACION DEL NUCLEO KERNEL LINUX

Caractersticas interesantes del kernel de Linux


Por si la eficiencia y la portabilidad del kernel no eran suficientes, tambin proporciona otras caractersticas que no pueden ser clasificadas en el desglose anterior. Linux, por ser un sistema operativo de produccin y de cdigo libre, es un buen banco de pruebas para nuevos protocolos y avances de esos protocolos. Linux soporta un gran nmero de protocolos de red, incluyendo el tpico TCP/IP, as como la extensin para red de alta velocidad (mayor que Ethernet de 1 o 10 Gigabits). Linux tambin soportas protocolos como el SCTP, que proporciona caractersticas avanzadas sobre TCP (como reemplazo del protocolo del nivel de transporte). Linux es tambin un kernel dinmico, soporta el aadido y eliminacin de componentes software al vuelo. Esto se conoce como mdulos del kernel instalables dinmicamente, y pueden ser insertados al inicio, cuando sean necesarios si un dispositivo concreto es encontrado requiriendo el mdulo) o en cualquier otro momento a peticin del usuario. Un reciente avance de Linux es su uso como un sistema operativo para otros sistemas operativos (llamado hipervisor). Recientemente, se realiz una modificacin en el kernel que fue llamada la Kernel based Virtual Machine (KVM). Esta modificacin permiti una nueva interfaz de usuario que permite a otros sistemas operativos correr sobre un KVM-enabled kernel. Adems de correr otra instancia de Linux, Windows puede ser virtualizado. La nica restriccin es que el procesador usado debe soportar las nueva instrucciones de virtualizacin.

Los diferentes tipos de Kernel


Hay, por supuesto, diferentes maneras de construir un ncleo y consideraciones arquitectnicas, cuando se construye desde cero. En general, la mayora de los ncleos se dividen en tres tipos: microkernel monoltica, e hbridos. Linux es un kernel monoltico, mientras que OS X (XNU) y Windows 7 ncleos usan hbridos. Echemos un rpido recorrido por las tres categoras para que podamos entrar en ms detalle ms adelante.

18

COMPILACION DEL NUCLEO KERNEL LINUX

Donde encontrar los archivos del Kernel?


El archivo del kernel, en Ubuntu, se almacena en la carpeta /boot y se llama vmlinuz-version. El nombre vmlinuz viene del mundo Unix donde se utilizaba para llamar a sus ncleos simplemente Unix de nuevo en los aos 60 para Linux comenz a llamar a su ncleo Linux, cuando se desarroll por primera vez en los aos 90. Cuando la memoria virtual fue desarrollada para facilitar la capacidad de realizar mltiples tareas, VM se puso al frente del archivo para mostrar que el kernel soporta la memoria virtual. Durante un tiempo el ncleo de Linux se llam vmlinux, pero el ncleo se hizo demasiado grande para caber en la memoria de arranque disponibles para la imagen del ncleo se comprimi y al final la x se cambi a la z para mostrar el resultado comprimido con zlib. Esta misma compresin no se utiliza siempre, a menudo se sustituye con LZMA o BZIP2, y algunos nucleos simplemente se llaman zImage. La numeracin de la versin ser en el formato ABCD donde AB probablemente ser 2.6, C ser su versin, y D indican los parches o correcciones En la carpeta / boot tambin habr otros archivos muy importante llamado initrd.img-versin, la versin System.map, y config-version. El archivo initrd es utilizado como un disco RAM pequeo que extrae y ejecuta el archivo del kernel actual. El archivo System.map se utiliza para la gestin de la memoria antes de que el kernel totalmente se cargue, y el archivo de configuracin le dice al ncleo qu opciones y mdulos de carga ejecute al inicio.

Mdulos del Kernel


Los mdulos del kernel, tambin conocido como un mdulo del kernel cargables (LKM), son esenciales para mantener el funcionamiento del ncleo con todo el hardware sin consumir toda la memoria disponible. Un mdulo generalmente, aumenta la funcionalidad del ncleo de base para cosas como los dispositivos, sistemas de archivos y las llamadas al sistema. LKMs tienen la extensin .Ko y normalmente se almacenan en el directorio /lib/ modules. Debido a su carcter modular, usted puede personalizar fcilmente su ncleo mediante el establecimiento de mdulos de carga, o no, durante el arranque con el comando menuconfig o editando el archivo /boot /config, o usted puede cargar y descargar los mdulos sobre la marcha con el comando modprobe.

19

COMPILACION DEL NUCLEO KERNEL LINUX Los mdulos de terceros y de codigo cerrado estn disponibles en algunas distribuciones, como Ubuntu, y no puede ser instalado de forma predeterminada porque el cdigo fuente de los mdulos no est disponible. Las empresas desarrolladoras de software (es decir, nVidia, ATI, entre otros) no proporcionan el cdigo fuente, sino que construyen sus propios mdulos y compilan sus archivos. Ko archivos para su distribucin. Si bien estos mdulos son libres como en la cerveza, no son libres como en el habla y por lo tanto no estn incluidos en algunas distribuciones, ya los mantenedores siente contaminar el ncleo por el suministro de software no-libre. Un ncleo no es magia, pero es completamente esencial para cualquier equipo que ejecute correctamente. El kernel de Linux es diferente a OS X y Windows, ya que incluye los controladores nivel del ncleo y hace muchas cosas.

COMPILACIN DEL KERNEL


El kernel o ncleo es el corazn del sistema operativo. Es el sistema operativo en s mismo. Todo lo que no sea el kernel se denomina aplicacin, en el caso de Linux, el 95% de las aplicaciones son GNU. El ncleo se encarga de manejar una infinidad de cosas, entre ellas estn: manejo de memoria, perifricos, procesos, paquetes de red, todo el hardware en general, etc. Generalmente, los ncleos que vienen precompilados en las distribuciones ms grandes, se adaptan a la mayora de las instalaciones, pero existen casos en los cuales se hace necesario compilar e instalar un ncleo nuevo. Las razones pueden ser variadas, pero la mayora de las veces es porque se necesita una versin ms moderna del ncleo (con problemas solucionados) o se instala un nuevo hardware que no est contemplado en el ncleo de la distribucin que estamos utilizando en este momento. De dnde podemos bajar el ncleo de GNU/Linux? Ud. podr obtener el kernel de Linux ingresando a www.kernel.org. Una vez que ingrese al sitio Ud. ver una gran variedad de versiones para descargar. La que le recomendamos que baje es: "The latest stable versin of the Linux kernel is: (versin) (fecha) F V VI Changelog" Si desea descargar la versin completa debe clickear en "F" (full) Los otros son parches, que sirven para aplicar las ltimas modificaciones sobre la versin anterior de las fuentes si ya las habas descargado. Para descargar el cdigo fuente tambin podra usar el siguiente comando: # wget ftp://ftp.kernel.org/pub/linux/kernel/v2.4/linux- 2.4.20.tar.gz La ltima versin (a la fecha, nov/2003) de Kernel es 2.4.21, veamos que significa cada nmero:

20

COMPILACION DEL NUCLEO KERNEL LINUX

El primer nmero de los que van separados por puntos corresponde a la versin del kernel, actualmente es la 2 y vara con muy poca frecuencia (la primera fue la 0 en 1991). La segunda cifra corresponde al patchlevel, actualmente es la 4 y vara cada dos o tres aos aproximadamente en las cifras pares: un "patchlevel" impar indica una versin del kernel "beta" o en pruebas, que hace de paso intermedio para que los desarrolladores puedan probar nuevos componentes para la siguiente versin par. Las versiones impares normalmente no estn pensadas para usuarios normales, y solo deberan usarse si la versin estable actual no contiene controlador (controlador (driver) para un dispositivo especfico y no ha encontrado ningn controlador (driver) por separado salvo en el kernel "beta". Por ltimo la tercera cifra, indica el subnivel (sublevel), que actualmente es el 21, vara cada pocos meses y normalmente consiste en pequeas correcciones de fallos que tenga la versin inicial del "patchlevel" correspondiente. En las versiones estables los cambios son ms lentos porque slo se corrigen pequeos fallos y crecen en proporcin logartmica. Recin liberada una versin estable hay ms fallos que encontrar. En las versiones beta este nmero vara rpidamente, porque normalmente se van aadiendo nuevos controladores (drivers) adems de ir corrigiendo fallos. Por ejemplo actualmente el kernel estable va por el 21 (2.4.21) mientras que el beta, que se cre ms tarde, ya va por la 2.6.0- test1. Marco Antonio de Hoyos Pg 1 http://tecnicoslinux.com.ar GNU/Linux Compilacin del KERNEL

Qu es la compilacin?
La compilacin es el proceso que se le aplica a los archivos de texto que escribi un programador (con una sintxis especfica llamada "lenguaje de programacin") para que los mismos se conviertan en archivos "binarios" (formato que entiende la computadora). Los comandos que se usan durante la compilacin son los siguientes: COMANDO make Sintxis: make [opciones] [seccion-Makefile] Este comando se utiliza para compilar, linkeditar e instalar un programa que requiera de la compilacin de varias fuentes (archivos .c). Generalmente, un programa medianamente grande, se integra de una biblioteca de funciones propias y varias fuentes. El make conoce en qu orden de secuencia debe compilar todas estas fuentes y dnde debe instalarlos para que el usuario utilice el programa recin compilado y cmo debe relacionarlos entre s para que puedan ejecutarse en el orden especificado.

21

COMPILACION DEL NUCLEO KERNEL LINUX

COMANDO Sintxis: gcc [opciones] <archivo.c> Este comando compila y linkedita los programas. Opciones: "-I": directorio que utilizar para buscar los archivos .h (headers) "-L": directorio donde buscar las bibliotecas para linkeditar "-l": nombre de la biblioteca a utilizar (sin las primeras 3 letras "lib")

CMO COMPILAR EL KERNEL?


Antes de configurar el kernel anote en un papel la siguiente informacin: Tipo de procesador que posee Si posee arquitectura PCI El tipo de controlador IDE de su sistema, si es que ste tiene uno. El tipo de controlador SCSI de su sistema, si lo posee. El tipo de interfaz que utilice el CD El tipo de tarjeta de red de su sistema. Saber el nmero de fabricacin y modelo del chipset de la tarjeta de red. Los nmeros de fabricacin, de modelo y de chip de la tarjeta de sonido. Una buena forma de obtener toda esta informacin es escribir en la consola el siguiente comando: dmesg, el mismo nos mostrar todo lo que detect el kernel en la mquina. No olviden anotar toda la informacin del hardware. La necesitarn luego. Con el comando lspci

22

COMPILACION DEL NUCLEO KERNEL LINUX

Pasos a seguir
Vaya al directorio de las fuentes. # cd /usr/src/linux Puede iniciar con la configuracin por defecto. # make defconfig Interfaz basada en ncurses (recomendada): # make menuconfig Intefaz basada en GTK: # make gconfig Intefaz basada en QT: # make xconfig. Interfaz basada bajo ncursis Forma de usuarla: Use las flechas para navegar. Estando sobre una opcin presione Y para incluirla dentro del kernel, N para excluirla o M para que sea un mdulo. Las opciones marcadas con [*] sern includas en el kernel, las marcadas con <M> sern compiladas como mdulos y las vacas no sern compiladas. Presione ? para mostrar la ayuda de la opcin iluminada. Presione ESC para bajar una rama o para salir si est en el men raz. Al salir le preguntar si quiere guardar los cambios. Configuraciones bsicas Para que aparezcan las opciones de tipo experimental: Code maturity level options ---> [*] Prompt for development and/or incomplete code/ Para que cuando conecte un dispositivo externo el mdulo se cargue por s slo: Loadable module support ---> [*] Enable loadable module support [*] Module unloading [*] Forced module unloading [*] Automatic kernel module loading

23

COMPILACION DEL NUCLEO KERNEL LINUX

Seleccione la familia del procesador: Processor type and features ---> Processor family (Pentium-4/Celeron(P4-based)/PentiumSi tiene un procesador Intel con capacidad HyperThreading (HT), o bien, con dos o ms procesadores, debe activar: Processor type and features ---> [*] Symmetric multi-processing support Si tiene particiones formateadas en Ext2 y Ext3: File systems ---> <*> Second extended fs support [*] Ext2 extended attributes <*> Ext3 journalling file system support [*] Ext3 extended attributes Para que los administradores de archivos muestren los cambios sin necesidad de refrescar: File systems ---> [*] Inotify file change notification support [*] Inotify support for userspace Pseudo filesystems ---> --- /proc file system support [*] /proc/kcore support [*] Virtual memory file system support (former shm fs) Para pertenecer a una red: Networking ---> [*] Networking support Networking options ---> <*> Packet socket [*] Packet socket: mmapped IO <*> Unix domain sockets [*] TCP/IP networking [*] Network packet filtering (replaces ipchains) ---> Core Netfilter Configuration ---> <*> Netfilter Xtables support (required for ip_tables) <*> "limit" match support

24

COMPILACION DEL NUCLEO KERNEL LINUX

<*> <*> IP: <*> <*> <*> <*>

"mac" address match support "state" match support Netfilter Configuration ---> Connection tracking (required for masq/NAT) FTP protocol support IP tables support (required for filtering/masq/NAT) Packet filtering

Dispositivos de almacenamiento Muy recomendado:

Device Drivers ---> Block devices ---> <*> Normal floppy disk support <*> Loopback device support <*> RAM disk support [*] Initial RAM filesystem and RAM disk (initramfs/<*> Packet writing on CD/DVD media
Unidades ATA Discos por cinta IDE (maestro, esclavo) chipset Intel:

Device Drivers ---> ATA/ATAPI/MFM/RLL support ---> <*> ATA/ATAPI/MFM/RLL support <*> Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support <*> Include IDE/ATA-2 DISK support <*> Include IDE/ATAPI CDROM support <*> Include IDE/ATAPI FLOPPY support <*> generic/default IDE chipset support [*] PCI IDE chipset support [*] Sharing PCI IDE interrupts support <*> Generic PCI IDE Chipset Support [*] Generic PCI bus-master DMA support [*] Use PCI DMA by default when available <*> Intel PIIXn chipsets support Unidades SATA Ejemplo soporte SATA para Intel (kernel 2.6.20): Device Drivers ---> Serial ATA (prod) and Parallel ATA (experimental) <*> ATA device support <*> Intel PIIX/ICH SATA support

25

COMPILACION DEL NUCLEO KERNEL LINUX

Soporte SCSI Algo indispensable para el montaje de los dispositivos de almacenamiento que conecte va USB (por ejemplo una memoria USB) y para los quemadores de CD y DVD es el soporte SCSI: Device Drivers ---> SCSI device support ---> [*] legacy /proc/scsi/ support <*> SCSI disk support <*> SCSI CDROM support <*> SCSI generic support Dispositivos USB Si el equipo tiene puertos USB para conectar teclado, ratn, impresora, etc.: Device Drivers ---> USB support ---> <*> Support for Host-side USB [*] USB device filesystem <M> EHCI HCD (USB 2.0) support [*] Full speed ISO transactions (EXPERIMENTAL) [*] Root Hub Transaction Translators (EXPERIMENTAL) <M> OHCI HCD support <M> UHCI HCD (most Intel and VIA) support <M> USB Printer support <*> USB Mass Storage support <M> USB Human Interface Device (full HID) support [*] HID input layer support Tarjeta de red Marque el controlador de su tarjeta de red almbrica. Ejemplo para la tarjeta Davicom: Device Drivers ---> Network device support ---> [*] Network device support Ethernet (10 or 100Mbit) ---> Tulip family network device support ---> [*] "Tulip" family network device support <*> Davicom DM910x/DM980x support

26

COMPILACION DEL NUCLEO KERNEL LINUX

Tarjeta de red inalmbrica Ejemplo para Intel PRO/Wireless 2200BG: Networking ---> --- Networking support <M> Generic IEEE 802.11 Networking Stack <M> IEEE 802.11 WEP encryption (802.1x) <M> IEEE 802.11i CCMP support <M> IEEE 802.11i TKIP encryption Device Drivers ---> Network device support ---> [*] Network device support Wireless LAN (non-hamradio) ---> [*] Wireless LAN drivers (non-hamradio) & Wireless Extensions <M> Intel PRO/Wireless 2200BG and 2915ABG Network Connection [*] Enable promiscuous mode [*] Enable QoS support Cryptographic options ---> --- Cryptographic API <M> Cryptographic algorithm manager <M> SHA1 digest algorithm <M> SHA256 digest algorithm <M> ECB support <M> CBC support <M> AES cipher algorithms <M> AES cipher algorithms (i586) <M> ARC4 cipher algorithm <M> Michael MIC keyed digest algorithm Tarjeta de video Ejemplo para una tarjeta ATI Radeon: Device Drivers ---> Character devices ---> <*> /dev/agpgart (AGP Support) <M> ATI chipset support <*> Direct Rendering Manager (XFree86 4.1.0 and <M> ATI Radeon [*] HPET - High Precision Event Timer [*] Allow mmap of HPET <*> Hangcheck timer

27

COMPILACION DEL NUCLEO KERNEL LINUX

Tarjeta de audio Ejemplo para una tarjeta C-Media bajo ALSA: Device Drivers ---> Sound ---> <*> Sound card support Advanced Linux Sound Architecture ---> <M> Advanced Linux Sound Architecture <M> Sequencer support <M> OSS Mixer API <M> OSS PCM (digital audio) API [*] OSS PCM (digital audio) API - Include plugin system [*] OSS Sequencer API <M> RTC Timer support [*] Use RTC as default sequencer timer [*] Support old ALSA API PCI devices ---> <M> C-Media 8738, 8338 Open Sound System ---> < > Open Sound System (DEPRECATED) Guardar la configuracin Revise la configuracin que ha elaborado. Guarde los cambios hechos. Puede respaldar el archivo .config Compilar en Debian Puede solicitar que se eliminen las compilaciones hechas con anterioridad con: # make-kpkg clean Para crear un kernel sin initrd: # fakeroot make-kpkg \ --revision=personal.1.0 kernel_image Para crear un kernel con initrd: # fakeroot make-kpkg --initrd \ --revision=personal.1.0 kernel_image Y tome un caf en lo que su equipo compila. Como compilar el kernel Linux p. 32/43 Instalar el kernel en Debian Despus de la compilacin, tendr el archivo .deb en /usr/src. Para instalar: # cd /usr/src # dpkg -i linux-image-2.6.18_personal.1.0_i386.deb Este comando har por usted todos estos pasos: Instalar en /boot el nuevo kernel junto con el initrd si fue solicitado. Copiar los mdulos al directorio /lib/modules/version-del-kernel

28

COMPILACION DEL NUCLEO KERNEL LINUX

Agregar la opcin para seleccionarlo en el gestor de arranque Grub o Lilo. Como compilar el kernel Linux p. 33/43 Compilar en Gentoo En Gentoo Linux se hace la compilacin al estilo tradicional. Puede hacer una limpia con el comando: # make clean Para compilarlo simplemente ejecute: # make Tome un descanso en lo que su equipo compila. Como compilar el kernel Linux p. 34/43 Instalar el kernel en Gentoo Monte la particin /boot y copie el kernel a la misma. # mount /boot # cp arch/i386/boot/bzImage /boot/kernel-2.6.20-r8 Una buena sugerencia es hacer una copia de la configuracin. # cp .config /boot/config-2.6.20-r8 Como compilar el kernel Linux p. 35/43 Instalar los mdulos Instale los mdulos compilados: # make modules_install Si desea que se carguen siempre algunos mdulos en el arranque: # nano -w /etc/modules.autoload.d/kernel-2.6 # update-modules Como compilar el kernel Linux p. 36/43 Modificar GRUB Modifique el gestor de arranque: # nano -w /boot/grub/menu.lst Ejemplo: title Mi kernel Linux personalizado 2.6.20-r8 root (hd0,0) kernel /kernel-2.6.20-r8 root=/dev/hda3 Como compilar el kernel Linux p. 37/43 Primer arranque Para probar su nuevo kernel, reinicie y seleccinelo en su gestor de arranque. La probabilidad de que funcione perfectamente al primer arranque es poca. Si falla, tendr que revisar de nuevo la configuracin y volver a compilar, instalar y probar. Haga una bsqueda en internet, puede que

29

COMPILACION DEL NUCLEO KERNEL LINUX

encuentre la solucin a su problema. Como compilar el kernel Linux p. 38/43 Revisin Si el arranque es satisfactorio, no deje de revisar: La bitcora con dmesg | more, busque mensajes de error. Que se hayan cargado los mdulos que necesite con el comando lsmod. Revise que funcionen correctamente los principales dispositivos (video, red, audio, teclado, ratn). Pruebe los dispositivos que no estn siempre conectados al equipo, como memorias USB. Como compilar el kernel Linux p. 39/43 Eliminar un kernel anterior Ejemplo para remover un kernel en Debian: # dpkg -r linux-image-2.6.17 Ejemplo para remover un kernel en Gentoo: # mount /boot # rm /boot/kernel-2.6.17-r4 # nano -w /boot/grub/menu.lst # rm -fr /lib/modules/2.6.17-gentoo-r4 Como compilar el kernel Linux p. 40/43 Remover las fuentes Las fuentes del kernel consumen mucho espacio: El directorio /usr/src/linux-2.6.20-gentoo-r8 me consume 364 MB. Despus del comando make clean el espacio ocupado descendi a 282 MB. Para eliminar las fuentes de kernel no usado (ejemplo): rm -rf /usr/src/linux-2.6.17-gentoo-r4 Como compilar el kernel Linux p. 41/43 Conclusiones Compilar su propio kernel puede llegar a ser una de las cosas ms fantsticas que haga con GNU/Linux. O una de las ms frustrantes. Los kernels ms recientes soportan ms hardware, tienen ms bugs reparados y mejor desempeo. Una de las bondades del Software Libre es que usted puede ESTUDIARLO y MODIFICARLO.

30

COMPILACION DEL NUCLEO KERNEL LINUX

Compilacin kernel Ubuntu


En este ejemplo de compilacin de kernel vamos a compilar el kernel o ncleo de Ubuntu que es una distribucin de deban y que esta esta basada en Linux Ubuntu es un sistema operativo mas conocida dentro su distribucin (Debian). Distribuciones Debian: Ubuntu. Kubuntu. Linus minti. Otros.

Distribuciones Red Hat: Fedora. Opensuse. Mandriva. Otros.

Como dijimos que trabajaremos en Ubuntu especficamente lo haremos en Ubuntu 12.04 LTS Que es una versin ya estable y que segn la informacin de la pgina oficial la versin 12.04 tendr soporte hasta el 2017 as que es una versin muy recomendada. Lo primero que haremos ser descargar el kernel de Linux de la pgina oficial www.kernel.org

31

COMPILACION DEL NUCLEO KERNEL LINUX Una vez que ya tenemos el paquete abrimos la consola y ejecutamos el siguiente comando:

Con esto tendremos actualizados las fuentes de descarga de lo repositorios de Ubuntu en este caso. Para el siguiente paso necesitaremos el compilador de gcc para lo cual descargamos ejecutando el siguiente comando.

32

COMPILACION DEL NUCLEO KERNEL LINUX Tambin necesitamos la librera libncurses5-dev para la configuracin de menuconfig que veremos ms adelante para configuracin de dispositivos.

Una vez que ya tenemos todo lo necesario para la compilacin del kernel veremos la versin del kernel que tenemos en nuestro sistema.

33

COMPILACION DEL NUCLEO KERNEL LINUX Cambiamos de directorio a /usr/src/ donde descargamos el ncleo kernel Linuxversion.tar.gz Que en nuestro caso es Linux-3.9.4.tar.gz

Ahora debemos descomprimir el kernel con el siguiente comando tar zxvf archivo

34

COMPILACION DEL NUCLEO KERNEL LINUX

Vemos la siguiente imagen si todo sali bien.

Una vez descomprimido cambiamos de directorio dentro de kernel:

35

COMPILACION DEL NUCLEO KERNEL LINUX

Podemos obviar este paso si descargamos y es la primera vez que lo compilamos de lo contrario es necesario limpiar la fuente de kernel para evitar errores.

36

COMPILACION DEL NUCLEO KERNEL LINUX Ahora configuramos todo lo necesario ejecutando el siguiente comando

Ejecutamos el comando make menuconfig para usar la interfaz de configuracin de dispositivos

37

COMPILACION DEL NUCLEO KERNEL LINUX Aqu vemos la interfaz de configuracin.

Guardamos todas las configuraciones realizadas y llegaremos a ver la siguiente imagen

38

COMPILACION DEL NUCLEO KERNEL LINUX Con el comando make-kpkg clean borramos todas las compilaciones anteriores que se realizado en caso que es la primera vez no es necesario ejecutar el comando.

Con este comando compilamos es equivalente a make

39

COMPILACION DEL NUCLEO KERNEL LINUX Y comienza la compilacin esta tarea podra tardar de unos minutos a unas cuantas horas dependiendo del procesador de nuestro sistema.

40

COMPILACION DEL NUCLEO KERNEL LINUX

41

COMPILACION DEL NUCLEO KERNEL LINUX Una vez terminada la compilacin veremos esta imagen que como podemos ver ya se termin con la compilacin lo que nos queda hacer es cambiar de directorio de /usr/src/Linux-3.9.4/ a /usr/src/ haciendo cd ../

En dicho directorio encontraremos dos archivos nuevos con extensiones .deb Linux-image-3.9.4_3.9.4-10.00.Custom_i386.deb (en nuestro caso).

La cuan instalamos con el siguiente comando que vemos en la imagen.

42

COMPILACION DEL NUCLEO KERNEL LINUX Como podemos ver se ejucata sin ningn problema

El segundo archivo que vemos es el siguiente: Linux-headers-3.9.4_3.9.4-10.00.Custom_i386.deb (en nuestro caso).

La cual instalaremos con el siguiente comando:

43

COMPILACION DEL NUCLEO KERNEL LINUX

Ahora para hacer uso de nuestro nuevo kernel reiniciamos el sistema con el comando

44

COMPILACION DEL NUCLEO KERNEL LINUX

Como podemos ver la versin 3.9.4 ya tenemos la versin ms reciente que descargamos.

45

You might also like