descargar - La web de Sistemas Operativos (SOPA)

Anuncio
COMPILAR EL NÚCLEO
COMPETENCIAS



Aprender a compilar el núcleo
Utilizar el comando Make
Comprender los tipos de compilación
PRERREQUISITOS

Teoría
Estudio de las distintas opciones de configuración.

Prácticas laboratorio
1) Obtener la última versión del núcleo y
descomprimirlo.
2) Crear el fichero de configuración.
3) Compilar e instalar el nuevo núcleo.
4) Configurar el arranque y muestre una captura de
pantalla con el menú del cargador con la opción del
nuevo núcleo.
DOCUMENTACIÓN
HORAS
ESTIMADAS
README que vienen con los fuentes de Linux
Maxwell cap 2
Notas del profesor
2 Horas
Contenidos
A. Uso de las órdenes:
make config
make menuconfig
make xconfig
make
make modules_install
make install
make clear
make mrproper
B. Archivos:
.config
vmlinuz
initramfs
System.map
/grub/grub.conf
1
Tareas.









Realice una copia del núcleo original antes de modificar y o recompilar
Generar un fichero de configuración .config con alguna utilidad.
Compile el núcleo como un núcleo monolítico, con módulos cargables.
Configure el cargador del núcleo para que permita seleccionar un núcleo
particular, uno de los cuales será la copia original del núcleo.
Presente una memoria explicando los pasos realizados:
1) Obtener la última versión del núcleo y descomprimirlo.
2) Crear el fichero de configuración.
3) Compilar e instalar el nuevo núcleo.
4) Configurar el arranque y muestre una captura de pantalla con el menú
del cargador con la opción del nuevo núcleo.
2
NOTAS DEL PROFESOR
1. Traer los fuentes de Linux
Antes que nada por seguridad hay que realizar una copia del núcleo (backup)
cp /boot/vmlinuz /boot/vmlinuz.old
cp /boot/initrd /boot/initrd.old
cp /boot/System.map /boot/System.map.old
Para compilar una nueva versión de Linux necesitamos tener los nuevos
fuentes, esto lo podemos conseguir de www.kernel.org; o de algún servidor
espejo situado en España, como la rediris.
Con los fuentes viene un fichero README , que no hay que dejar de leer,
con todas las instrucciones para compilar esta versión del núcleo. Como
resumen de un fichero README de una versión anterior del núcleo, se han
generado estas notas, ¡puede que hayan cambios!.
Colocamos los fuentes en un directorio que tengamos permisos, usualmente:
/usr/src/linux-xxx
Si hay que descomprimirlo
gzip –cd Linux-2.6.xx.tar.gz | tar xvf –
o
bzip2 –dc Linux-2.6.xx.tar.bz2 | tar xvf –
donde xx es la versión del núcleo
Antes de compilar el núcleo debemos configurarlo, o mejor dicho crear un
fichero .config con la configuración que deseamos para esa compilación.
2. Configurar y modificar características del núcleo
Hay que situarse en el directorio donde hemos colocado los fuentes del núcleo,
por ejemplo /usr/src/linux
existen varias utilidades para configurar el núcleo



make config
make menuconfig
make xconfig
3


make gconfig
make oldconfig
difieren en la forma de presentación, pero todas permiten modificar los mismos
parámetros modificando el fichero .config del núcleo,





parámetros
parámetros
parámetros
parámetros
otros
generales del núcleo
relativos a la memoria virtual
del sistema de red
del sistema de fichero
make config
la utilidad mas sencilla
la mas fea en presentación, por lo que no se usa
requiere contestar con un carácter
y – respuesta afirmativa para incluir esa característica
n – respuesta negativa para no incluir esa característica
m – compilar como un modulo
Ctrl+C elimina todos las respuesta y comienza de nuevo
? - para mostrar un menú de ayuda
make menuconfig
aplicación basada en un terminal de consola, utiliza Ncurses para simular un
entorno de ventana, nos movemos por las opciones mediante los cursores.
make xconfig
requiere un terminal x windows (Qt)
es agradable por su forma gráfica
utiliza un menú con ventanas
make gconfig
requiere un terminal x Windows (Gtk)
es agradable por su forma gráfica
utiliza un menú con ventanas
make oldconfigconfig
Basa todas las cuestiones por defecto tomando la última configuración existente
del fichero .config
4
Configurar y modificar características del núcleo dinámicamente
Linux permite configurar y cambiar ciertas características del núcleo
dinámicamente, esto es, sin recompilar e iniciar el núcleo, mediante:



utilidades
llamada al sistema sysctl
sistema de archivos virtual /proc
Hay que tener privilegios de root
Llamada al sistema sysctl (kernel/sysctl.c)
Esta llamada al sistema es muy potente y permite configurar mediante
programa, dinámicamente ciertos parámetros del sistema.
Sistema de archivos /proc/sys
Todos los parámetros que son cambiables, son accesibles en forma de un
archivo en el directorio /proc/sys, ejemplo
/proc/sys/kernel/hostname:nombre de la máquina
los parámetros son leídos al leer en el correspondiente fichero
los parámetros son cambiados al escribir en el correspondiente fichero
muchos usuarios pueden leer pero solo el root puede escribir
Opciones de compilación
Las opciones de compilación permiten indicar múltiples parámetros del núcleo
que se compilará. Se deben seleccionar adecuadamente para el sistemas
computador especifico donde vamos a ejecutar el núcleo.
Tenemos que tener un conocimiento exhaustivo de todo el hardware de la
máquina.
Elegir y marcar aquellas características que se ajusten a nuestro hardware, y
desmarcar y no incluir los driver de hardware que no tenemos en nuestra
máquina, para que el núcleo sea optimo.
A continuación se explican los grupos principales de opciones que nos podemos
encontrar en las distintas aplicaciones de configuración, antes vistas.
Code Maturity Level Options (Opciones obsoletas y experimentales del
ćodigo)
Esta opción permite configurar controladores obsoletos o software experimental
en fase de pruebas. Si su objetivo es usar el nuevo núcleo para un sistema
estable de producción entonces será mejor desactivar esta opción. Si necesita
una característica experimental del núcleo como, por ejemplo, un controlador
para hardware nuevo, active esta opción, pero tenga en cuenta que “puede que
5
no alcance los niveles estándar de fiabilidad” con los que contaría un software
que haya sido probado rigurosamente.
General Setup (Configuración general)
Esta sección contiene las opciones de soporte para sysctl, que es una
característica que permite la configuración del núcleo en tiempo de ejecución.
El nuevo soporte del núcleo para el archivo ".config" permite ver toda la
configuración del núcleo en tiempo de ejecución. Esto permite ver qué
características se compilaron en el núcleo.
Para la compilación del núcleo 2.6.33.2 en el sistema operativo CentOS es
necesario activar la siguiente opción:
General setup --> enable deprecated sysfs features to support old userspace tools
No activarla tiene como consecuencia un kernel panic en la ejecución del
kernel.
Loadable Module Support (Soporte para módulos)
Seguramente querrá activar un soporte para los módulos. Si necesita instalar
módulos de terceros, también deberá activar la opción "Set Version Information
on All Module Symbols".
Processor Type and Features (Tipo y propiedades del procesador)
Esta es, posiblemente, la opción de configuración más importante. Debemos
examinar "/proc/cpuinfo" para obtener el procesador que estamos usando en
nuestra máquina y, así, seleccionar apropiadamente las opciones de este menú.
Aquí encontramos la opción "Preemptive Kernel", que puede mejorar el tiempo
de respuesta de los escritorios. También aparece "Multi-processing Support"
para máquinas con varias CPUs, y "High Memory Support" para máquinas con
más de 1 GB de memoria RAM.
Power Management Options (Opciones de gestión de energía)
Aquí encontramos opciones para ACPI y el escalado de la frecuencia de la CPU,
que pueden optimizar considerablemente el uso de energía y, por tanto, alargar
el tiempo de uso cuando utilizamos baterías. Para más información, consulte el
archivo "Documentation/power".
Bus Options (PCI, PCMCIA, EISA, MCA, ISA) (Opciones de bus)
Aquí encuentra opciones para todos los dispositivos de bus del sistema. En las
máquinas modernas, generalmente puede desactivarse el soporte para ISA y
MCA.
Executable File Formats (Formatos ejecutables de fichero)
Entre las opciones que se incluyen aquí, resulta interesante el soporte del
núcleo para que este sea compatible con diferentes formatos binarios de
archivo, que permite el uso de binarios no nativos de Linux con un poco de
ayuda.
6
Device Drivers (Controladores de dispositivos)
En este menú aparecen organizadas claramente todas las opciones de
configuración de controladores que anteriormente estaban diseminadas por los
menús de la versión 2.4 del núcleo. Aquí configuramos características como el
soporte para SCSI, la optimización de tarjetas gráficas, el sonido, el USB y otros
dispositivos hardware.
File Systems (Sistemas de archivos)
Aquí encontramos opciones para los sistemas de archivos que el núcleo
soporta, como EXT2 y ReiserFS. Es mejor incluir soporte para el sistema de
archivos raíz directamente en el núcleo en lugar de como módulo.
Security Options (Opciones de seguridad)
Entre las opciones que se incluyen aquí, resulta interesante el soporte para
"NSA Security Enhanced Linux" y otras características un tanto experimentales
para incrementar la seguridad.
Ejemplo de configuración
A modo de ejemplo hemos entrado en las opciones de la familia del procesador
(Proccesor family) y hemos seleccionado el procesador de nuestra máquina:
Pentium-4.
Ilustración : Selección del procesador (Opciones de Compilación)
7
3. COMPILAR EL NÚCLEO
Es un trabajo mas fácil que configurar el núcleo, existen varias formas, veamos
algunas de ellas.
realizar antes una copia del núcleo (backup)
cp /boot/vmlinuz /boot/vmlinuz.old
Aviso. Cuando pasamos a una nueva versión del núcleo hay que comprobar si
también tenemos que actualizar paquetes de software que tengamos
instalados. Para el compilador gcc hay que tener una versión 2.95.3 o superior.
Cuando compilamos hay que tener privilegios de root, todos los ficheros que se
generan en la compilación se sitúan por defecto en el directorio donde
compilamos. Podemos utilizar el directorio de los fuentes del núcleo
/usr/src/linux, o por seguridad podemos utilizar otro directorio para situar
los ficheros de salida de la compilación con la opción O=output/dir.
Nos situaremos en el directorio donde se encuentran los fuentes del núcleo
/usr/src/linux..
Existe un fichero makefile para el compilador C, que permite generar un
núcleo de forma automática.
Si no es la primera vez que compilamos o por seguridad borraremos todos los
ficheros .o generados en la compilación y quitaremos las dependencias con el
comando
make mrproper
y seguidamente realizaremos la siguiente secuencia de ordenes (es aconsejable
no usar como salida de la compilación el directorio donde están los fuentes
pues ficheros cabecera con el mismo nombre pueden machacarse) supongamos
que compilamos y queremos dejar la salida en el directorio
/home/name/build/kernel)( incluido el .config).
tendremos los fuentes en /usr/src/linux2.6.xxx
y la salida de la compilación en:
/home/name/build/kernel
Nos situamos en el directorio de los fuentes y allí realizamos:
make O=/home/name/build/kernel menuconfig
8
Esta orden, o otra análoga de las explicadas en la configuración, nos genera un
fichero .config con la configuración para la compilación.
make O=/home/name/build/kernel
Esta orden realiza la compilación propiamente dicha partiendo del fichero
.config y de todos los ficheros fuentes, tarda un poco o un mucho, y genera
una imagen del núcleo comprimido. Se puede hacer la alternativa make install
para actualizar el fichero de configuración de LILO, si no hay que actualizar el
fichero de configuración de LILO o de GRUB si estamos utilizando este último
cargador.
sudo make O=/home/name/build/kernel modules_install install
Esta orden nos compila con las opciones para poder manejar módulos en el
núcleo.
despues de la compilación, el núcleo comprimido bzImage se encuentra en el
directorio /usr/src/linux/arch/i386/boot
Copiamos la imagen del núcleo y el mapa que acabamos de compilar al
directoriode arranque “/boot/”. Para ello ejecutamos:
cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.11.10
cp System.map /boot/System.map-2.6.11.10
mkinitrd -f /boot/initrd-2.6.11.10.img 2.6.11.10
Con el commando mkinitrd se crea una imagen en un disco virtual RAM (situado
en “/dev/ram0” generalmente) para precargar los módulos.
realizar un reboot y ejecutar el nuevo núcleo. Previamente habremos
actualizado el menú de arranque de nuestro cargador GRUB o LILO para
introducir una nueva línea con nuestro nuevo núcleo.
¡ Diviertase con el nuevo núcleo! FIN
Pasos para anteriores versiones del núcleo:
make zImage
9
se puede crear una imagen del núcleo comprimida, para evitar mensajes de
“núcleo muy grande”, con el comando
make bzImage
los ficheros objetos que se generan el la compilación del núcleo se pueden
borrar mediante
make modules
Si hay funciones del núcleo que se realizan con módulos, hay que compilarlas
make modules_install
instala
las
funciones
/lib/modules/<versión>





de
los
módulos
en
el
directorio
make dep
make clean
make bzImage
make modules
make modules_install
se pueden introducir los comandos en una sola línea y make los compila
secuencialmente si no hay errores.

make dep clean bzImage modules modules_install
despues de la compilación, el núcleo comprimido bzImage se encuentra en el
directorio /usr/src/linux/arch/i386/boot
hay que copiarlo a /boot
cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz
realizar un reboot y ejecutar el nuevo núcleo, o lanzar el cargador lilo

lilo
El comando make bzlilo realiza los siguientes pasos de forma automática




cp /boot/vmlinuz /boot/vmlinuz.old
cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz
lilo
cp /usr/src/linux/System.map /boot/System.map
System.map contiene símbolos del núcleo para que los módulos puedan
interactuar con las funciones del núcleo.
10
Como ejemplo resumen, ejecutar la orden
make dep clean bzlilo boot modules modules_install
Miscelaneos
Cuando escriba nuevo código del núcleo mantenga el formato y estilo según el
fichero Documentation/CodingStile en el directorio de los fuentes del núcleo
esto es: 8 caracteres de sangría; la llave abierta “{“, con el estilo de K&R, va en
la misma línea que el if, else, for wile switch o do.
Genere un fichero diffs o patch con los cambios efectuados con el comando
diff.
Supongamos el núcleo original en el directorio linux-2.2.5
Supongamos el núcleo modificado con los cambios en linux-prueba
la secuencia de comandos es esta.
ln –s linux-prueba linux
make –C linux-2.2.5 distclean
make –C linux distclean
dif –urN linux-2.2.5 linux > nuevo.patch
el fichero nuevo.patch contiene los cambios para otros usuarios aplicar el
match.
11
Descargar