compilar nucleo y modulos

13
Compilando el núcleo Academia Almi COMPILANDO EL NUCLEO 1. INTRODUCCION El kernel o núcleo de linux se podría definir como el corazón de este sistema operativo. Es el encargado de que el software y el hardware del ordenador puedan trabajar juntos. Las funciones más importantes del kernel son: - Administración de la memoria, para todos los programas en ejecución. - Administración del tiempo de procesador, que estos programas en ejecución utilizan. - Es el encargado de que podamos acceder a los periféricos/elementos de nuestro ordenador de una manera comoda. Otra cosa a tener en cuenta es que existen dos versiones del kernel: - 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. - 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, etc. Estos núcleos suelen ser inestables y no se deberian usar. Pero como saber que version es? Muy facil, por los numeros: (Teniendo en cuenta este orden: XX.YY.ZZ) - XX: Indica la serie principal del núcleo. Hasta el momento solo existen la 1 y 2. Este numero cambia cuando la manera de funcionamiento del núcleo ha sufrido un cambio muy importante. Pagina 1 de 13

Upload: feli-tos

Post on 15-Jul-2016

3 views

Category:

Documents


0 download

DESCRIPTION

Apuntes

TRANSCRIPT

Page 1: Compilar Nucleo y Modulos

Compilando el núcleo Academia Almi

COMPILANDO EL NUCLEO

1. INTRODUCCION

El kernel o núcleo de linux se podría definir como el corazón de este sistema operativo. Es el encargado de que el softwarey el hardware del ordenador puedan trabajar juntos.

Las funciones más importantes del kernel son:

- Administración de la memoria, para todos los programas en ejecución.- Administración del tiempo de procesador, que estos programas en ejecución utilizan.- Es el encargado de que podamos acceder a los periféricos/elementos de nuestro ordenador de una manera comoda.

Otra cosa a tener en cuenta es que existen dos versiones del kernel:

- 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.- 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, etc. Estos núcleos suelen ser inestables y no se deberian usar.

Pero como saber que version es? Muy facil, por los numeros: (Teniendo en cuenta este orden: XX.YY.ZZ)

- XX: Indica la serie principal del núcleo. Hasta el momento solo existen la 1 y 2. Este numero cambia cuando la manera de funcionamiento del núcleo ha sufrido un cambio muy importante.- YY: 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: Indica nuevas versiones dentro de una versión, en las que lo unico que se ha modificado, son fallos de programación.

2. BAJARSE EL NUCLEO

El núcleo se puede bajar de un gran número de servidores en internet. El servidor principal es http://www.kernel.org/ y la página de servidores espejos es http://www.kernel.org/mirrors/.

Para bajar el kernel 2.6.4. Tenemos dos opciones:

- http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.4.tar.gz --> 41MB- http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.4.tar.bz2 --> 33MB

En ambos casos lo guardaremos en /usr/src.

Para descomprimirlos lo haremos de la siguiente manera.

Pagina 1 de 9

Page 2: Compilar Nucleo y Modulos

Compilando el núcleo Academia Almi

Para el 1ero -> tar xvfz linux-2.6.4.tar.gzPara el 2o -> bzcat linux-2.6.4.tar.bz2 | tar xv

Ahora ya tendremos la carpeta linux-2.6.4. debemos realizar un enlace simbolico (linux -> linux-2.6.4). (ln -s linux-2.6.4 linux).

3. CONFIGURACION.

Aqui basicamente configuraremos los controladores para nuestro PC y algunas opciones del kernel.

Mirar exhaustivamente todos los componentes del PC y tenerlos identificados.

Para empezar la configuracion hay 2 opciones:- make config- make menuconfig (en consola mediante ncurses)- make xconfig (mediante las X)

Para la segunda necesitaras tener instalado las libncurses5-dev; para la tercera, necesitas tener las X corriendo y la librería libqt4-dev.Otras dependencias como gcc,g++,make, build-essential, kernel-package, …

NOTA: Recomiendo que para los mas novatos, utiliceis el make defconfig, os configurara el kernel con las opciones por defecto. Luego lanzais un make menuconfig o xconfig y configurais los controladores necesarios para vuestros componentes.Las opciones del nuevo kernel se guardan en .config

Se pueden crear dos tipos de configuración:

-"Built-In": Todo compilado directamente en el kernel. El kernel es más grande. Esta opción es perfecta para máquinas en lasque se necesite un seguridad máxima, ya que al no cargar módulos externos es difícil que te cuelen un módulo troyano.Esto sin embargo sólo es útil en servidores, enrutadores y ese tipo de máquinas.

-Modular: Un buen montón de "drivers" y funciones del kernel se compilan aparte como módulos. Estos se cargan cada vez que se necesiten y si no se quedan tranquilitos y sin molestar, liberando memoria cuando se descargan. El kernel es más pequeño y si metemos por ejemplo hardware nuevo no hará falta recompilar si el módulo existe ya.

Algunas opciones en general:

-Code Maturity Level Options-

Activa el código de desarrollo del kernel. Puedes usarlo sin peligro y activa algunas opciones interesantes.

-Loadble Module Support-

Activa el soporte para módulos. Di (Y) a todas las opciones.

Pagina 2 de 9

Page 3: Compilar Nucleo y Modulos

Compilando el núcleo Academia Almi

-Processor Type and Features-

Esta opción es la más importante, si no eliges correctamente tu CPU el kernel ni siquiera se molestará en arrancar. Por si las moscas puedes usar la opción 386 que funciona siempre.

-General Setup-

*Support for paging of anonymous memory (swap): Soporte para SWAP. (Y)*System V IPC: Sistema de comunicacion entre procesos. (Y)*BSD Process Accounting: guarda p.ej., el código de error cuando los procesos terminan. (N)*Sysctl support: permite a los programas modificar ciertas opciones del núcleo sin tener que recompilar el núcleo o reniciar el sistema. (Y)*Support for hot-pluggable devices: Te permite conectar dispositivos mientras el ordenador esta encendido sin necesidad de reiniciar. (Y)*Kernel .config support: Activa todos los contenidos del archivo .config del kernel. (N)*Remove kernel features (for embedded systems): Permite borrar ciertas opciones base del kernel (N)

-Power Management Options-

Aqui puedes dar soporte a las opciones especiales de encendido y apagado de tu placa base.(ej: Suspender sistema)

-Bus Options-

Aqui puedes activar opciones como el soporte PCI, soporte para ISA, hot-plug para PCI...

-Executable Files-

*Kernel support for ELF binaries: Es un formato utilizado por librerias y ejecutables de distintas plataformas y sistemas operativos. (Y)*Kernel support for a.out and ECOFF binaries: Solo utilizado en las primeras versiones de UNIX.Util si quieres utilizar programas de esa "epoca" (N)*Kernel support for MISC binaries: Util si ejecutas programas que necesiten un interprete como python, java... o si quieres ejecutar algun .EXE con emuladores.

-Device Drivers-

Aqui has de escojer todos los controladores necesarios para tu hardware. -Filesystems-

*Second extended fs support: Este es el sistema de archivos de Linux (Y) *Ext3 journalling file system support: Es como el sistema ext2 pero mucho mas robusta ante cortes de luz o apagado brusco del equipo. (Y)

Pagina 3 de 9

Page 4: Compilar Nucleo y Modulos

Compilando el núcleo Academia Almi

*Kernel Automounter version 4 Support: Permite el automontado de sistemas de ficheros. (Y) *ISO9660 CDROM Filesystem support: Para montar los sistemas de ficheros de los CDRoms. (Y) *Microsoft Joliet CDROM extensions: Para quemar los CDRoms en formato windows. (Y) *UDF file system support: Para los nuevos sistemas de ficheros de algunos DVDs y CDRoms. (Y) *DOS/FAT/NT Filesystems: Aqui tienes que activar el soporte para montar tus particiones de windows. */proc file system support: Te da informacion a tiempo real del estado de tu sistema.(Y) *NFS file system support: Permite montar ficheros de otro sistema UNIX en tu red local. (Y) *NFS server support: Permite compartir ficheros con otras maquinas que soporten NFS. (Y) *SMB file system support: Permite montar los recursos compartidos de una maquina windows. (Y)

-Profiling support-

*Profiling support: Sirve para identificar cuellos de botella o aumentar los límites de rendimiento del sistema. (Y) *OProfile system profiling: Complementa al anterior. (Y)

-Kernel hacking-

*Kernel debugging: Permite detectar los problemas del kernel. Util si desarrollas drivers. (N) *Sleep-inside-spinlock checking: *Compile the kernel with frame pointers: Te da mas informacion a la hora de debuggear el kernel. (N)

-Security Options-

*Enable different security models: Te permite escojer diferentes modulos de seguridad. (N)

-Cryptographic options-

*Cryptographic API: Da soporte al Cryptographic API.

Pagina 4 de 9

Page 5: Compilar Nucleo y Modulos

Compilando el núcleo Academia Almi

4. COMPILANDO.

Los comandos necesarios para compilar el kernel.

-make cleanEsto borrara todos los archivos ".o". Esto normalmente se utiliza después de una compilación fallida.

-make depEste comando sólo se utiliza para kernels de serie inferior a la 2.6.x, así que aquí olvidaros(construye dependencias).

-make bzImageEsto nos compilará el Kernel. En caso de error te pondrá algo parecido a ***[make] Error 1 (o otro número).Sino te sale eso, ya tienes tu kernel compilado.

-make modulesCon esto compilaras los modulos que escojiste en la configuración. Si alguno te da error es que no se puede compilar como modulo. En ese caso, vuelves a lanzar un make menuconfig o xconfig y lo cambias. Luego vuelves a repetir estos pasos.

-make modules_installComo se puede deducir esto te instalara los modulos.

5. CONFIGURANDO EL ARRANQUE. Primero de todo copiaremos nuestro kernel (el bzImage) en la carpeta /boot.

# cp ./arch/i386/boot/bzImage /boot/bzImage-2.6.4

Ahora copiaremos el System.map

# cp System.map /boot/System.map-2.6.4

Ahora ya lo tenemos todo preparado, solo falta configurar el gestor de arranque:

(estos pasos no a veces no hara falta realizarlos ya que ahora lo suele hacer el modules install , de todas formas nos fijamos en /boot aver si tenemos el kernel y el sytem.map copiados, y si no lo hacemos a mano.

Otra forma de compilar el nucleo seria:makemake installmake modules_installupdate-initramfs –c –k 2.6.versionupdate-grub (añade el kernel automaticamente al grub)

Pagina 5 de 9

Page 6: Compilar Nucleo y Modulos

Compilando el núcleo Academia Almi

LILO

Para los que tengan lilo, teneis que modificar el /etc/lilo.conf y añadir:

image=/boot/bzImage-2.6.4label="Linux-2.6.4"root=/dev/hda1 #Tu partición

Ahora ejecutamos lilo:# lilo

GRUB

Edita /boot/grub/menu.lst y añade:

title Linux 2.6.4root (hd0,0) #Cambiar segun tu paticionkernel /boot/bzImage-2.6.4 root=/dev/hda1 #Cambiar segun tu paticionsavedefaultboot

GRUB2

Ejecutar startupmanager y el nuevo kernel lo añadirá a la slista de arranque

Initial ramdisk

Es un sistema de ficheros temporal usado en el proceso de arranque podemos construir dos modelos distintos initrd o initramfs, ambos pueden ser usados sin ningún problema.Una imagen de Initrd.img simplemente es una imagen de los modulos del nuevo kernel, por eso lo hacemos en "/lib/modules/2.6.x.x" porque alli estan los modulos

mkinitrd -o nombre_imagen version_kernel

por ej:mkinitrd -o /boot/initrd.img-2.6.30 /lib/modules/2.6.30mkinitrd -o /boot/initrd.img-2.6.30 2.6.30

también podemos usar

initramfs –k –o initrd.img-2.6.30 2.6.30initramfs –k –o initramfs-2.6.30 2.6.30

Pero si no queres hacerlo y ya pusiste como parte del kernel los fs tambien deberías poner como parte del kernel ( y no como modulo) el soporte para discos ide (si usas ide) o scsi( en el caso de que tu controladora sea scsi) y evitamos el initrd

Pagina 6 de 9

Page 7: Compilar Nucleo y Modulos

Compilando el núcleo Academia Almi

Módulos del kernel

El kernel de Linux tiene un diseño modular. En el momento del arranque, tan sólo se carga un mínimo de kernel residente en la memoria. En lo sucesivo, siempre que un usuario solicite una característica que no esté presente en el kernel residente, se cargará un módulo de kernel de forma dinámica en su memoria. Tras un periodo específico de inactividad, el módulo será borrado de la memoria.

El mecanismo que soporta la carga dinámica de módulos es un thread de kernel llamado kmod. No se cargan los módulos a menos que éstos sean necesarios. Cuando un kernel solicita un módulo, el módulo se carga junto a todas sus dependencias de módulo.

Red Hat Linux también incluye una tarea cron que elimina todos los módulos que no se han usado cada diez minutos. La tarea cron está ubicada en el fichero /etc/cron.d/kmod.

Al instalar Red Hat Linux, el hardware de su sistema se somete a un chequeo y usted aporta información sobre la forma en que se usará el sistema y qué programas deberían cargarse. En base a este chequeo y a su información, el programa de instalación decide qué módulos necesita para cargarse al arrancar el sistema. El programa de instalación configura el mecanismo de carga dinámica para trabajar de forma transparente. Si construye su propio kernel personalizado, puede tomar todas estas decisiones por sí mismo.

Si añade hardware nuevo tras la instalación y éste requiere un módulo de kernel, es necesario que configure el mecanismo de carga dinámico. Kudzu detecta habitualmente hardware nuevo. También puede añadir este controlador modificando el fichero de configuración del módulo, /etc/modules.conf.

Por ejemplo, si su sitema incluía un modelo de adaptador de red SMC EtherPower 10 PCI en el momento de la instalación, el fichero de configuración del módulo contará con la siguiente línea:

alias eth0 modelo

Tras la instalación, si instala un segundo adaptador de red en su sistema, deberá añadir la siguiente línea a /etc/modules.conf:

alias eth1 modelo

Consulte el Manual oficial de referencia de Red Hat Linux para una lista alfabética de módulos de kernel y hardware soportado por los módulos.

Pagina 7 de 9

Page 8: Compilar Nucleo y Modulos

Compilando el núcleo Academia Almi

Utilidades del módulo del kernel

Puede utilizar un grupo de comandos para listar, cargar o descargar los módulos del kernel. Estos comandos son útiles si quiere probar módulo diferentes o ver si un módulo se ha cargado con éxito.

El comando /sbin/lsmod visualiza una lista de módulos cargados en la actualidad.

Ejemplo 24-1. Example lsmod output

Module Size Used bysr_mod 15264 0 (autoclean)mga 95984 1agpgart 23392 3nfs 79008 1 (autoclean)lockd 52464 1 (autoclean) [nfs]sunrpc 61328 1 (autoclean) [nfs lockd]autofs 11264 4 (autoclean)3c59x 25344 1 (autoclean)ipchains 38976 0 (unused)ide-scsi 8352 0scsi_mod 95104 2 [sr_mod ide-scsi]ide-cd 26848 0cdrom 27232 0 [sr_mod ide-cd]usb-uhci 20720 0 (unused)usbcore 49664 1 [usb-uhci]

lsmod muestra el tamaño, el recuento de usos y los módulos de referencia para cada módulo cargado en la actualidad.

Para cargar un módulo de un kernel, puede utilizar el comando /sbin/insmod seguido del nombre del módulo del kernel. insmod intentará cargar el módulo desde los subdirectorios /lib/modules/<kernel-version>/kernel/drivers, por defecto. Existe un subdirectorio para cada tipo de módulo, como por ejemplo el subdirectorio net para los controladores de la interfaz de red. Algunos módulos de kernel poseen dependencias del módulo (otros módulos deben cargarse para poder cargar). Para resolver estas dependencias, puede cargar las dependencias del módulo y a continuación cargar el módulo que desea o podría usar el comando /sbin/modprobe seguido del nombre del módulo para cargar el módulo con sus dependencias.

Por ejemplo, el comando

/sbin/modprobe tulip

carga el módulo de interfaz de red tulip.

Para descargar los módulos del kernel, utilice el comando /sbin/rmmod seguido del nombre del módulo. La utilidad rmmod tan sólo descargará los módulos que no están en uso y que no son una dependencia de los otros módulos en uso.

Pagina 8 de 9

Page 9: Compilar Nucleo y Modulos

Compilando el núcleo Academia Almi

Por ejemplo, el comando

/sbin/rmmod tulip

descarga el módulo de la interfaz de red tulip.

Otra utilidad del módulo del kernel válida es modinfo. Puede usar el comando /sbin/modinfo para visualizar información sobre un módulo del kernel. La sintaxis general es:

/sbin/modinfo [options] <module>

Las opciones incluyen -d que muestra un descripción breve del módulo y -p que lista los parámetros que soporta el módulo. Para ver una lista completa de opciones, remítase a la página del manual de modinfo (man modinfo).

Ficheros de configuracion:/etc/modprobe.conf establece opciones para los modulos/lib/modules/2.x.x/modules.dep generado por depmod, establece dependencias entre modulos/etc/modules listado de modulos que se cargan al arrancar

Pagina 9 de 9