Professional Documents
Culture Documents
DE SISTEMAS
INTEGRANTES: Fernandez Villcaes Vicente Flores Acevedo Milver F. Rojas Vallejos Bladimir GRUPO: 1 CARRERA: ING. SISTEMAS
CBBA - BOLIVIA
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.
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.
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:
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.
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.
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.
10
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.
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
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.
12
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
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
Drivers de dispositivos
16
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
18
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.
20
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
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")
22
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
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
"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
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
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
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
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
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
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
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
35
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
37
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.
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
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).
42
COMPILACION DEL NUCLEO KERNEL LINUX Como podemos ver se ejucata sin ningn problema
43
Ahora para hacer uso de nuestro nuevo kernel reiniciamos el sistema con el comando
44
Como podemos ver la versin 3.9.4 ya tenemos la versin ms reciente que descargamos.
45