Publicado el 23 de Abril del 2018
473 visualizaciones desde el 23 de Abril del 2018
120,1 KB
28 paginas
Creado hace 19a (03/07/2006)
Unidad II – El Núcleo o Kernel
Obtención del código fuente
Configuración del kernel
Compilación del código fuente
Arranque del nuevo kernel
Análisis del código fuente
Llamadas al sistema
Módulo del kernel
Aplicando parches
Obtención del código fuente
Introducción
Hay muchas formas diferentes de obtener el código fuente, a continuación se
numeran algunas de ellas. Aunque lo más sencillo sea instalar el código fuente
que viene con su distribución de Linux, se requiere mantenerse al día con las
últimas versiones del código si se desea participar en el desarrollo del kernel.
Formas de obtener el código fuente
• Descargar el código del kernel mediante ftp a ftp.kernel.org. Se trata de una
operación que consume un gran ancho de banda, así que no debe usarse si
se tiene una conexión lenta.
Conectarse mediante ftp al mirror local, que se llamará:
ftp.<C&OACUTE;DIGO país del>.kernel.org
ejemplo,
Por
$ ftp ftp.es.kernel.org
en el
caso de España,
sería:
Conectarse, si es necesario, con el nombre de usuario "ftp" o "anonymous".
Cambiar de directorio a pub/linux/kernel/v2.4 y descargar el último kernel. Por
ejemplo, si la última versión es la 2.4.26, descargar el archivo llamado linux-
2.4.26.tar.gz
Formas de obtener el código fuente
Normalmente hay un archivo llamado LATEST-IS-<version> que indica cual es
la última versión. Se recomienda el archivo comprimido con gzip (el archivo que
tiene la extensión ".gz"), en lugar del comprimido con bzip2 (el que tiene la
extensión ".bz"), ya que bzip2 tarda bastante tiempo en descomprimir.
Descomprimir y extraer el archivo en el directorio en el que se tenga pensado
trabajar. AVISO: El código fuente del kernel se desempaquetará en un
directorio denominado "linux". Si ya tiene un directorio creado con ese nombre,
o un enlace simbólico denominado linux, se sobreescribirá lo que haya en ese
lo siguiente:
directorio,
que siempre se debe hacer
así
$
rm
linux
(Asumiendo que
linux era un enlace simbólico)
$
$
$
tar
mv
ln
-s
xzf
linux
linux-<version>
linux-<version>.tar.gz
linux-<version>
linux
Ahora ya se dispone del código fuente del kernel de Linux.
•
Instalar el código fuente del kernel que viene con los CDs de tu distribución.
Si ya se tiene creado un directorio denominado /usr/src/linux y contiene más
de un subdirectorio, entonces ya se tiene el código fuente instalado. En
caso de que no sea así, continúa leyendo.
Montar el CDROM de instalación. En un sistema basado en RedHat, el RPM
fuente está normalmente en /RPMS/ y se llama kernel-source-..rpm
Una forma de encontrar el paquete del código fuente del kernel es ejecutar
este comando, suponiendo que el CD est&eacuta; montado en /mnt/cdrom:
find
rpm
$
$
La opción "v" indicará si falla la operación o no.
/mnt/cdrom
-iv
*kernel-*
<pathname>/kernel-source-<version>.<arch>.rpm
-name
Hay otras formas diferentes de obtener el código fuente del kernel, usando
CVS o rsync.
Una razón para preferir usar el código original en vez del modificado por algún
distribuidor, es en el caso de que se vaya a crear y enviar parches con
modificaciones a otros desarrolladores del kernel. Si se crea un parche y se envía
a la lista de distribución del kernel para su inclusión en el código del mismo, debe
haber sido creado respecto a la última versión limpia del kernel. Si se crea un
parche para el código fuente de una distribución, es probable que no se pueda
aplicar a el kernel original. El punto clave para usar el código fuente de un
distribuidor es cuando estamos trabajando con arquitecturas distintas a x86. El
código limpio del kernel que se puede descargar casi nunca compila y arranca en
otras arquitecturas que no sean la mencionada x86. A menudo, la mejor forma de
conseguir un kernel que pueda funcionar para una arquitectura de este tipo es el
código fuente de la distribución en particular. Cada plataforma suele tener alguna
forma de añadir el último código fuente al código que ha recibido con tu
distribución.
Arrancando el nuevo kernel con LILO en un X86
El archivo de configuración de LILO está en /etc/lilo.conf. La idea básica es que
copie allí el trozo del archivo de configuración referido al arranque del nuevo
kernel, y que a continuación cambie allí el nombre del archivo en que está el
kernel que desea arrancar. Recuerde que está copiando la información sobre el
kernel actual y modificando la copia, NO el original. Por ejemplo, suponga que se
tiene en /etc/lilo.conf algo parecido a esto:
image=/boot/vmlinuz-2.2.14-5.0
label=linux
initrd=/boot/initrd-2.2.14-5.0.img
read-only
root=/dev/sda1
El campo "image" le dice a LILO dónde encontrar el archivo que contiene el nuevo
kernel. El campo "label" es lo que escribe en el prompt de LILO para arrancar con
ese kernel. Es una buena idea usar como label un nombre corto y sencillo de
teclear. El campo "initrd" es opcional y especifica el ramdisc a cargar en memoria
antes de montar el sistema de archivos raíz. El campo "read-only" dice que
inicialmente hay que montar el sistema de archivos raíz como solo lectura, en
contraposición a permitir lectura y escritura. El campo "root" le indica a LILO qué
dispositivo
raíz.
Deberá copiar esta información y cambiar los campos siguientes:
contiene
sistema
ficheros
el
de
image=<fichero
label=<elegir aquí el nombre que quiera>
con
el
kernel
nuevo>
Eliminar el campo "initrd" en el caso de que exista:
initrd=/boot/initrd-2.2.14-5.0.img
Escriba la etiqueta (label) que haya elegido lo que hayas escrito en el
campo "label") para el nuevo kernel. LILO intentará entonces arrancar
con ese kernel. Para evitar tener que escribir una línea de comandos en
LILO, ejecute esto justo antes de reiniciar:
# lilo -v -R "<LILO command line>"
Esto le indica a LILO que use esa línea de comandos la siguiente vez que reinicie.
A continuación, eliminará esa línea de comandos y volverá a su comportamiento
habitual las siguientes veces que se reinicie. Esto es algo realmente útil con los
nuevos kernel, ya que puede rearrancar, ver que no funciona, reiniciar la máquina
y cargar automáticamente tu kernel original sin necesidad de escribir nada. Si
tienes problemas con LILO, Intenta consultar el LILO mini-HOWTO.
La razón para eliminar el campo "initrd" es que el archivo initrd no
contiene nada que sea útil para el nuevo kernel. En una distribución
normal de Linux, el fichero initrd contiene un montón de módulos del
kernel que solamente pueden ser cargados por el kernel que viene con la
distribución. Las nuevas líneas que se han añadido al archivo de
configuración deberían ser algo parecido al finalizar:
Image=/boot/mynewkernel
label
read-only
root=/dev/sda1
=
new
LILO no se dará cuenta de los cambios que se hayan efectuado en el archivo
/etc/lilo.conf hasta que ejecutes el comando "lilo". Probablemente harás esto más
de una vez: compilar un nuevo kernel, copiarlo a un nuevo destino, olvidarte de
ejecutar LILO y rearrancar el sistema, solo para darte cuenta de que LILO no sabe
absolutamente nada del nuevo kernel. Por eso, cuando modifiques el archivo
/etc/lilo.conf, acuerdate siempre de ejecutar LILO:
#lilo -v
El modificador "-v" significa verbose, y quiere decir que lilo vaya indicando todo lo
que va haciendo. A continuación, reinicie el PC, y verá el prompt de LILO.
Arrancando el nuevo kernel con GRUB en un X86
Necesitará ser root para poder editar /etc/grub.conf. La configuración de GRUB
está almacenada en /etc/grub.conf. La idea básica aquí es copiar el trozo de
configuración de arranque de tu kernel actual y cambiar el nombre del kernel a
arrancar. Recuerda, estás copiando la información sobre tu kernel actual y
modificando la copia, NO el original. Por ejemplo, si tienes en tu /etc/grub.conf
esto:
algo
parecido
a
title
root
kernel
initrd /initrd-2.4.9-31.img
Linux
/vmlinuz-2.4.9-31
ro
(2.4.9-31)
(hd0,0)
root=/dev/hda3
El campo "title" es el título en el menú de GRUB que corresponde al nuevo kernel.
El campo "root" le indica a GRUB dónde está el directorio raiz (el directorio raiz es
lo que está montado en "/"). El campo "kernel" le dice a GRUB dónde encontrar el
archivo que contiene el kernel y, a continuación del nombre del archivo, indica
varias opciones para pasarle al kernel al arrancarlo. NOTA: El nombre del archivo
del kernel está dado de forma relativa a la partición de arranque, lo que
normalmente quiere decir que has de eliminar la parte de "/boot"del nombre del
archivo. El campo "initrd" es opcional y especifica el ramdisk inicial que se ha de
cargar antes de montar el sistema de ficheros raíz. Deberá de copiar esta
información y modificar los siguientes campos:
title <poner aquí el nombre que quiera>
kernel <fichero con tu nuevo kernel> ro root=/dev/hda3
Recuerde eliminar casi con toda probabilidad la parte "/boot" del nombre del
archivo, a menos que sepa bien lo que estás haciendo. Elimine el campo
"initrd" si es que existe:
initrd /initrd-2.4.9-31.img
La razón para eliminar el campo "initrd" es que el archivo initrd no contiene nada
que sea útil para nuestro nuevo kernel. En una distribución normal de Linux, el
archivo initrd contiene un montón de módulos del kernel que solamente pueden
ser cargados por el kernel que viene con la distribución. Las nuevas líneas que se
han añadido al archivo de configuración deberían ser algo parecido a esto al
finalizar:
new
(hd0,0)
title
root
kernel /mynewkernel ro root=/dev/hda3
De nuevo, tener en cuenta que en este caso el nuevo kernel está en
"/boot/mynewkernel", pero, puesto que se tiene una partición diferente montada en
/boot, y puesto que GRUB solamente mirará d
Comentarios de: Unidad II – El Núcleo o Kernel (0)
No hay comentarios