|
| |
Compilación del kernel de linux
Resumen: Algunas se desea compilar el kernel para personalizarlo y que se acople mejor a necesidades específicas en vez de trabajar con el kernel que viene predeterminado en una distribución Linux en particular.
Publicación enviada por Jaime Montoya
RESUMEN
Algunas se desea compilar el kernel para personalizarlo y que se acople mejor a
necesidades específicas en vez de trabajar con el kernel que viene
predeterminado en una distribución Linux en particular. La idea básica de
compilar un kernel es aumentar las capacidades del kernel y reducirlo para
hacerlo más ligero o más rápido, adaptándolo a las necesidades que se tengan en
un momento dado. A continuación se describen los pasos para compilar el kernel,
lo cual se ha hecho en Linux Debian Etch.
DESARROLLO
Primeramente se debe descargar el kernel a instalar desde www.kernel.org, que en
este caso será la versión 2.6.22.9 full source desde www.kernel.org/pub/linux/kernel/v2.6/linux-2.6/linux-2.6.22.9.tar.bz2.
El nombre del archivo es "linux-2.6.22.9.tar.bz2" y su tamaño es de 43 MB.
Para la compilación del kernel, algunos de los paquetes que se deben tener
instalados son: gcc, ncurses y make. Para la instalación de estos paquetes se
hace lo siguiente:
Se necesita instalar el GNU Compiler Collection, que es un conjunto de
compiladores creados por el proyecto GNU. GCC es software libre y lo distribuye
la Free Software Foundation bajo la General Public License. Estos compiladores
se consideran estándar para los sistemas operativos derivados de UNIX, de código
abierto o también de propietarios, como Mac OS X. GCC requiere el conjunto de
aplicaciones conocido como binutils para realizar tareas como identificar
archivos objeto u obtener su tamaño para copiarlos, traducirlos o crear listas,
enlazarlos, o quitarles símbolos innecesarios. Originalmente GCC significaba GNU
C Compiler (compilador GNU para C), porque sólo compilaba el lenguaje C.
Posteriormente se extendió para compilar C++, Fortran, Ada y otros. El objetivo
de GCC es mejorar el compilador usado en los sistemas GNU incluyendo la variante
GNU/Linux. El desarrollo de GCC usa un entorno de desarrollo abierto y soporta
muchas otras plataformas con el fin de fomentar el uso de un compilador-optimizador
de clase global, para atraer muchos equipos de desarrollo, para asegurar que GCC
y los sistemas GNU funcionen en diferentes arquitecturas y diferentes entornos.
La instalación de GCC se hace así:
# apt-get install gcc-*
Need to get 83.3MB of archives.
After unpacking 196MB of additional disk space will be used.
Do you want to continue [Y/n]? Y
Get:1 http://ftp.debian.org etch/main gcc272 2.7.2.3-19 [650kB]
Get:2 http://ftp.debian.org etch/main cpp-2.95 1:2.95.4-27 [116kB]
Get:3 http://ftp.debian.org etch/main gcc-3.3-base 1:3.3.6-15 [151kB]
Get:4 http://ftp.debian.org etch/main cpp-3.3 1:3.3.6-15 [1375kB]
Get:5 http://ftp.debian.org etch/main gcc-3.4-base 3.4.6-5 [164kB]
Get:6 http://ftp.debian.org etch/main cpp-3.4 3.4.6-5 [1735kB]
Get:7 http://ftp.debian.org etch/main libstdc++6-4.1-dev 4.1.1-21 [1634kB]
Get:8 http://ftp.debian.org etch/main g++-4.1 4.1.1-21 [2615kB]
Get:9 http://ftp.debian.org etch/main g++ 4:4.1.1-15 [1360B]
Get:10 http://ftp.debian.org etch/main gcc-2.95 1:2.95.4-27 [949kB]
Get:11 http://ftp.debian.org etch/main gcc-2.95-doc 1:2.95.4-27 [448kB]
Get:12 http://ftp.debian.org etch/main gcc-3.3 1:3.3.6-15 [1425kB]
Get:13 http://ftp.debian.org etch/main gcc-3.4 3.4.6-5 [1409kB]
Get:14 http://ftp.debian.org etch/main gcc-4.1-locales 4.1.1-21 [1458kB]
Get:15 http://ftp.debian.org etch/main gcc-4.1-source 4.1.1-21 [43.9MB]
Get:16 http://ftp.debian.org etch/main gccxml 0.7.0+cvs20060311-2 [2252kB]
Get:17 http://ftp.debian.org etch/main libc6-amd64 2.3.6.ds1-13etch2 [3327kB]
Get:18 http://ftp.debian.org etch/main lib64gcc1 1:4.1.1-21 [24.5kB]
Get:19 http://ftp.debian.org etch/main pocketpc-binutils 2.15-2 [2251kB]
Get:20 http://ftp.debian.org etch/main pocketpc-gas 2.13.2.1-1 [431kB]
Get:21 http://ftp.debian.org etch/main pocketpc-sdk 1.0.0-4 [60.0kB]
Get:22 http://ftp.debian.org etch/main pocketpc-gcc 3.4.2-2 [3278kB]
Get:23 http://ftp.debian.org etch/main binutils-avr 2.16.1-1 [2513kB]
Get: 24..........
Ahora instalar Ncurses:
# apt-get install ncurses-*
Need to get 14.0MB of archives.
After unpacking 54.3MB of additional disk space will be used.
Do you want to continue [Y/n]? Y
Get:1 http://ftp.debian.org etch/main ncurses-term 5.5-5 [331kB]
Get:2 http://ftp.debian.org etch/main libruby1.8 1.8.5-4 [1529kB]
Get:3 http://ftp.debian.org etch/main ruby1.8 1.8.5-4 [217kB]
Get:4 http://ftp.debian.org etch/main libreadline-ruby1.8 1.8.5-4 [197kB]
Get:5 http://ftp.debian.org etch/main irb1.8 1.8.5-4 [235kB]
Get:6 http://ftp.debian.org etch/main libruby1.9 1.9.0+20060609-1 [1748kB]
Get:7..........
Probablemente "make" ya se encuentre instalado, sin embargo para mayor seguridad
se debe probar así:
# apt-get install make
Luego realizar esta instalación:
# apt-get install libqt3-*
Need to get 19.1MB of archives.
After unpacking 61.6MB of additional disk space will be used.
Do you want to continue [Y/n]? Y
Get:1 http://ftp.debian.org etch/main firebird2-common 1.5.3.4870-12 [235kB]
Get:2 http://security.debian.org etch/updates/main libpq4 8.1.9-0etch1 [270kB]
Get:3 http://ftp.debian.org etch/main gcj-4.1-base 4.1.1-20 [91.5kB]
Get:4 http://ftp.debian.org etch/main libgcj-common 1:4.1.1-21 [11.3kB]
Get:5 http://ftp.debian.org etch/main libgcj7-0 4.1.1-20 [9031kB]
Get:6 http://ftp.debian.org etch/main libgcj-bc 4.1.1-21 [1120B]
Get:7 http://ftp.debian.org etch/main gij-4.1 4.1.1-20 [21.1kB]
Get:8 http://ftp.debian.org etch/main gij 4:4.1.1-15 [1280B]
Get:9 http://ftp.debian.org etch/main libaudio-dev 1.8-4 [1103kB]
Get:10 http://ftp.debian.org etch/main libgpg-error-dev 1.4-1 [33.6kB]
Get:11 http://ftp.debian.org etch/main libgcrypt11-dev 1.2.3-2 [251kB]
Get:12 http://ftp.debian.org etch/main libtasn1-3-dev 0.3.6-2 [308kB]
Get:13 http://ftp.debian.org etch/main libpopt-dev 1.10-3 [38.1kB]
Get:14 http://ftp.debian.org etch/main libopencdk8-dev 0.5.9-2 [122kB]
Get:15 http://ftp.debian.org etch/main liblzo-dev 1.08-3 [111kB]
Get:16 http://ftp.debian.org etch/main libgnutls-dev 1.4.4-3 [359kB]
Get:17 http://ftp.debian.org etch/main libcupsys2-dev 1.2.7-4 [138kB]
Get:18 http://ftp.debian.org etch/main libfbclient1 1.5.3.4870-12 [382kB]
Get:19..........
A continuación hacer la siguiente instalación:
# apt-get install initrd-*
Need to get 140kB of archives.
After unpacking 492kB of additional disk space will be used.
Do you want to continue [Y/n]? Y
Aunque la instalación anterior quizá no sea necesaria por haberse hecho ya
antes. Con "# apt-get install initrd-*" se busca instalar el initial
ramdisk o initrd, que es un sistema de archivos temporal usado por el
kernel de Linux durante el inicio del sistema.
El * indica que se instalarán todos los paquetes que inician con las letras
establecidas antes del asterisco.
El código fuente con extensión tar.bz2 que se descargó debe copiarse al
directorio /usr/src. Recuérdese que para realizar esta acción deben haber
permisos de escritura para el directorio /usr/src, lo cual se puede hacer
con "# chmod 777 /usr/src". La dirección completa del código fuente del
kernel comprimido será entonces /usr/src/linux-2.6.22.9.tar.bz2.
Ahora se creará un directorio de trabajo en el directorio home del usuario (en
este caso el nombre de usuario es "jaimemontoya") con el que se está trabajando
(se deben asignar permisos de escritura para el directorio en el que se va a
escribir), así:
# chmod 777 /home/jaimemontoya
# cd /home/jaimemontoya
# exit
$ mkdir -p $HOME/build/kernel-2.6.22.9
"$HOME/build/kernel-2.6.22.9" equivale a "/home/build/kernel-2.6.22.9".
"# exit" se ha utilizado para dejar de ser superusuario y poder crear el
directorio como usuario normal, no como superusuario. El parámetro -p se usa
para crear el directorio build, si no existiese, para poder luego crear el
directorio kernel-2.6.22.9.
Posteriormente se debe descomprimir el archivo de código fuente del kernel:
$ su
Password:
# cd /usr/src
# pwd
# tar -jxvf /usr/src/linux-2.6.22.9.tar.bz2
Esto último como superusuario, para lo cual se ha utilizado el comando "$ su".
Antes de descomprimir es necesario ubicarse en /usr/src, lo cual se consigue con
"# cd /usr/src" y luego con "# pwd" se puede verificar que ya se
está en la ubicación deseada.
Si existiese el enlace simbólico /usr/src/linux, eliminarlo así
(asumiendo que la ubicación actual es /usr/src):
# rm linux
Ahora crear el enlace simbólico /usr/src/linux, apuntando a la carpeta
recién descomprimida:
# ln -s linux-2.6.22.9 linux
Todo esto se debe hacer estando en el directorio /usr/src.
Ahora moverse al enlace simbólico /usr/src/linux que se creó
anteriormente:
# cd linux
Verificar que todo hasta el momento va bien:
# make mrproper
Si no aparece ningún error, todo hasta el momento va bien y ya se puede iniciar
la compilación del kernel.
Se comienza por configurar el kernel con el fín de adaptarlo a las necesidades
que se tengan. En este momento se podrán eliminar o aplicar secciones del kernel
al antojo del usuario. La mayoría de secciones son intuitivas en el sentido de
que se puede comprender sin demasiada complicación qué parte del kernel se
manipula. Para llevar a cabo esta configuración se deberá hacer de la siguiente
forma (considerando que en este caso el usuario se llama "jaimemontoya"):
# make O=/home/jaimemontoya/build/kernel-2.6.22.9 menuconfig
El caracter que aparece antes del signo = es la letra O mayúscula. Con esto se
creará una estructura de archivos en el directorio especificado, donde se
almacenará todo el contenido del kernel compilado. Este paso debe ser hecho
cuidadosamente para que se logre conocer mejor todo lo que el kernel de Linux
proporcionar. Para que este paso se concluya con éxito, se deberán guardar todos
los cambios que se deseen hacer, de manera que al momento de salir aparecerá la
pregunta de si se desean guardar los cambios, a lo cual se deberá responder que
sí.
NOTA: es necesario que al utilizar "# make O=/home/jaimemontoya/build/kernel-2.6.22.9
menuconfig", la ubicación actual sea el enlace simbólico que se creó, es decir
"/usr/src/linux". Para confirmar que se ha llegado a dicha ubicación, utilizar
"# pwd". Si no se hiciera asín, aparecerá el siguiente mensaje:
make: *** No rule to make target `menuconfig'. Stop.
Si todo se ha hecho correctamente, luego de utilizar "# make O=/home/jaimemontoya/build/kernel-2.6.22.9
menuconfig" y aparecerá una pantalla azul donde se deberán elegir las opciones
personalizadas que se le quieren dar al kernel. Esto se puede hacer al antojo de
cada usuario, de acuerdo a lo que quiera hacer o el objetivo que se persiga con
el uso del kernel.
NOTA: para que aparezca esa pantalla azul de configuración, la ventana de la
consola se debe tener completamente maximizada o en un tamaño suficientemente
grande, pues de lo contrario aparecerán estos errores:
Your display is too small to run Menuconfig!
It must be at least 19 lines by 80 columns.
make[2]: *** [menuconfig] Error 1
make[1]: *** [menuconfig] Error 2
make: *** [menuconfig] Error 2
El contenido del menú principal para configurar lo que tendrá o no el kernel que
se va a compilar, es el siguiente:
.config - Linux Kernel v2.6.22.9 Configuration
Linux Kernel Configuration
Arrow keys navigate the menu. selects submenus --->. Highlighted letters are
hotkeys. Pressing includes, excludes, modularizes features. Press to exit, for
Help, for Search. Legend: [*] built-in [ ] excluded module < > module capable
Code maturity level options --->
General setup --->
Loadable module support --->
Block layer --->
Processor type and features --->
Power management options (ACPI, APM) --->
Bus options (PCI, PCMCIA, EISA, MCA, ISA) --->
Executable file formats --->
Networking --->
Device Drivers --->
File systems --->
Instrumentation Support --->
Kernel hacking --->
Security options --->
Cryptographic options --->
Library routines --->
---
Load an Alternate Configuration File
Save an Alternate Configuration File
Habiendo hecho el paso anterior y guardado los cambios que se eligieron, se
necesita ahora crear la imagen, así:
# make O=/home/jaimemontoya/build/kernel-2.6.22.9 bzImage
Con lo anterior se proporcionará en sí el kernel, que se llamará al momento del
arranque y que estará encargado de administrar todos los módulos que se
compilarán con él en los pasos que se describirán posteriormente. Cuando este
proceso finaliza, aparece al final un mensaje como este:
Root device is (3, 2)
Boot sector 512 bytes.
Setup is 7537 bytes.
System is 1358 kB
Kernel: arch/i386/boot/bzImage is ready (#1)
Un kernel modular, para fines prácticos, será más pequeño que uno con todo
incluido; por lo tanto, el tipo modular se vuelve propicio por muchas razones.
Para crear los módulos del kernel, se deberá realizar la siguiente acción:
# make O=/home/jaimemontoya/build/kernel-2.6.22.9 modules
Con eso se crearán la mayoría de opciones contenidas en el kernel, como módulos
que serán cargados de manera dinámica cuando sea necesarios utilizarlos. Esto
también facilita agregar nuevos módulos.
Si la acción anterior se llevó a cabo de manera correcta, entonces se vuelve
necesario instalar los módulos en el sistema para que el kernel los pueda usar
de forma dinámica. Para esto se deberá realizar la siguiente acción:
# make O=/home/jaimemontoya/build/kernel-2.6.22.9 modules_install
Si el paso anterior se realiza de forma correcta, se creará una carpeta en el
directorio /lib/modules/, la cual tendrá por nombre la numeración con la que
finaliza el kernel, que en este caso será la versión 22.6.22.9. El directorio o
carpeta que se habrá creado es entonces "/lib/modules/2.6.22.9". Para confirmar
que se acaba de crear, se puede ver la fecha y hora de modificación de dicho
directorio y se confirmará que ha sido recién creado mediante "# make O=/home/jaimemontoya/build/kernel-2.6.22.9
modules_install". Esto indica que los módulos han sido colocados
correctamente en el sistema Linux. Esta carpeta se utilizará más adelante para
crear un archivo de ram disk y levantar el kernel al momento de arranque.
Lo único que falta ahora es instalar el kernel, lo cual se puede realizar de dos
formas. La primera forma es mediante la ejecución de la siguiente instrucción:
# make O=/home/jaimemontoya/build/kernel-2.6.22.9 install
Este primer método genera todas la configuraciones necesarias. Dichas
configuraciones (que se encuentran en el GRUB), serán sobreescritas, lo cual no
da garantías porque si el kernel recién compilado no corre, no habrá forma de
acceder al sistema.
La segunda forma de realizar la instalación del kernel es larga pero más segura,
lo cual garantiza tener el kernel actual funcionando y crear una nueva
configuración para el kernel recién compilado. Para ello se deberá realizar lo
siguiente:
Copiar la imagen creada anteriormente (/home/jaimemontoya/build/kernel-2.6.22.9/arch/i386/boot/bzImage)
al directorio /boot y ponerle un nombre que haga referencia a toda la
configuración de GRUB para el kernel:
# cp /home/jaimemontoya/build/kernel-2.6.22.9/arch/i386/boot/bzImage /boot/vmlinuz-2.6.22.9-jaimemontoya
Luego se tiene que copiar el archivo de configuración:
# cp /home/jaimemontoya/build/kernel-2.6.22.9/.config /boot/config-2.6.22.9-jaimemontoya
Respecto al archivo /home/jaimemontoya/build/kernel-2.6.22.9/.config, si se
quiere ver de forma gráfica con el navegador Konqueror por ejemplo (presionando
F9 desde el navegador y luego en la pestaña Root Folder navegando en los
directorios), se deberá activar la opción "Show Hidden Files" o "Mostrar
Archivos Ocultos" en el menú View o Ver del navegador Konqueror.
Ahora se tiene que copiar el archivo System.map:
# cp /home/jaimemontoya/build/kernel-2.6.22.9/System.map /boot/System.map-2.6.22.9-jaimemontoya
En este momento se tiene que crear el archivo initrd o randisk para el arranque
del kernel. Como se mencionó anteriormente, si los módulos se instalaron
correctamente, se tuvo que generar una carpeta en el directorio /lib/modules/,
la cual debe corresponder con los últimos números del kernel. En este caso se
generó la carpeta /lib/modules/2.6.22.9, la cual contiene los módulos del kernel
recién compilado. Para mayor seguridad se debe verificar la fecha de creación.
Teniendo la carpeta /lib/modules/2.6.22.9, se debe realizar la siguiente acción:
# mkinitrd -o /boot/initrd.img-2.6.22.9-jaimemontoya /lib/modules/2.6.22.9
Esto creará el archivo de ramdisk /boot/initrd.img-2.6.22.9-jaimemontoya, el
cual levantará el kernel en el arranque, es decir que cargará el kernel en
memoria.
En este momento se tiene que verificar que todos los archivos copiados se
encuentren en la carpeta /boot, lo cual se puede hacer con "# ls -la /boot" o de
manera gráfica con el navegador Konqueror por ejemplo, como se dijo
anteriormente.
Finalmente se tiene que crear una nueva sección de GRUB en el archivo /boot/grub/menu.lst,
similar a la que levanta el kernel inicial Linux, pero haciendo referencia a los
archivos que se acaban de crear.
Por ejemplo si se tuviera una sección como esta:

Se debe copiar y reemplazar luego con los datos del nuevo kernel compilado,
así:

Luego se le deben asignar permisos de escritura a /boot/grub/menu.lst para poder
guardar las modificaciones en este archivo. El permiso de escritura se puede
asignar con "# chmod 777 /boot/grub/menu.lst".
Finalmente se tiene que reiniciar la computadora y ya se podrá trabajar en el
nuevo kernel instalado. Para confirmar que realmente se está trabajando en el
kernel que se compiló e instaló, se puede utilizar "$ uname -a" o "$ cat /proc/version"
y se verá que ya se tiene la nueva versión 2.6.22.9. También aparece la fecha en
que se generó esta actualización, de manera que no quedará duda alguna de que
realmente ya se tiene el nuevo kernel y que el proceso se realizó
satisfactoriamente, pues al utilizar "$ uname -a" el resultado es:
Linux jaimemontoya 2.6.22.9 #1 Thu Sep 27 17:42:06 CST 2007 i686 GNU/Linux
Ahora ya se puede disfrutar del nuevo kernel instalado y el proceso se puede
repetir las veces que se desee para instalar en el futuro nuevas versiones de
los kernel que se desee ya sea por gusto o necesidad específica. Frecuentemente
son liberadas nuevas versiones, que siempre se encuentran en http://www.kernel.org
y se adquieren por supuesto de forma gratuita.
AUTOR
Jaime Montoya
jaimemontoya@jaimemontoya.com
www.jaimemontoya.com
Santa Ana, 29 de septiembre de 2007
El Salvador
Compartir 
Publicación enviada por Jaime Montoya
Contactar http://www.jaimemontoya.com
Código ISPN de la Publicación EEAEVFAVkADRbtBazo
Publicado Thursday 4 de October de 2007
Ultimas Publicaciones en ilustrados.com
ilustrados.com nace con el fin difundir el conocimiento publicando trabajos de investigación, monografias, tesis, presentaciones powerpoint y afines. Publicar trabajos en ilustrados.com ha alcanzado prestigio y reconocimiento internacional siendo cada vez más el número de académicos, empresas, investigadores, científicos que consultan las publicaciones de nuestro portal.
|