Instalación y Configuración del Kernel Realizado por Kepa Bengoetxea.
-
Upload
rafael-junco -
Category
Documents
-
view
111 -
download
0
Transcript of Instalación y Configuración del Kernel Realizado por Kepa Bengoetxea.
Instalación y Configuración del Kernel
Realizado por Kepa Bengoetxea
Referencias
Compilar Ubuntu:
https://help.ubuntu.com/community/Kernel/Compile
Construir un nuevo kernel:
http://www.digitalhermit.com/linux/Kernel-Build-HOWTO.html
Leer kernel-COMO:
http://www.ubuntu-es.org/node/431
http://www.ubuntulinux.org/wiki/KernelHowto
Instalar Kernel/Núcleo
A)Instalar desde un Kernel Precompilado
B)Instalar desde las Fuentes del Kernel configurando (personalizando) y compilando.
Núcleos Precompilados.Modo gráfico
Por defecto, Ubuntu GNU/Linux viene con un núcleo estándar compilado para i386 ó genérico para los x86/x86_64 .Para ver si tenemos instalado el adecuado o si podemos actualizar a uno nuevo, podemos seguir los siguientes pasos:
menú Sistema de GNOME, abrimos Administración e iniciamos el Gestor de Paquetes Synaptic.
Una vez dentro de Synaptic, si disponemos de conexión a Internet, pulsamos en Recargar para obtener los últimos paquetes.
Núcleos Precompilados.Modo gráfico
Panel izquierdo, escogemos la sección Sistema Base. OJO!!: para evitar problemas con núcleos no oficiales, marcamos Sistema base, no Sistema base(universe)
Bajamos hasta la zona dónde tenemos paquetes que se llaman: linux-image-X.X.X-nombre_de_nuestro_procesador y marcamos la versión más actual. Por ejemplo, en este momento, para mi ordenador sería: linux-image-2.6.24-23-generic
Núcleos Precompilados.Modo gráfico
Si tenemos algún hardware que requiera módulos del núcleo especiales (véase tarjetas Nvidia), debemos marcar también los linux-restricted-modules correspondientes al núcleo seleccionado desde panel izquierdo seleccionando en la sección: Sistema Base (restricted) ó Varios Basados en Texto (restricted)
Aplicamos los cambios. Al reiniciar la próxima vez, se cargará el núcleo seleccionado.
Núcleos Precompilados.Modo Texto
#La versión actual es:
uname -r ->2.6.24-22-generic
#instalar uno de los kernel precompilados
sudo aptitude search linux-image
sudo aptitude install linux-image-2.6.24-23-generic
...
p->i linux-image-2.6.24-23-generic (x86-x86_64)
...
Núcleos Precompilados
#Si tenemos algún hardware que requiera módulos del núcleo especiales (véase tarjetas Nvidia) del tipo restringido
sudo aptitude search linux-restricted-modules
sudo aptitude install linux-restricted-modules-2.6.24-23-generic
i linux-restricted-modules-2.6.24-23-generic - Non-free Linux 2.6.20 modules on x86/x86_64
Fuentes del Kernel
Cuando SI compilar kernel Cuando quieras probar las características experimentales
deshabilitadas por defecto.
Si estás resolviendo un bug del kernel
Si tienes hardware, que no tiene activado su soporte por defecto en
el kernel o viene en otra versión del kernel superior.
Optimizar tu kernel
Nota : No necesitas compilar el kernel para compilar un driver
especial. Sólo necesitas instalar el paquete linux-headers .
Fuentes del KernelAntes de empezar a Compilar
Tener permisos de administrador.
A la hora de configurar nuestro nuevo kernel debemos seleccionar que componentes HW queremos que soporte, por lo que recogeremos la información del HW de nuestro PC: Processor, Drive type and Controller (SCSI, IDE), Ethernet devices, Graphics and Sound Cards, USB HUB...
Fuentes del KernelAntes de empezar a Compilar
Conozca tu hw con:
lspci
lsusb
lshw
cat /proc/cpuinfo
cat /proc/net/dev
Fuentes del KernelAntes de empezar a Compilar
A la hora de bajar el kernel de linux tengo 2 opciones:
Bajar las fuentes del kernel modificadas por mi distribución, e
instalarlas utilizando las herramientas propias de mi
distribución: Ubuntu-Debian (apt, make-kpkg, dpkg) ó Fedora-
Redhat(yum, rpm, rpmbuild)...
Bajar las fuentes del kernel oficial www.kernel.org liderado por
el grupo de Linus Torvalds
Fuentes del KernelAntes de empezar a Compilar
¿Cuál de ellas es la mejor opción?
Si las modificaciones que vas a realizar en la configuración son pocas
lo más seguro es instalar la versión de la distribución, ya que estas
incluyen estabilidad y parches de características que no vienen en en
núcleo oficial. Por ejm: Parches de Seguridad (Selinux), ...
Normalmente pasa bastante tiempo desde que sale el kernel de la
distribución frente al kernel oficial, es por ello, que si nos urge
probar alguna característica del kernel oficial de linux la tendremos
que bajar, NO pudiendo usar el de la distribución.
Fuentes del KernelMétodo Universal. Download
Bajar la última versión:
http://www.kernel.org/ o http://www.kernel.org/mirrors/ The latest stable version of the Linux kernel is: 2.6.29.1
Mi Ubuntu esta actualizado a: uname -r ->2.6.24-23-generic
Bajamos .tar.gz o tar.bz (pulsando en F)
The latest stable version of the Linux kernel is: 2.6.29.1 2009-04-02 00:39 UTC F V VI C Changelog
Fuentes del KernelM. Universal.Descomprimir
$ sudo cp linux-XYZ.tar.bz2 /usr/src/ && cd /usr/src && tar -jxvf linux-XYZ.tar.bz2
Los contenidos del fichero se expandirán en /usr/src/linux-XYZ. Vaya ahora a ese directorio y lea el fichero README. Encontrará una sección “INSTALLING the kernel”'. Siga las instrucciones
que allí se digan.
Compilación
Pasos:
1.-Posiciónate: cd /usr/src/linux-X.Y.Z
2.-Ejecuta make mrproper (Si ya habíamos compilado anteriormente un núcleo con estas fuentes, elimina todos los binarios .o que puedan quedar,...)
Compilación
3.-Elige las características del núcleo. Utilizando diferentes aplicaciones:
$sudo make config :(modo texto)Un programa shell-script de configuración que le preguntará bastantes cosas.
$sudo make menuconfig: (modo texto con menus) $sudo make xconfig: (basado en X-windows en la versión
2.4 pero en la versión 2.6 se basa en las librerías QT de desarrollo “qt-devel”)
$sudo make gconfig <-- New in 2.6.x, based on GTK and not TCL-TK
Compilación
Se procede de la siguiente manera: make xconfig
Cargar la configuración del fichero de configuración obtenido en el proceso de instalación que esta en “/boot/config-version”
Selecciona los controladores de los dispositivos detectados con lspci y añade las características del kernel que desees.
Existen 3 posibilidades de selección: 'y' incluirá en la parte monolítica del kernel. 'm' que lo hará como módulo. 'n' que no será seleccionado.
Ejm:cargar el módulo PPP sólo cuando vayamos a usar el módem.
Opciones de Configuración Code madurity level options: 'y/n' /*poder usar drivers
inestables*/
Loadable module support:
Enable loadable module support:'y'
Set version information on all module symbols :'n' (Guardar los modulos, al cambiar de kernel, utilizar 'y' si tenemos modulos externos al núcleo)
Automatic kernel module loading (KMOD):'y' Procesor type and features:
High Memory support:off(x)->Menos 960MB
Math emulation:'n'
MTRR(Memory Type Range Register) support:'n'(PCI/AGP)
Opciones de Configuración
Soporte para los Sistemas de ficheros (Filesystems):
Second extended (ojo no como módulo,unica_ y); msdos (acceder desde Linux a sus particiones de MS-DOS o
quiere montar disquetes de ese sistema.) umsdos (Sirve para quienes quieran instalar Linux en la
partición DOS, pero nada más) /proc (interfaz por medio de ficheros con la tabla de procesos
del núcleo, usada por programas como `ps'. Pruebe a teclear `cat /proc/meminfo' o `cat /proc/devices'. Muchas utilidades de Linux lo necesitan.
Opciones de Configuración
Soporte para los Sistemas de ficheros (Filesystems):
ISO9660 - Si tiene un CD-ROM. NTFS (Soporta Sistema de Ficheros de NT,XP,2000) quota support - Selecciónelo si quiere administrar el espacio
que consumen en disco los usuarios del sistema mandatory lock support- Selecciónelo si utiliza como servidor
de Bases de Datos o Ficheros. Vfat: Soporta fat y fat32
Opciones de Configuración
Soporte para los Sistemas de ficheros (Filesystems):
NFS :Si su máquina está en red y quiere acceder a sistemas de ficheros remotos con NFS.
SMB filesystem support: nos permitirá montar volúmenes compartidos por clientes de red NetBios.
UFS Soporte para el Unix FileSystem, empleado por *nixes BSD, como SunOS, FreeBSD, NetBSD, NeXTstep)
Sys V and Coherent filesystem support permitirá montar particiones de otros *nixes System V, como SCO Unix, Xenix y Coherent.
Opciones de Configuración
¡Pero no sé qué sistemas de ficheros necesito!
cat /etc/fstab o mount
/dev/hda3 on / type ext3 (rw)
none on /proc type proc (rw)
usbdevfs on /proc/bus/usb type usbdevfs (rw)
/dev/hda5 on /boot type ext3 (rw)
none on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/hda8 on /home type ext3 (rw)
none on /dev/shm type tmpfs (rw)
Opciones de Configuración/dev/hda11 on /tmp type ext3 (rw)
/dev/hda6 on /usr type ext3 (rw)
/dev/hda9 on /usr/local type ext3 (rw)
/dev/hda7 on /var type ext3 (rw)
/dev/hda2 on /dos type vfat (rw)
/dev/cdrom on /mnt/cdrom type iso9660 (ro,nosuid,nodev,user=kepa)
/dev/fd0 on /mnt/floppy type msdos (rw)
Para saber qué sistemas de ficheros usa en el núcleo actual puede teclear 'cat /proc/filesystems'
Opciones de Configuración
Manejadores de tipo carácter (Character devices)
Tarjeta de sonido (Sound card)
Kernel hacking: n (para versiones de producción)
...
Compilación Núcleo
4.-El GRAN MOMENTO: COMPILAMOS !!!
Compilación comprimida del nucleo: make Crea el fichero bzImage en la carpeta /usr/src/linux-
XYZ/arch/i386/boot/ que es la imagen comprimida del núcleo.
También crea el fichero system.map en la carpeta /usr/src/linux-XYZ/System.map
Compilación Núcleo¿Que es System.map?
Un símbolo representa un bloque de programa: un nombre de función o un nombre de variable
El kernel no usa nombres simbólicos como BytesRead() para llamar a una función sino que usa direcciones de funciones del tipo c0343f20
Existe un fichero llamado system.map donde se guarda la tabla de símbolos con los nombres de los símbolos y su dirección.Ejm:
c03441a0 B dmi_broken
c03441a4 B is_sony_vaio_laptop
...
Compilación Núcleo¿Que es System.map?
Hay 2 ficheros son usados como la tabla de símbolos del kernel: /proc/kallsyms y System.map
/proc/kallsyms es un fichero del tipo proc que se crea al arrancar el kernel con el contenido del system.map. Cuando compilas el nuevo kernel se genera un nuevo system.map.
Compilación e Instalación de Módulos
5.-Compilar los módulos seleccionados e instalará los módulos compilados como root:
$sudo make modules_install
make modules //Compilar los módulos
copia módulos a "/lib/modules/`uname -r`custom")
NOTA: ejecutar depmod -a en el primer arranque de dicho núcleo, para registrar las dependencias entre módulos.
Instalación Núcleo
6.-Instala la entrada del nuevo kernel
#copia el núcleo compilado en /boot
cp /usr/src/linux-XYZ/arch/i386/boot/bzImage /boot/vmlinuz-X.Y.Z
#Tabla de símbolos:http://www.dirac.org/linux/system.map/
cp /usr/src/linux-XYZ/system.map /boot/system.map-X.Y.Z
#Salva el fichero de configuración en /boot
cp /usr/src/linux-XYZ/.config /boot/config-X.Y.Z
Instalación Núcleo
6.-Instala la entrada del nuevo kernel
#si hemos elegido los drivers IDE y ext3 por ejemplo como módulos cuando el kernel intenta cargar el sistema de ficheros root no puede ya que para cargarlos necesita de los drivers que están en el sistema de ficheros root (/lib/modules...). Para solventar este problema se crea un fichero con dichos drivers, que se cargan junto al kernel en memoria. Este fichero se crea con el siguiente comando:
mkinitrd initrd.img-2.6.24 2.6.24
En ubuntu se usa:
mkinitramfs -o /boot/initrd.img-2.6.24 2.6.24
Instalación Núcleo
#Modificar el cargador GRUB con la nueva entrada.
El archivo de configuración:/boot/grub/menu.lstdefault=1
timeout=10
title Ubuntu 8.04.2, kernel 2.6.24-23-generic
root (hd0,5)
kernel /boot/vmlinuz-2.6.24-23-generic root=UUID=dda38e2b-9a90-4085-88ea-6cbb368f7e9f ro quiet splash
initrd /boot/initrd.img-2.6.24-23-generic
quiet
savedefault
Instalación Núcleo
7.-Al arrancar depmod -a y comprobar que todo a
arrancado correctamente examinando dmesg
Parchear el kernel Un parche para el núcleo es un fichero que sólamente contiene
información, sobre las líneas de código que han cambiado desde la versión precedente del núcleo.
Ventajas:
Ejm1:Un núcleo 2.2.0 y vamos a actualizarlo al 2.2.1. Tendrías que bajarte el fichero patch-2.2.1.gz [70Kb] en vez, del núcleo 2.2.1 al completo [12.5Mb].
Desventajas:
Ejm2:Un núcleo 2.2.0 y vamos a actualizar al 2.2.4.Tendrías que bajarte el 2.2.1, 2.2.2, 2.2.3 y 2.2.4. Los patch sólamente contienen los cambios de versión a versión.
Parchear el kernel
Antes de empezar: guardar una copia del núcleo.
Bajar y copiar el parche: patch-2.4.22 (donde esta el linux-2.4.21.tar.gz)
Descomprimir: bunzip2 patch-2.4.22.bz2
Ejecuta:patch -s -p0 < patch-2.4.22
Para ver qué partes no se han modificado correctamente, busque los ficheros .rej en el directorio de las fuentes.
find . -name '*.rej' -print
Parchear el kernel
Kernel 2.6:
make xconfig make make modules_install make install
Usando el kernel de la distribución Usando Ubuntu:
http://www.ubuntu-es.org/node/431
https://help.ubuntu.com/community/Kernel/Compile
Usando Debian:
http://www.debian.org/releases/stable/i386/ch08s06.html.es
Usando Fedora:
http://fedora.redhat.com/docs/release-notes/fc4/#sn-kernel-flavors
http://oak.cats.ohiou.edu/~hobbsk/kernel-compilation-tutorial-en/steps.html
Ubuntu 8.04 Hardy
Ubuntu 8.04 Hardy :el lanzamiento incluye el kernel genérico
2.6.24-16.30 basado en 2.6.24.3 de vanilla. Ubuntu incluye parches
adicionales para mejoras, arreglar errores, o añadir nuevas
características. Es por esta razón que el kernel de ubuntu no es
totalmente equivalente al llamado vanilla kernel o kernel vainilla
que está en sitio web www.kernel.org.
Obtener las fuentes del Kernel
En los repositorios de Ubuntu os vais a encontrar con paquetes llamados
kernel-source y con paquetes llamados linux-source. Ambos son las
fuentes del kernel. ¿Cuál es la diferencia?, pues que los kernel-source
vienen de Debian, y los linux-source vienen de Ubuntu. Por lo tanto para
obtener las fuentes del kernel que tenemos instalado y corriendo en
nuestro sistema, sólo tendremos que hacer:
$ sudo apt-get install linux-source
Con esto se descargará el archivo linux-source-nº_de_version.tar.bz2
en /usr/src
Obtener las fuentes del Kernel
Nos movemos a ese directorio:$ cd /usr/src
Si existe un enlace llamado linux a un kernel antiguo, lo borramos:
$ sudo rm linux
Ahora vamos a descomprimir el archivo de las fuentes:
$ sudo tar jxvf linux-source-2.6.24.tar.bz2
Creamos un enlace simbólico (llamado linux) a ese directorio:
$ sudo ln -s linux-source-2.6.24 linux
Instala Herramientas Necesarias para compilar
Instala los siguientes paquetes:
sudo apt-get install build-essential kernel-package
kernel-package: A utility for building Linux kernel related Debian
packages.
build-essential: informational list of build-essential packages
Configurar el kernel
Hay varias formas de configurar el kernel. La mayoría de la gente
utiliza una de estas dos: make menuconfig o make xconfig. La
diferencia es que con make menuconfig no hace falta tener las
Xwindow corriendo, y con make xconfig sí.
Nota: para utilizar make menuconfig necesitaremos el paquete
libncurses5-dev (con todas sus dependencias) y para utilizar make
xconfig necesitaremos los paquetes libqt3-headers y libqt3-mt-dev
(con todas sus dependencias).
Configurar el kernel
Así que según lo que queramos utilizar, tendremos que hacer:
$ sudo apt-get install libncurses5-dev
o bien:
$ sudo apt-get install libqt3-headers libqt3-mt-dev
Configurar el kernel
Para configurar el kernel, ¿puedo partir de una configuración conocida?.
Si. Podemos partir de dos puntos de referencia:
A)Las fuentes del kernel traen también diferentes configuraciones
predefinidas para las diferentes arquitecturas en:
/usr/src/linux/debian/Config
B)Una vez instalado Ubuntu,viene por defecto /boot/config-2.6.XX-XX-
generic, que es un archivo de texto con la configuración actual del kernel
Configurar el kernel
Por ejemplo, para partir de esa base y comenzar la configuración
del nuevo kernel desde la actual, lo que tenemos que hacer es
copiar dicho archivo al directorio /usr/src/linux, pero
llamándolo .config, es decir:
sudo cp /boot/config-2.6.XX-XX-generic /usr/src/linux/.config
Configurar el kernel
Ejecute el comando “make oldconfig” que intenta configurar mi
kernel nuevo usando los parámetros de mi configuración vieja es
decir del fichero .config.old o .config de mi versión de kernel
anterior. Genera preguntas sobre las nuevas caracteristicas
(drivers) que se han añadido desde el fichero .config viejo que
estamos usando.
Configurar el kernel
“make oldconfig” sólo se usa si los cambios de la fuente del
núcleo son pequeños (De kernel 2.6.2 a kernel 2.6.5) .Nota:
oldconfig no trabaja con ficheros de configuración cuyo major es
DISTINTO. No trabaja por ejemplo con: 2.4.x .config respecto un
kernel 2.6.x
$sudo make oldconfig
Configurar el kernel
Ahora ya podemos hacer un sudo make menuconfig o un sudo
make xconfig y modificar las opciones que queramos del kernel, es
decir, configurarlo a nuestro gusto. Con mucho cuidado, eso sí,
porque este es el paso crítico. Aquí es donde lo podemos arruinar
todo si, por ejemplo, no incluimos algún módulo necesario para
nuestro sistema.
sudo make xconfig
Configurar el kernel
Construir el paquete
Para construir el paquete con el que instalaremos el nuevo kernel
vamos a usar la orden make-kpkg. Esta orden lo que hace
básicamente es sustituir a las clásicas make y make modules.
Admite numerosas opciones y modificadores (ya sabeis: man
make-kpkg), pero para lo que nos ocupa ahora sólo necesitaremos
hacer lo siguiente:
#limpiamos las posibles compilaciones previas
$ sudo make-kpkg clean
Construir el paquete
$ sudo make-kpkg --append-to-version=.XXXX --initrd
kernel_image
#modificar XXXX, que representa una secuencia alfanumérica que
tendréis que decidir vosotros, y que se añadirá al número de
versión del kernel para diferenciar el kernel que estáis compilando
de cualquier otro. No utilizar el guión de subrayado bajo (_) ni
expresiones como "-386", "-606", "-K7", "-sparc", etc., porque
expresiones similares son las usadas por los kernel precompilados
de Debian y podrían inducir a error.
Construir el paquete
La opción –initrd crea una imagen initrd en el directorio /boot.
Realmente no es imprescindible utilizarla siempre que a la hora de
configurar el kernel hayamos incluido de forma estática (y no
como módulos) los controladores para al menos nuestro bus, disco
y sistema de archivos de nuestro directorio raiz. Pero (y esto es
sólo una experiencia personal) siempre que he intentado compilar
un kernel sin esa opción, me he encontrado con un sistema que no
arrancaba, así que yo la uso siempre.
Construir el paquete
La opción –initrd ¿Qué problema tiene?, pues que para que funcione
correctamente, hay que aplicar a las fuentes del kernel el parche
cramfs. Tranquilos, porque todos los kernel de Debian (y por
supuesto también los de Ubuntu) tienen ese parche ya aplicado.
Pero es algo que tendréis que tener en cuenta si habeis obtenido las
fuentes del kernel en algún otro sitio (por ejemplo en
www.kernel.org).
Instalar el nuevo kernel
Si todo lo anterior ha ido bien, se crea el archivo de nombre
/usr/src/kernel-image-2.6.20.1.XXXX_10.00.Custom_i386.deb,
este archivo contiene nuestro kernel compilado:
$ sudo dpkg -i kernel-image-
2.6.20.1.XXXX_10.00.Custom_i386.deb
#Esta orden es equivalente a las clásicas make modules_install y
make install, además de colocar en su sitio la imagen initrd
generada y actualizar el grub.
Instalar el nuevo kernel
Ahora, y por seguridad, borramos el enlace que habíamos creado:
$ sudo rm linux
Y ya está. Sólo nos queda arrancar con nuestro nuevo kernel
Ejecutar depmod -a
Genera en /lib/mudules/`uname -r`/modules.dep con las dependencias
entre los módulos seleccionados, para poder usar modprobe.