Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[guia] compilando un kernel manualmente (en construccion)
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index Spanish
View previous topic :: View next topic  
Author Message
asph
l33t
l33t


Joined: 25 Aug 2003
Posts: 741
Location: Barcelona, Spain

PostPosted: Fri Sep 24, 2004 9:48 am    Post subject: [guia] compilando un kernel manualmente (en construccion) Reply with quote

Compilando un kernel manualmente

0. Introducción

El kernel es el núcleo del sistema operativo GNU/Linux, actualizándolo lograremos mejorar el soporte para nuevo hardware [usb, firewire, video, audio, ...], gestion de memoria, schedulers, políticas de seguridad, etc. Es uno de los únicos procesos que requieren reiniciar el sistema, y aunque hay un proyecto para cambiar de kernel en caliente no es aconsejable usarlo.

En este manual se contempla la instalación de un kernel 2.6, ojo porque la instalación de un kernel antiguo de la rama 2.4 es ligeramente diferente!

1. Obtención del código fuente del Kernel

Para obtener las fuentes del kernel y proceder a su compilación e instalación hay dos formas:

1) A TRAVES DE PORTAGE

Gentoo tiene varias versiones del kernel en portage, asi que puedes obtenerlas facilmente con el comando emerge:

gentoo-sources (rama 2.4.x del kernel con parches gentoo)
vanilla-sources ( version "original" de kernel.org)
gentoo-dev-sources (rama 2.6.x del kernel con parches gentoo)
...

Instalar vanilla-sources sería lo mismo que descargar el codigo manualmente y descomprimirlo (aunque al hacer el emerge y si no usas --oneshot cada vez que salga una versión nueva bajará e instalará el codigo fuente para que puedas compilarlo).

Code:
# emerge vanilla-sources


Nota: Portage nos instalará el codigo fuente del kernel en /usr/src/linux-2.6.8.1

Hay varios más incluidos en portage aunque ya son específicos para usar en otras arquitecturas, kernels optimizados, kernels seguros, etc. Puedes ver los disponibles escribiendo:

Code:
# emerge -s sources | less


2) MANUALMENTE

Hay varias versiones disponibles, pero lo recomendable es instalar la última versión estable. A fecha de hoy, sería la 2.6.8.1

Nota: Si haces los pasos manualmente (sin usar portage), no es necesario ser root hasta el momento de instalar la imagen del kernel, por lo que es aconsejable hacer todo el proceso como usuario normal, y identificarse como root al final del proceso (sección 5). Gracias ArsDangor por la observación.

Code:
# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.8.1.tar.bz2


Una vez bajado el codigo fuente, procederemos a descomprimirlo (normalmente se ponen en /usr/src aunque puede ser cualquier directorio. por seguridad lo haremos en la home de nuestro usuario)

Code:
# tar xjf linux-2.6.8.1.tar.bz2


2. Parcheando el Kernel

Muchas veces puede interesarnos parchear el kernel para mejorar, optimizar o añadir funciones al kernel. Para ilustrarlo en este manual, pondemos el ejemplo del bootsplash (splashutils), que nos permite usar imagenes de fondo en nuestras consolas con framebuffer.

Lo primero es hacerse con el parche. Esto ya dependerá de cada parche, podemos buscar en google o en páginas relacionadas con el kernel. En el caso del bootsplash, el parche en cuestión esta en una web relacionada al proyecto.

Code:
 wget http://www.bootsplash.de/files/bootsplash-3.1.4-sp3-2.6.8.1.diff


Una vez tenemos el parche (y descomprimirlo en caso de ser necesario) ya podemos instalarlo mediante patch:

Code:
 cat bootsplash-3.1.4-sp3-2.6.8.1.diff | patch -p1

nota: en este ejemplo, se supone que el patch esta en el mismo directorio que el kernel, en caso de no ser asi simplemente especificas la ruta completa al patch, situandote en el directorio del kernel.

Una vez hecho esto, el código fuente del kernel habrá quedado parcheado, y en la configuración ya gozaremos de la nueva funcionalidad del bootsplash.

3. Configuración del kernel

Bueno, ya tenemos nuestro codigo fuente bajado y descomprimido, vamos a proceder a su configuración:

Code:
# cd linux-2.6.8.1 && make menuconfig


Una vez ejecutado este comando, se nos abre un menu basado en ncurses en el que podremos seleccionar todos los soportes que queramos incluir en nuestro kernel.

Cada una de las opciones podemos integrarla en el kernel [*] o bien compilarla como módulo [M]. La recomendación más extendida es la de integrar en el kernel los soportes que vamos a utilizar siempre, y dejar como módulos los soportes que usaremos ocasionalmente (usb, wireless, ntfs, nfs, etc.. dependerá de cada uno). Si queremos cargar alguno de estos modulos al inicio, bastará con añadirlos al fichero /etc/modules.autoload/kernel-2.6

Ejemplo Módulo:

Podemos cargar un módulo con la instrucción modprobe y tambien listar todos los modulos disponibles:
Code:
# modprobe -l
/lib/modules/2.6.8.1/kernel/misc/svgalib_helper.ko

Vemos que tenemos disponible el modulo svgalib_helper (en este caso proporcionado por el paquete svgalib, que nos permite usar links en consola en modo gráfico entre otras cosas), procedemos a cargarlo en memoria:
Code:
# modprobe svgalib_helper


[se omite el proceso de configuración ya que es diferente en cada máquina y sería difícil detallar todas las opciones.]

4. /usr/src/linux

Este enlace simbolico debe apuntrse al nuevo kernel que vamos a usar, para que louego los paquetes que generen modulos y los modulos en si compilen sin problemas (puedan encontrar include/*):

Code:
 rm /usr/src/linux && cd /usr/src && ln -s linux-2.6.8.1 linux


5. Compilación del kernel

Procedemos a compilar el kernel:

La opción rápida y que compilará el kernel y los módulos es escribir simplemente make o make all. Si haceis un make help vereis todas las opciones, y como make crea la el kernel vmlinux, los módulos y la bzImage comprimida, basicamente. También ejecutaremos make modules_install para instalar los módulos que hayamos compilado, en el caso de que hayamos configurado alguna de las opciones como módulos.
Code:
make && make modules_install


6. Instalación del nuevo kernel

Una vez configurado y compilado nuestro kernel, procederemos a su instalación. Es el momento de identificarse como root si hemos realizado la instalación del código fuente via portage.

Primero montamos la partición boot en caso de que sea necesario (ya que por defecto siguiendo la instalación de gentoo la partición de boot no se monta cada vez que iniciamos el sistema):
Code:
# mount /boot

Ahora copiamos el System.map a la partición de boot, añadiendo el distintivo de la versión de kernel que estamos usando:
Code:
# cp System.map /boot/System.map-2.6.8.1

Copiamos también la imagen del kernel a la partición de boot:
Code:
# cp arch/i386/boot/bzImage /boot/bzImage-2.6.8.1

Desmontamos otra vez la partición de boot por seguridad.
Code:
# umount /boot


7. Modificando el bootloader

-en construcción-
_________________
gentoo sex is updatedb; locate; talk; date; cd; strip; look; touch; finger; unzip; uptime; gawk; head; emerge --oneshot condom; mount; fsck; gasp; more; yes; yes; yes; more; umount; emerge -C condom; make clean; sleep


Last edited by asph on Wed Sep 29, 2004 9:54 pm; edited 4 times in total
Back to top
View user's profile Send private message
alexlm78
Veteran
Veteran


Joined: 08 Dec 2003
Posts: 1265
Location: Guatemala,Guatemala

PostPosted: Sun Sep 26, 2004 8:19 am    Post subject: Reply with quote

Creo que deberias incluir en tu evaluacion/hotwo a loas gs-sources (GentooStables) son de lo mejor.
_________________
"This is a different kind of world, you need a different kind of software"

Linux User# 315201
100% Chapin hecho en Guatemala
Back to top
View user's profile Send private message
ArsDangor
Guru
Guru


Joined: 20 May 2003
Posts: 477

PostPosted: Sun Sep 26, 2004 9:29 pm    Post subject: Reply with quote

Mi granito de arena, mientras completas la guía:
Sobre la descarga y la compilación manuales (directamente desde kernel.org),
nastassja wrote:
Code:
cd /usr/src && wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.8.1.tar.bz2

La primera parte no es necesaria. De hecho, descargar directamente a /usr/src implica que harás todo el proceso (wget, make menuconfig, etc) como root. En realidad, sólo la instalación del núcleo (el bzImage) y sus módulos requieren privilegios de root. Y sólo estas fases deberían ser ejecutadas como superusuario. El resto sería preferible llevarlas a cabo como un usuario limitado.

Salu2.
_________________
Cómo usar Portage correctamente
Back to top
View user's profile Send private message
navegante
l33t
l33t


Joined: 21 Jul 2004
Posts: 702

PostPosted: Sun Sep 26, 2004 10:11 pm    Post subject: Reply with quote

Tambien sería bueno que añadieras un pequeño manual de grub y/o lilo para poder usar esos kernels, si no tienes tiempo yo te ayudo y te lo paso en forma de parche. Por otro lado tambien podrías incluir la forma de parchear el kernel, su forma de versionar, otros kernels disponibles (nitro, ck). Saludos.
_________________
"El hombre es libre desde que nace, aún para decidir no ser libre"
KDE registered user: #2655 | Linux registered user: #404918
Back to top
View user's profile Send private message
SapoDriLo
n00b
n00b


Joined: 10 Jun 2004
Posts: 26
Location: Tlaxcala, Mexico

PostPosted: Mon Sep 27, 2004 5:46 pm    Post subject: Reply with quote

A mi lo que me parece muy importante es como aplicar parches al kernel, he investigado esto en google y la verdad no he obtenido información muy concluyente acerca del porque y el como.

Porque: Hay varios parches que agregan alguna funcionalidad con un costo en la estabilidad. Me gustaría saber/entender como puedo valorar la inclusión de un determinado parche en el kernel que construya a mano. Hay tantos, que uno no sabe por donde empezar.

Como: como aplicar un parche parecería algo trivial para el usaurio expreimentado, y aunque yo mismo lo he hecho. Sería muy interesante esa explicación.

Seguiré investigando a ver que puedo aportar a este how-to.
Saludos.
Back to top
View user's profile Send private message
asph
l33t
l33t


Joined: 25 Aug 2003
Posts: 741
Location: Barcelona, Spain

PostPosted: Wed Sep 29, 2004 9:41 am    Post subject: Reply with quote

un poco mas de info.. falta ampliar y la seccion de lilo/grub
_________________
gentoo sex is updatedb; locate; talk; date; cd; strip; look; touch; finger; unzip; uptime; gawk; head; emerge --oneshot condom; mount; fsck; gasp; more; yes; yes; yes; more; umount; emerge -C condom; make clean; sleep
Back to top
View user's profile Send private message
Franco Gotusso
Guru
Guru


Joined: 15 Apr 2004
Posts: 313
Location: Benidorm, Alicante, Spain

PostPosted: Wed Sep 29, 2004 6:52 pm    Post subject: Reply with quote

El apartado 2 (Instalación del código fuente del kernel) ¿No sería mejor que estubiera dentro del 1.2? Lo digo porque esto sólo hace falta si te bajas el código fuente a pelo, ya que el ebuild te lo hace sólo.
Salud!
_________________
Los programadores están ocupados intentando mejorar los programas a prueba de idiotas. Mientras tanto el universo intenta mejorar a los idiotas. El universo va ganando.
Back to top
View user's profile Send private message
asph
l33t
l33t


Joined: 25 Aug 2003
Posts: 741
Location: Barcelona, Spain

PostPosted: Wed Sep 29, 2004 9:55 pm    Post subject: Reply with quote

gracias por el apunte, se me paso al numerar los pasos :)
_________________
gentoo sex is updatedb; locate; talk; date; cd; strip; look; touch; finger; unzip; uptime; gawk; head; emerge --oneshot condom; mount; fsck; gasp; more; yes; yes; yes; more; umount; emerge -C condom; make clean; sleep
Back to top
View user's profile Send private message
ArsDangor
Guru
Guru


Joined: 20 May 2003
Posts: 477

PostPosted: Thu Sep 30, 2004 1:29 am    Post subject: Reply with quote

Felicidades por la guía. Te está quedando de lujo. :)

Una cosa que he comprobado que es muy útil es el make oldconfig, para reaprovechar la configuración de otros núcleos ya instalados y compilados. Igual te interesa tratarlo en tu guía...

Salu2.
_________________
Cómo usar Portage correctamente
Back to top
View user's profile Send private message
lunatc
Guru
Guru


Joined: 18 Apr 2002
Posts: 409
Location: Canary Islands. Spain

PostPosted: Thu Sep 30, 2004 10:09 am    Post subject: Reply with quote

La verdad es que va quedando bien :D

Otra cosilla que puede ser de utilidad es la extracción de la config de un kernel ya compilado.

NOTA: Que yo sepa esto es para kernels de la serie 2.6 (no se si la 2.4 lo soporta)

A veces me ha ocurrido que con el kernel del livecd (u otro kernel cualquiera que tenga la .config incluida) funciona tal o cual dispositivo, y con el que yo he compilado no.

Para eso suelo arrancar con el livecd (por ejemplo) y extraigo la configuración del kernel actual con:

Code:

zcat /proc/config.gz > fichero_conf_kernel


Después la uso copiando el fichero extraído al directorio del kernel como .config y haciendo un make oldconfig


Para hacer que un kernel incluya la configuración dentro de sí mismo hay que activar esto:

Code:

General setup
  [*] Kernel .config support
  [*]    Enable access to .config through /proc/config.gz 


Salu2
Back to top
View user's profile Send private message
oCHARLIEo
Guru
Guru


Joined: 06 Oct 2003
Posts: 303
Location: Madrid

PostPosted: Thu Sep 30, 2004 12:06 pm    Post subject: Reply with quote

yo ademas de copiar el System.map y el bzImage copio tb el .config con la configuracion actual del kernel... asi siempre puedo volver a la configuracion que tenia antes, si toco algo equivocado...

Usea:
Code:

# cp .config /boot/Config-2.6.8.1
# cp System.map /boot/System.map-2.6.8.1
# cp arch/i386/boot/bzImage /boot/bzImage-2.6.8.1

_________________
Las Mujeres son malvadas, retorcidas, perversas... pero huelen tan bien...

Por un foro ordenado y un buscador más útil:
[TEMA] Descripción problema (estado)
Back to top
View user's profile Send private message
ArsDangor
Guru
Guru


Joined: 20 May 2003
Posts: 477

PostPosted: Thu Sep 30, 2004 2:37 pm    Post subject: Reply with quote

oCHARLIEo wrote:
yo ademas de copiar el System.map y el bzImage copio tb el .config con la configuracion actual del kernel... asi siempre puedo volver a la configuracion que tenia antes, si toco algo equivocado...

Usea:
Code:

# cp .config /boot/Config-2.6.8.1
# cp System.map /boot/System.map-2.6.8.1
# cp arch/i386/boot/bzImage /boot/bzImage-2.6.8.1
Eso es precisamente lo que hace un make install. Además, te hace enlaces simbólicos para los ficheros de la última versión instalada.

Así te ahorras unos cuantos cp's. ;)

Salu2.
_________________
Cómo usar Portage correctamente
Back to top
View user's profile Send private message
asph
l33t
l33t


Joined: 25 Aug 2003
Posts: 741
Location: Barcelona, Spain

PostPosted: Sat Oct 02, 2004 2:39 pm    Post subject: Reply with quote

aqui hay una descripcion de los kernels disponibles, o la mayoria de ellos:
http://www.canalgentoo.com/modules.php?name=Content&pa=showpage&pid=9
_________________
gentoo sex is updatedb; locate; talk; date; cd; strip; look; touch; finger; unzip; uptime; gawk; head; emerge --oneshot condom; mount; fsck; gasp; more; yes; yes; yes; more; umount; emerge -C condom; make clean; sleep
Back to top
View user's profile Send private message
viei
n00b
n00b


Joined: 17 Sep 2004
Posts: 28

PostPosted: Sat Oct 02, 2004 10:07 pm    Post subject: No se si ayudará mi método!!! genkernel Reply with quote

Yo no soy partidario de usa el genkernel.....me gusta mas compilar mi kernel a mano....
Pero las cosas están ahi para ayudarnos, no??
Cada vez hay mas y mas opciones en los menus menuconfig de los kernel, asi que lo que yo hago es ejecutar primero sobre mi kernel un genkernel.
Code:

emerge genkernel
genkernel all

de esta forma cdo hacemos un
Code:

cd /usr/src/linux
make menuconfig

Nos hemos quitado un monton de opciones en las que no tendremos que dudar si ponerlas o no.

A mi me va bien.....pero como no hay dos maquinas iguales.... :lol:
Saludos
Will
Back to top
View user's profile Send private message
Franco Gotusso
Guru
Guru


Joined: 15 Apr 2004
Posts: 313
Location: Benidorm, Alicante, Spain

PostPosted: Mon Jan 10, 2005 4:09 pm    Post subject: Reply with quote

He agregado el howto al wiki http://es.gentoo-wiki.com/HOWTO_Compilar_el_kernel_manualmente
_________________
Los programadores están ocupados intentando mejorar los programas a prueba de idiotas. Mientras tanto el universo intenta mejorar a los idiotas. El universo va ganando.
Back to top
View user's profile Send private message
gepi
n00b
n00b


Joined: 21 May 2005
Posts: 58

PostPosted: Thu May 26, 2005 11:24 pm    Post subject: Instalando el kernel Reply with quote

En vez de copiar los archivos como hacéis en varios pasos, es más sencillo:

(dentro de /usr/src/linux)

installkernel 2.6.10 arch/i386/boot/bzImage System.map /boot

Y ya estará instalado en este caso, el kernel 2.6.10 en /boot.
Back to top
View user's profile Send private message
Stolz
Moderator
Moderator


Joined: 19 Oct 2003
Posts: 3028
Location: Hong Kong

PostPosted: Fri May 27, 2005 2:14 pm    Post subject: Reply with quote

Otra cosa util es el siguiente comando. Permite recompilar los paquetes que, aunque no formen parte de kernel, han instalado modulos del kernel. Por ejemplo, lirc, nvidia, alsa ,... De estas forma, cada vez que compilemos un nuevo kernel,no nos tenemos que preocupar de recordar que paquetes hay que "reemerger" para dejar el sistema como estaba:
Code:
# emerge -av `grep -l /lib/modules /var/db/pkg/*/*/CONTENTS | sed -e 's/\/var\/db\/pkg\//=/' -e 's/\/CONTENTS//'`
Back to top
View user's profile Send private message
esculapio
Apprentice
Apprentice


Joined: 15 Nov 2003
Posts: 253

PostPosted: Wed Dec 10, 2008 12:42 pm    Post subject: Reply with quote

Me entró una duda sobre armar el kernel. Hace años que compilo el kernel con solo "bzImage", digamos. Nunca copie initrd ni System.map y ningun problema. ¿Cual es la necesidad de la mayoria de las distros de utilizar metodo de los tres archivos en vez de uno solo? En gentoo solo lo usa el genkernel, cuando es a mano no es necesario.¿Cual es la mejora o diferencia en usar estos archivos en el arranque?
Back to top
View user's profile Send private message
ensarman
Guru
Guru


Joined: 13 Apr 2006
Posts: 492

PostPosted: Thu Dec 11, 2008 4:33 am    Post subject: Reply with quote

el initrd es solamente una imagen de un minisistema operativo, es util para cargar modulos importantes que no esten comilados en el nucleo y son indispensables para el correcto booteo.

eso es util en kernels genericos que tiene que detectar el driver IDE, SATA(indispensables) para bootear, pero en kernels personalizados como los que hacemos en Gentoo, no veo mucho la necesidad de un initrd
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Spanish All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum