View previous topic :: View next topic |
Author |
Message |
asph l33t
Joined: 25 Aug 2003 Posts: 741 Location: Barcelona, Spain
|
Posted: Fri Sep 24, 2004 9:48 am Post subject: [guia] compilando un kernel manualmente (en construccion) |
|
|
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):
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.
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 |
|
|
alexlm78 Veteran
Joined: 08 Dec 2003 Posts: 1265 Location: Guatemala,Guatemala
|
Posted: Sun Sep 26, 2004 8:19 am Post subject: |
|
|
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 |
|
|
ArsDangor Guru
Joined: 20 May 2003 Posts: 477
|
Posted: Sun Sep 26, 2004 9:29 pm Post subject: |
|
|
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 |
|
|
navegante l33t
Joined: 21 Jul 2004 Posts: 702
|
Posted: Sun Sep 26, 2004 10:11 pm Post subject: |
|
|
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 |
|
|
SapoDriLo n00b
Joined: 10 Jun 2004 Posts: 26 Location: Tlaxcala, Mexico
|
Posted: Mon Sep 27, 2004 5:46 pm Post subject: |
|
|
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 |
|
|
asph l33t
Joined: 25 Aug 2003 Posts: 741 Location: Barcelona, Spain
|
Posted: Wed Sep 29, 2004 9:41 am Post subject: |
|
|
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 |
|
|
Franco Gotusso Guru
Joined: 15 Apr 2004 Posts: 313 Location: Benidorm, Alicante, Spain
|
Posted: Wed Sep 29, 2004 6:52 pm Post subject: |
|
|
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 |
|
|
asph l33t
Joined: 25 Aug 2003 Posts: 741 Location: Barcelona, Spain
|
Posted: Wed Sep 29, 2004 9:55 pm Post subject: |
|
|
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 |
|
|
ArsDangor Guru
Joined: 20 May 2003 Posts: 477
|
Posted: Thu Sep 30, 2004 1:29 am Post subject: |
|
|
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 |
|
|
lunatc Guru
Joined: 18 Apr 2002 Posts: 409 Location: Canary Islands. Spain
|
Posted: Thu Sep 30, 2004 10:09 am Post subject: |
|
|
La verdad es que va quedando bien
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 |
|
|
oCHARLIEo Guru
Joined: 06 Oct 2003 Posts: 303 Location: Madrid
|
Posted: Thu Sep 30, 2004 12:06 pm Post subject: |
|
|
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 |
|
|
ArsDangor Guru
Joined: 20 May 2003 Posts: 477
|
Posted: Thu Sep 30, 2004 2:37 pm Post subject: |
|
|
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 |
|
|
asph l33t
Joined: 25 Aug 2003 Posts: 741 Location: Barcelona, Spain
|
Posted: Sat Oct 02, 2004 2:39 pm Post subject: |
|
|
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 |
|
|
viei n00b
Joined: 17 Sep 2004 Posts: 28
|
Posted: Sat Oct 02, 2004 10:07 pm Post subject: No se si ayudará mi método!!! genkernel |
|
|
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....
Saludos
Will |
|
Back to top |
|
|
Franco Gotusso Guru
Joined: 15 Apr 2004 Posts: 313 Location: Benidorm, Alicante, Spain
|
Posted: Mon Jan 10, 2005 4:09 pm Post subject: |
|
|
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 |
|
|
gepi n00b
Joined: 21 May 2005 Posts: 58
|
Posted: Thu May 26, 2005 11:24 pm Post subject: Instalando el kernel |
|
|
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 |
|
|
Stolz Moderator
Joined: 19 Oct 2003 Posts: 3028 Location: Hong Kong
|
Posted: Fri May 27, 2005 2:14 pm Post subject: |
|
|
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 |
|
|
esculapio Apprentice
Joined: 15 Nov 2003 Posts: 253
|
Posted: Wed Dec 10, 2008 12:42 pm Post subject: |
|
|
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 |
|
|
ensarman Guru
Joined: 13 Apr 2006 Posts: 492
|
Posted: Thu Dec 11, 2008 4:33 am Post subject: |
|
|
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 |
|
|
|