Upload
vannhu
View
222
Download
0
Embed Size (px)
Citation preview
Taller de GNU/Linux – El kernel Linux Hoja 1/18
Universidad Nacional de La MatanzaIngeniería en Informática
Taller de GNU/Linux
El kernel LINUX
Kernel
El kernel o núcleo se podría definir como el corazón del sistema operativo. Es el encargado de que el software y el hardware del ordenador puedan trabajar juntos. Las funciones mas importantes del mismo, aunque no las únicas, son:
● Administración de la memoria, para todos los procesos en ejecución. ● Administración del tiempo de procesador. ● Es el encargado de que las aplicaciones puedan acceder a los periféricos y dispositivos de
nuestra computadora de una manera cómoda.
Fig.1:Arquitectura general del Kernel Linux. (Obtenido de “Anatomy of the Linux kernel” por . M. Tim Jones)
Además de administrar los recursos de hardware, el kernel, se encarga de proporcionar métodos normalizados para la utilización de los mismos, permitiendo que las aplicaciones se abstraigan de las diferencias entre distintos tipos de hardware. En las figuras se ilustra este concepto.
Taller de GNU/Linux – El kernel Linux Hoja 2/18
Fig.2: Diagrama conceptual y simplificado de las capas de un sistema operativo GNU/Linux.
Fig.3: Arquitectura general del S.O. GNU/linux. (Obtenido de “Anatomy of the Linux kernel” por . M. Tim Jones). Nacimiento de Linux
Linux hace su aparición a principios de la década de los noventa. Era el año 1991 y por aquel entonces un estudiante de informática de la Universidad de Helsinki (Finlandia), llamado Linus Torvalds empezó a programar para su tesis final un núcleo de sistema operativo. Luego se convirtió en un desarrollo de muchos programadores alrededor del mundo, que gracias a Internet pudieron continuar el proyecto.
Este comienzo estuvo inspirado en Minix, un pequeño sistema Unix desarrollado por el profesor Andrew Tanenbaum con fines educativos y explicado muy bien en su Libro "Sistemas Operativos".
Taller de GNU/Linux – El kernel Linux Hoja 3/18
Las primeras discusiones sobre Linux fueron en el grupo de noticias comp.os.minix, en estas discusiones se hablaba sobre todo del desarrollo de un pequeño sistema Unix para usuarios de Minix que querían más. Disconforme con Minix, Linus comienza el desarrollo de un kernel que pudiera ejecutar en su PC.
Fig.4: Linus Torvalds.
Licencia
El éxito de Linux se debe en parte a que Linus decide liberar su código bajo licencia GPL (creada por el proyecto GNU), lo que lo hace atractivo para otros programadores deseosos de colaborar al proyecto. Esta licencia hizo muy rápido el desarrollo del nuevo kernel y permitió su crecimiento sostenido sin derivar en productos propietarios.
Avances
Linus nunca anunció la versión 0.01 de «Linux» (1991) porque no era ni siquiera ejecutable, solamente incluía los principios del núcleo; estaba escrito en lenguaje ensamblador y asumía que el usuario tenía acceso a un sistema Minix para su compilación. Aprovechó en sus comienzos las características de conmutación de tareas con que contaba el flamante Intel 386.
Mas tarde durante 1991, Linus anunció la primera versión «Oficial» de Linux (versión 0.02). Esta vez, Linus pudo ejecutar Bash (GNU Bourne Again Shell) y gcc (El compilador GNU de C), pero no mucho más funcionaba.
En este estado de desarrollo ni siquiera se pensaba en términos de soporte, documentación, e incluso distribución. Después de la versión 0.03, Linus saltó en la numeración hasta la 0.10. Desde entonces, más y más programadores a través de Internet empezaron a trabajar en el proyecto y, después de sucesivas revisiones, Linus incrementó el número de versión hasta la 0.95 en Marzo de 1992. Más de un año después, en Diciembre de 1993, el núcleo del sistema estaba en la versión 0.99 y la versión 1.0 no llegó hasta marzo de 1994.
Taller de GNU/Linux – El kernel Linux Hoja 4/18
Año Versión del Kernel Linux
1991 0.1
1994 1.0
1995 1.2
1996 2.0
1999 2.2
2001 2.4
2004 2.6
La versión actual (año 2006) estable del núcleo es la 2.6 y sigue avanzando día a día con la meta de perfeccionar, mejorar el sistema y mantenerlo actualizado con los últimos avances de la tecnología informática y el nuevo hardware existente. Los archivos históricos del kernel y sus fechas pueden encontrarse en: http://ftp.cdut.edu.cn/pub2/linux/kernel/history/Master.html
Fig.5: Pequeña historia de las releases más importantes. (Obtenido de “Anatomy of the Linux kernel” por M. Tim Jones).
Linux y el Proyecto GNU
A pesar de ser 95 % similar en características y funcionamiento a un sistema UNIX, el kernel de Linux no usa ni siquiera una línea del UNIX de la empresa AT&T, dueña actual de los derechos de UNIX, ni de ningún otro UNIX comercial. Por esto es que Linus pudo licenciarlo con la licencia GPL.
Taller de GNU/Linux – El kernel Linux Hoja 5/18
Una vez que el núcleo estuvo «usable», los programadores comenzaron a buscar aplicaciones y utilidades para agregar y hacer el sistema más útil, ese es el momento en que entra el proyecto GNU, iniciado en 1984 por la Free Software Foundation (FSF), entidad creada por Richard M. Stallman (o simplemente RMS), con el fin de hacer un sistema operativo libre. Dado que existía ya mucho software en el proyecto GNU, los programadores comenzaron a unir el núcleo Linux con dichas herramientas GNU, conformando lo que hoy conocemos como sistema GNU/Linux (o simplemente Linux, como se suele llamar equivocadamente). De estos aportes provenientes del proyecto GNU, los más importantes y conocidos son: El compilador GNU GCC de lenguaje “C” con el cual se compila el mismo kernel y las aplicaciones; la librería estándar de C del proyecto GNU “glibc” y el intérprete de comando BASH entre otros.
La lista de desarrollo
Los desarrolladores del kernel Linux utilizan para comunicarse una lista de correo electrónico en vger.kernel.org . A través de ésta lista intercambian ideas, correcciones, problemas, etc.
Desarrolladores
Son muchos los desarrolladores que han realizados y realizan contribuciones al kernel de Linux. Algunos juegan un rol principal en el desarrollo y son líderes reconocidos dentro de la comunidad Linux.
A la cabeza del desarrollo esta por supuesto Linus Torvalds, y es él quien, con ayuda de otros, decide que contribuciones se aportan al desarrollo del kernel oficial y cuales no. En casos de conflictos, la decisión final la tiene siempre Linus. No existe ningún impedimento para modificar y cambiar el kernel Linux, sin embargo, solo existe un kernel Linux oficial.
Taller de GNU/Linux – El kernel Linux Hoja 6/18
Además de Linus, otra personalidad importante es Alan Cox, que contribuyó mucho con el soporte para multiprocesadores y es quien recolecta una gran cantidad de nuevos parches para reenviárselos luego a Linus.
Existen por lo menos 290 desarrolladores responsables (Manteiners) listados en la documentación del kernel actual. Un mantainer es un desarrollador que está a la cabeza de algunas de las distintas áreas o subsistemas del kernel de Linux. Además de las contribuciones propias, estos manteiners, reciben contribuciones de otros desarrolladores.
Fig. 6: Alan Cox
Esta estructura de desarrollo con Linus a la cabeza, no está establecida ni definida explícitamente. Simplemente se forma a medida que las personas se conocen a través de la red, se envían parches, reportes de bugs, etc.
Pueden ser varios los motivos por los que un desarrollador decide invertir tiempo y esfuerzo en el desarrollo del kernel de Linux. Algunos pertenecen a empresas a las cuales les interesa aportar al kernel para incorporar o mantener determinada característica. Ejemplos de estos casos son Suse, IBM y RedHat por mencionar algunas. Otros contribuyen, para obtener reputación, para demostrar nuevos conceptos, para impulsar los sistemas Linux, por creencias filosóficas o simplemente por placer.
Fig. 7: Diagrama conceptual de la jerarquía de desarrolladores.
Taller de GNU/Linux – El kernel Linux Hoja 7/18
Versiones del Kernel Linux
Existen dos ramas oficiales del Kernel Linux:
Versión de producción: La versión de producción, es la versión estable hasta el momento. Esta versión es el resultado final de las versiones de desarrollo o experimentales. Cuando el equipo de desarrollo del kernel experimental, decide que ha conseguido un kernel estable y con la suficiente calidad, se lanza una versión de producción o estable. Esta versión es la que se debería utilizar para un uso normal del sistema, ya que son las versiones consideradas mas estables y libres de fallos en el momento de su lanzamiento. Las modificaciones hechas a una versión estable del kernel son solo para corregir errores, fallos de seguridad, etc. Para mantener la cantidad de bugs al mínimo posible no se agregan nuevas capacidades ni se hacen mejoras sustanciales.
Versión de desarrollo: Esta versión es experimental y es la que utilizan los desarrolladores para programar, comprobar y verificar nuevas características, correcciones, agregados, etc. Estos núcleos suelen ser inestables y no se deberían usar sin estar bien consiente de las consecuencias.
Como interpretar los números de las versiones:
Las versiones del kernel se numeran con 3 números, de la siguiente forma: XX.YY.ZZ
XX: Numero Mayor. Indica la serie principal del kernel. Hasta el momento sólo existen la 1 y 2. Este número cambia cuando el código del kernel ha sufrido un cambio muy importante.
YY: Numero Medio. Indica si la versión es de desarrollo o de producción. Un número impar, significa que es de desarrollo, uno par, que es de producción.
ZZ: Numero Menor. Indica una nueva versión del kernel, en las que lo único que se ha modificado, son fallos de programación (bugs), correcciones y cambios menores.
Ejemplos:
ej1: versión del kernel 2.0.0: Kernel de la serie 2, versión de producción 0 (0 par), primera versión. ej2: versión del kernel 2.0.1: Kernel de la serie 2, versión 0, en el que se han corregido errores de programación presentes en la versión 2.0.0 (ZZ=1) ej3: versión del kernel 2.2.17: versión 17 del kernel estable 2.2. ej4: versión del kernel 2.5.3: versión 3 del kernel inestable o de desarrollo 2.5.
Taller de GNU/Linux – El kernel Linux Hoja 8/18
ej5: versión del kernel 2.6.12: versión 12 del kernel estable 2.6.
Kernel monolítico:
El kernel Linux posee muchos módulos que implementan ciertas funcionalidades. Muchos de éstos módulos pueden insertarse o removerse del kernel en forma dinámica (mientras está funcionando ) o pueden incorporarse en forma fija al momento de la compilación. Esto permite probar módulos o quitarlos sin detener el sistema y armar kernels a medida solo con los módulos indispensables para el funcionamiento de un sistema en particular.
A pesar de esto, el kernel de Linux es monolítico y la existencia de estos módulos no debe confundirse con el concepto de microkernel.
Arquitecturas de hardware: Linux se desarrolló originalmente para correr en computadoras tipo PC compatibles con Intel 386 y 486. Sin embargo gracias a la portabilidad del lenguaje C y a la colaboración de muchos desarrolladores, hoy en día también corre en procesadores ARM, DEC Aplha, SUN Sparcs, M68000, MIPS y PowerPC entre otros.
Por esta razón GNU/Linux es el el sistema operativo que más plataformas de hardware soporta.
El código fuente
El código fuente de un kernel Linux como el 2.6.8 utiliza actualmente aproximadamente 218Mbytes para su almacenamiento y 34Mbytes comprimido con tar y bz2. Esto incluye código fuente para todas las arquitecturas soportadas y la documentación.
Los archivos se encuentran organizados en directorios. En un kernel 2.6.8 el primer nivel de directorios es:
Documentation, arch, crypto, drivers, fs, include, init, ipc, kernel, lib, mm, net, scripts, security, sound, usr.
Taller de GNU/Linux – El kernel Linux Hoja 9/18
Cambiando el kernel:
Toda distribución de GNU/Linux viene con por lo menos un kernel ya compilado (imágen) con la que se instala inicialmente. Sin embargo existen varios motivos por el cual podemos desear cambiarlo:
● Para utilizar un kernel optimizado específicamente para nuestro procesador.● Para modificar algunas de las opciones.● Para utilizar un kernel que posea sólo los módulos necesarios.● Para incorporar módulos “no oficiales” a nuestro kernel.● Para utilizar una versión mas nueva del kernel.● Para aprender los pasos involucrados.
A la hora de cambiar el kernel, existen dos grandes opciones:
● Instalar un kernel ya compilado.● Instalar un kernel compilado por uno mismo.
Las distintas distribuciones de GNU/Linux por lo general ofrecen una variedad de kernels ya compilados con diferentes opciones. Estos kernels siguen siendo de propósito general, pero optimizados por ejemplo para algún modelo de procesador. En una distribución como Debian, existen los siguientes kernels ya compilados y listos para instalar:
kernel-image-2.6-amd64-generic - Linux kernel image for version 2.6 on generic x86_64 systemskernel-image-2.6-amd64-k8 - Linux kernel image for version 2.6 on AMD64 systemskernel-image-2.6-amd64-k8-smp - Linux kernel image for version 2.6 on AMD64 SMP systemskernel-image-2.6-em64t-p4 - Linux kernel image for version 2.6 on Intel EM64T systemskernel-image-2.6-em64t-p4-smp - Linux kernel image for version 2.6 on Intel EM64T SMP systemskernel-image-2.6.8-11-amd64-generic - Linux kernel image for version 2.6.8 on generic x86_64 systemskernel-image-2.6.8-11-amd64-k8 - Linux kernel image for version 2.6.8 on AMD64 systemskernel-image-2.6.8-11-amd64-k8-smp - Linux kernel image for version 2.6.8 on AMD64 SMP systemskernel-image-2.6.8-11-em64t-p4 - Linux kernel image for version 2.6.8 on Intel EM64T systemskernel-image-2.6.8-11-em64t-p4-smp - Linux kernel image for version 2.6.8 on Intel EM64T SMP systemskernel-image-2.4.27-speakup-di - Linux kernel binary image for the Debian installerkernel-image-2.4.27-2-386-di - Linux kernel binary image for the Debian installerkernel-image-2.6.8-2-386-di - Linux kernel binary image for the Debian installerkernel-image-netbootable - net-bootable kernel for use with diskless systemskernel-image-2.4-k7-smp - Linux kernel image for version 2.4 on AMD K7 SMPkernel-image-2.4.27-2-k7-smp - Linux kernel image for version 2.4.27 on AMD K7 SMPkernel-image-2.6-k7-smp - Linux kernel image for version 2.6 on AMD K7 SMP.kernel-image-2.6.8-2-k7-smp - Linux kernel image for version 2.6.8 on AMD K7 SMP.kernel-image-2.4-k6 - Linux kernel image for version 2.4 on AMD K6/K6-II/K6-IIIkernel-image-2.4.27-2-k6 - Linux kernel image for version 2.4.27 on AMD K6/K6-II/K6-IIIkernel-image-2.6-386 - Linux kernel image for version 2.6 on 386.kernel-image-2.4-586tsc - Linux kernel image for version 2.4 on Pentium-Classickernel-image-2.4.27-2-586tsc - Linux kernel image for version 2.4.27 on Pentium-Classickernel-image-2.4-686-smp - Linux kernel image for version 2.4 on PPro/Celeron/PII/PIII/P4 SMPkernel-image-2.6-686-smp - Linux kernel image for version 2.6 on PPro/Celeron/PII/PIII/P4 SMP.kernel-image-2.4-k7 - Linux kernel image for version 2.4 on AMD K7kernel-image-2.4-386 - Linux kernel image for version 2.4 on 386kernel-image-2.4.27-2-k7 - Linux kernel image for version 2.4.27 on AMD K7kernel-image-2.6-k7 - Linux kernel image for version 2.6 on AMD K7.
Taller de GNU/Linux – El kernel Linux Hoja 10/18
kernel-image-2.6.8-2-k7 - Linux kernel image for version 2.6.8 on AMD K7.kernel-image-2.6-686 - Linux kernel image for version 2.6 on PPro/Celeron/PII/PIII/P4.kernel-image-2.4-686 - Linux kernel image for version 2.4 on PPro/Celeron/PII/PIII/P4kernel-image-2.4.27-2-386 - Linux kernel image for version 2.4.27 on 386kernel-image-2.4.27-2-686 - Linux kernel image for version 2.4.27 on PPro/Celeron/PII/PIII/P4kernel-image-2.4.27-2-686-smp - Linux kernel image for version 2.4.27 on PPro/Celeron/PII/PIII/P4 SMPkernel-image-2.4.27-speakup - Linux kernel image for version 2.4.27-speakupkernel-image-2.6.8-2-386 - Linux kernel image for version 2.6.8 on 386.kernel-image-2.6.8-2-686 - Linux kernel image for version 2.6.8 on PPro/Celeron/PII/PIII/P4.kernel-image-2.6.8-2-686-smp - Linux kernel image for version 2.6.8 on PPro/Celeron/PII/PIII/P4 SMP.kernel-image-2.4.18 - Linux kernel binary image for version 2.4.18.kernel-image-2.4.20 - Linux kernel binary image for version 2.4.20.
Para utilizar estos kernel ya compilados, simplemente se deben instalar con las herramientas de administración de paquetes propias de cada distribución.
En cambio para cambiar por un kernel compilado por uno mismo, los pasos involucrados son los siguientes:
● Obtener los fuentes del kernel y descomprimirlos (normalmente en /usr/src/).● Aplicar parches o modificaciones al código (Opcional).● Configurar las opciones de compilación.● Compilar el kernel.● Instalarlo en nuestro sistema.● Reiniciar la computadora si se desea probar el nuevo kernel.
Se darán aquí conceptos generales para introducir al lector en los pasos necesarios en la compilación de un kernel Linux, sin pretender ser una guía paso a paso. Consultar la documentación pertinente antes de realizar el proceso de configuración, compilación e instalación del kernel.
Obteniendo el código fuente del kernel
El kernel se puede bajar de un gran número de servidores en Internet. El servidor principal es: http://www.kernel.org. De éste sitio puede bajarse el código fuente del kernel, en formato .tar.gz. (tar y gzip) o tar.bz2 (tar y bzip2). Para utilizar el nuevo kernel bajado, se lo debe descomprimir, compilar e instalar en el sistema.
Las fuentes completas del kernel poseen varios mega bytes y cada nueva versión (número menor) involucra pequeños cambios en relación al código completo. Por este motivo la distribución de las versiones también se realiza con parches incrementales que se aplican a la versión anterior.
Las distribuciones por lo general brindan otra forma de obtener el código fuente del kernel. Esta es
Taller de GNU/Linux – El kernel Linux Hoja 11/18
instalando el paquete correspondiente a los fuentes del kernel que se utilizaron para construir los diferentes kernels incluidos en la distribución.
Por ejemplo en la distribución Debian están disponibles los siguientes paquetes que contienen el código fuente del kernel:
kernel-source-2.4.27 - Linux kernel source for version 2.4.27 with Debian patcheskernel-source-2.6.8 - Linux kernel source for version 2.6.8 with Debian patcheskernel-source-2.2.25 - Linux kernel source for version 2.2.25
En todos los casos, los fuentes del kernel se encontrarán comprimidos por lo que se deberá proceder a su descompresión con el comando “tar”.
Dentro del subdirectorio “Documentation” de los fuentes se podrá encontrar gran cantidad de información relacionada.
Aplicar parches:
Una vez que se dispone de los fuentes del kernel, pueden realizarse modificaciones al mismo aplicando parches “no oficiales” o modificando directamente los archivos fuente.
Configuración del kernel:
Antes de compilar el kernel Linux, se pueden configurar una gran cantidad de opciones. Se puede elegir qué módulos serán incorporados en forma fija, qué módulos podrán insertarse y cuales no.Para esto, el kernel posee un archivo de configuración. Este archivo de configuración puede crearse y editarse en forma manual, pero lo más común es hacerlo a través de una interfase amigable (menú de texto, Qt, GTK). Para configurar el kernel mediante alguna de estas interfaces es necesario alguno de los siguientes comandos:
● "make menuconfig" Text based color menus, radiolists & dialogs. ● "make xconfig" X windows (Qt) based configuration tool. ● "make gconfig" X windows (Gtk) based configuration tool. ● "make oldconfig" Default all questions based on the contents of your existing ./.config file.
Ejecutar “make help” para obtener la lista completa y su explicación.
Para acceder a esta configuración interactiva es necesario tener instalado por lo menos el compilador de
Taller de GNU/Linux – El kernel Linux Hoja 12/18
C, Make y la librería correspondiente a la interface seleccionada.
Fig. 8: Configuración del kernel con la opción “make menuconfig”.
Compilación del kernel:
Una vez configuradas las opciones deseadas se procede a la compilación. Los archivos Makefile permiten automatizar el proceso de compilación. Para compilar el kernel es necesario tener instalados el compilador de C, Make , binutils y otros componentes según se menciona en “Documentation/Changes”.
El kernel se compila simplemente con el comando “make” o “make all”. Si todo es correcto se obtendrá un nuevo kernel compilado junto con sus módulos listos para instalar. Ejecutar “make help” para obtener la lista completa de opciones de compilación y su explicación.
Instalación del kernel:
Taller de GNU/Linux – El kernel Linux Hoja 13/18
El proceso de instalación consiste básicamente en colocar el archivo imagen obtenido (kernel compilado) en el lugar apropiado dentro del sistema de archivos. Además se debe configurar adecuadamente al administrador de arranque (grub, lilo u otro) para que en el próximo arranque se utilice el nuevo kernel. Como mecanismo de seguridad siempre se deja disponible la opción de arrancar con el kernel anterior para estar seguros que el sistema podrá utilizarse en caso que el nuevo kernel no funcione correctamente.
La instalación del kernel puede hacerse con el comando “make install” que realiza automáticamente las acciones mencionadas.
Otras variantes:
Los pasos explicados aquí son generales, sin embargo algunas distribuciones de GNU/Linux poseen mecanismos especiales que facilitan esta labor. Por ejemplo en un sistema Debian GNU/Linux existe la herramienta makekpkg que se utiliza para compilar los fuentes del kernel y crear paquetes Debian (.deb) del kernel, listos para instalar en el sistema. Esto facilita la tarea de administración , instalación de nuevos kernels y su reemplazo.
El arranque:
El administrador de arranque transfiere el hilo de ejecución al kernel, quien comienza entre otras cosas con la detección del hardware del sistema. Durante este proceso de arranque el kernel nos brinda una gran cantidad de información por pantalla. Además esta información puede consultarse con el comando “dmesg” o consultando varios archivos de log en “/var/log” (syslog, kern.log, dmesg y otros ). A modo de ejemplo se muestra el registro de arranque de un kernel Linux:
Linux version 2.6.12.4-djb (root@ugvlinux) (gcc versión 3.3.5 (Debian 1:3.3.5-13)) #1 Tue Feb 7 16:46:05 ART 2006BIOS-provided physical RAM map: BIOS-e820: 0000000000000000 - 000000000009fc00 (usable) BIOS-e820: 000000000009fc00 - 00000000000a0000 (reserved) BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved) BIOS-e820: 0000000000100000 - 000000000fffc000 (usable) BIOS-e820: 000000000fffc000 - 000000000ffff000 (ACPI data) BIOS-e820: 000000000ffff000 - 0000000010000000 (ACPI NVS) BIOS-e820: 00000000fec00000 - 00000000fec01000 (reserved) BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved) BIOS-e820: 00000000ffff0000 - 0000000100000000 (reserved)0MB HIGHMEM available.255MB LOWMEM available.On node 0 totalpages: 65532 DMA zone: 4096 pages, LIFO batch:1 Normal zone: 61436 pages, LIFO batch:31
Taller de GNU/Linux – El kernel Linux Hoja 14/18
HighMem zone: 0 pages, LIFO batch:1DMI 2.3 present.Allocating PCI resources starting at 10000000 (gap: 10000000:eec00000)Built 1 zonelistsKernel command line: root=/dev/hda2 ro acpi=off Found and enabled local APIC!mapped APIC to ffffd000 (fee00000)Initializing CPU#0PID hash table entries: 1024 (order: 10, 16384 bytes)Detected 1529.732 MHz processor.Using tsc for high-res timesourceConsole: colour VGA+ 80x25Dentry cache hash table entries: 65536 (order: 6, 262144 bytes)Inode-cache hash table entries: 32768 (order: 5, 131072 bytes)Memory: 252412k/262128k available (1559k kernel code, 9092k reserved, 713k data, 168k init, 0k highmem)Checking if this processor honours the WP bit even in supervisor mode... Ok.Calibrating delay loop... 3022.84 BogoMIPS (lpj=1511424)Security Framework v1.0.0 initializedMount-cache hash table entries: 512CPU: After generic identify, caps: 0383fbff c1c3fbff 00000000 00000000 00000000 00000000 00000000CPU: After vendor identify, caps: 0383fbff c1c3fbff 00000000 00000000 00000000 00000000 00000000CPU: L1 I Cache: 64K (64 bytes/line), D cache 64K (64 bytes/line)CPU: L2 Cache: 256K (64 bytes/line)CPU: After all inits, caps: 0383fbff c1c3fbff 00000000 00000020 00000000 00000000 00000000Intel machine check architecture supported.Intel machine check reporting enabled on CPU#0.CPU: AMD Athlon(TM) XP 1800+ stepping 00Enabling fast FPU save and restore... done.Enabling unmasked SIMD FPU exception support... done.Checking 'hlt' instruction... OK.checking if image is initramfs...it isn't (bad gzip magic numbers); looks like an initrdFreeing initrd memory: 3968k freedNET: Registered protocol family 16PCI: PCI BIOS revision 2.10 entry at 0xf19a0, last bus=1PCI: Using configuration type 1mtrr: v2.0 (20020519)ACPI: Subsystem revision 20050309ACPI: Interpreter disabled.Linux Plug and Play Support v0.97 (c) Adam BelayPCI: Probing PCI hardwarePCI: Probing PCI hardware (bus 00)Enabling SiS 96x SMBus.Boot video device is 0000:01:00.0PCI: Using IRQ router SIS [1039/0018] at 0000:00:02.0PCI: IRQ 0 for device 0000:00:02.1 doesn't match PIRQ mask - try pci=usepirqmaskPCI: Found IRQ 10 for device 0000:00:02.1PCI: Sharing IRQ 10 with 0000:00:05.0VFS: Disk quotas dquot_6.5.1Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)Initializing Cryptographic APIisapnp: Scanning for PnP cards...isapnp: No Plug & Play device foundPNP: No PS/2 controller found. Probing ports directly.serio: i8042 AUX port at 0x60,0x64 irq 12serio: i8042 KBD port at 0x60,0x64 irq 1Serial: 8250/16550 driver $Revision: 1.90 $ 48 ports, IRQ sharing enabledttyS0 at I/O 0x3f8 (irq = 4) is a 16550AttyS1 at I/O 0x2f8 (irq = 3) is a 16550Aio scheduler noop registeredio scheduler anticipatory registeredio scheduler deadline registeredio scheduler cfq registeredRAMDISK driver initialized: 16 RAM disks of 8192K size 1024 blocksizeNET: Registered protocol family 2IP: routing cache hash table of 2048 buckets, 16KbytesTCP established hash table entries: 16384 (order: 5, 131072 bytes)TCP bind hash table entries: 16384 (order: 4, 65536 bytes)
Taller de GNU/Linux – El kernel Linux Hoja 15/18
TCP: Hash tables configured (established 16384 bind 16384)RAMDISK: cramfs filesystem found at block 0RAMDISK: Loading 3968KiB [1 disk] into ram disk...|#/#-#\#done.VFS: Mounted root (cramfs filesystem) readonly.input: AT Translated Set 2 keyboard on isa0060/serio0Freeing unused kernel memory: 168k freedNET: Registered protocol family 1SCSI subsystem initializedlibata version 1.11 loaded.Uniform Multi-Platform E-IDE driver Revision: 7.00alpha2ide: Assuming 33MHz system bus speed for PIO modes; override with idebus=xxSIS5513: IDE controller at PCI slot 0000:00:02.5SIS5513: chipset revision 208SIS5513: not 100% native mode: will probe irqs laterSIS5513: SiS745 ATA 100 (2nd gen) controller ide0: BM-DMA at 0xd800-0xd807, BIOS settings: hda:DMA, hdb:pio ide1: BM-DMA at 0xd808-0xd80f, BIOS settings: hdc:DMA, hdd:DMAProbing IDE interface ide0...hda: ST320014A, ATA DISK driveide0 at 0x1f0-0x1f7,0x3f6 on irq 14Probing IDE interface ide1...hdc: HL-DT-ST RW/DVD GCC-4320B, ATAPI CD/DVD-ROM drivehdd: QUANTUM BIGFOOT2100A, ATA DISK driveide1 at 0x170-0x177,0x376 on irq 15Probing IDE interface ide2...Probing IDE interface ide3...Probing IDE interface ide4...Probing IDE interface ide5...hda: max request size: 128KiBhda: 39102336 sectors (20020 MB) w/2048KiB Cache, CHS=38792/16/63, UDMA(100)hda: cache flushes supported hda: hda1 hda2 hda3hdd: max request size: 128KiBhdd: 4127760 sectors (2113 MB) w/87KiB Cache, CHS=4095/16/63, DMAhdd: cache flushes not supported hdd: hdd1 hdd2EXT3-fs: mounted filesystem with ordered data mode.kjournald starting. Commit interval 5 secondsAdding 248996k swap on /dev/hda3. Priority:-1 extents:1EXT3 FS on hda2, internal journalGeneric RTC Driver v1.07apm: BIOS version 1.2 Flags 0x03 (Driver version 1.16ac)device-mapper: 4.4.0-ioctl (2005-01-12) initialised: [email protected] agpgart interface v0.101 (c) Dave Jonesagpgart: Detected SiS 745 chipsetagpgart: AGP aperture is 64M @ 0xe8000000usbcore: registered new driver usbfsusbcore: registered new driver hubohci_hcd: 2004 Nov 08 USB 1.1 'Open' Host Controller (OHCI) Driver (PCI)PCI: Found IRQ 9 for device 0000:00:02.2ohci_hcd 0000:00:02.2: Silicon Integrated Systems [SiS] USB 1.0 Controllerohci_hcd 0000:00:02.2: new USB bus registered, assigned bus number 1ohci_hcd 0000:00:02.2: irq 9, io mem 0xe6800000hub 1-0:1.0: USB hub foundhub 1-0:1.0: 3 ports detectedPCI: Found IRQ 9 for device 0000:00:02.3ohci_hcd 0000:00:02.3: Silicon Integrated Systems [SiS] USB 1.0 Controller (#2)ohci_hcd 0000:00:02.3: new USB bus registered, assigned bus number 2ohci_hcd 0000:00:02.3: irq 9, io mem 0xe6000000hub 2-0:1.0: USB hub foundhub 2-0:1.0: 3 ports detectedusb 1-2: new full speed USB device using ohci_hcd and address 2Initializing USB Mass Storage driver...scsi0 : SCSI emulation for USB Mass Storage devicesusbcore: registered new driver usb-storageUSB Mass Storage support registered.PCI: Found IRQ 10 for device 0000:00:05.0PCI: Sharing IRQ 10 with 0000:00:02.18139too Fast Ethernet driver 0.9.27
Taller de GNU/Linux – El kernel Linux Hoja 16/18
PCI: Found IRQ 5 for device 0000:00:0a.0eth0: RealTek RTL8139 at 0xa800, 00:e0:7d:e3:74:1f, IRQ 5eth0: Identified 8139 chip type 'RTL-8100B/8139D'hdc: ATAPI 40X DVD-ROM CD-R/RW drive, 2048kB Cache, UDMA(33)Uniform CD-ROM driver Revision: 3.20eth0: link downinput: GenPS/2 Genius Wheel Mouse on isa0060/serio1mice: PS/2 mouse device common for all miceAttached scsi generic sg0 at scsi0, channel 0, id 0, lun 0, type 0NET: Registered protocol family 10Disabled Privacy Extensions on device c030ae60(lo)IPv6 over IPv4 tunneling drivereth0: no IPv6 routers present
Los módulos
Los módulos son pequeñas porciones de código compilado que pueden insertarse y removerse del kernel durante su ejecución. Estas porciones de código implementan una funcionalidad específica del kernel. Al momento de configurar el kernel podemos elegir algunas características generales acerca de los módulos:
● Habilitar la posibilidad de cargar módulos durante la ejecución del kernel: Nos permitirá insertar módulos dentro del kernel en ejecución actual.
● Posibilidad de descargar módulos. Nos permitirá remover módulos.● Carga automática de módulos. El kernel podrá cargar automáticamente los módulos que
considere necesarios a medida que los necesite.
Luego, para cada una de estas funcionalidades implementadas como módulos podremos optar entre las siguientes opciones:
● La funcionalidad no estará incluida ni podrá cargarse posteriormente como módulo. Esto ahorra recursos al no incluir características innecesarias y mejora la seguridad del sistema ya que es imposible cargar esa funcionalidad en el kernel.
● La funcionalidad estará incluida en el kernel sin necesidad de cargarlo explícitamente como módulo. No podrá removerse la funcionalidad.
● La funcionalidad estará disponible como módulo. En caso de ser necesario se podrá insertar el módulo en cuestión. También podrá removerse.
Taller de GNU/Linux – El kernel Linux Hoja 17/18
Fig. 9: Configuración del soporte para carga de módulos.
Las herramientas mas comunes para manejar módulos del kernel son:
● modprobe: Inserta y remueve módulos del kernel.● lsmod: Lista los módulos cargados.● modinfo: Brinda información sobre cada módulo.● insmod : Inserta módulos● rmmod: Remueve módulos.
Por ejemplo para obtener información sobre el módulo “msdos”: # modinfo msdosfilename: /lib/modules/2.6.12.4-djb/kernel/fs/msdos/msdos.kolicense: GPLauthor: Werner Almesbergerdescription: MS-DOS filesystem supportvermagic: 2.6.12.4-djb preempt K7 gcc-3.3depends: fat
Para insertar el módulo: # modprobe msdos
Y para remover el modulo: # modprobe -r msdos
Taller de GNU/Linux – El kernel Linux Hoja 18/18
Logo
El logo o mascota asociada al kernel Linux y en general al sistema operativo GNU/Linux es el pingüino llamado Tux creado por Larry Ewing. Los logos pueden obtenerse de la página http://www.isc.tamu.edu/~lewing/linux/
Se puede encontrar la historia del porqué de esta mascota en la siguiente dirección: http://www.sjbaker.org/tux
Fig. 10: Tux creado por Larry Ewing.
Lecturas complementarias
Un artículo muy interesante sobre el kernel Linux: “Anatomy of the Linux kernel”, History and architectural decomposition. M. Tim Jones.http://www.ibm.com/developerworks/linux/library/llinuxkernel/
Para conocer a fondo y agregar dispositivos al kernel: “Linux Device Drivers”. Por Jonathan Corbet, Alessandro Rubini y Greg KroahHartman.http://lwn.net/Kernel/LDD3/ o http://www.xml.com/ldd/chapter/book/
Copyright © 2007 Diego J. Brengi [email protected] Está permitida la copia textual y distribución de este artículo en su totalidad por cualquier medio, siempre y cuando esta nota se preserve.
Archivo original en formato OpenOffice. Se agradecerán los aportes, correcciones y comentarios. Creado: 2002 por DJB (Primer borrador) Modificado: Septiembre 2007 por DJB.