# [kernel] Recompilar correctamente el kernel (abierto)

## luisfe55

¡Hola a todos!

Soy nuevo, disculpen si mi pregunta es tonta: ¿Cómo se recompila el kernel cuando inicialmente se nos olvidó darle soporte a algo?

Sucede que no activé como módulo el soporte para mi tarjeta de red, lo cual me impide continuar con la instalación, así que me gustaría recompilar el kernel desde el sistema ya instalado, en lugar de tener que regresar al cd de instalación mínima.

Hice lo siguiente:

- Entro como root

-

```
# cd /usr/src/linux

# make menuconfig
```

activo el modulo que necesito y

```
# make && make modules_install

# cp arch/i386/boot/bzImage /boot/bzImage-2.6.23-gentoo-r9
```

pero no parece funcionar por algún motivo...  :Sad: 

Les agradecería mucho si pudieran ayudarme.Last edited by luisfe55 on Fri Mar 14, 2008 10:45 pm; edited 1 time in total

----------

## inconexo

Hola!

te comento como lo hago yo; mira, con "eselect kernel list" ves que kernel estan disponibles en tu gentoo, y con "eselect kernel set n", haces que uno u otro sea el kernel en tu sistema (no es mas que una forma de cambiar el enlace simbolico a /usr/src/linux)

bien, como suelo tener varias versiones del mismo kernel, voy a /usr/src/linux y antes de nada, edito el Makefile, para ponerle un nombre identificativo al kernel, como:

VERSION = 2

PATCHLEVEL = 6

SUBLEVEL = 23

EXTRAVERSION = -NOMBRE_DEL_SERVIDOR_MI_NUMERO DE_VERSION

NAME = Arr Matey! A Hairy Bilge Rat!

Como ves, el EXTRAVERSION es totalmente arbitrario, pero deja el guion alto del principio

En mi caso, tendre:

EXTRAVERSION = -Wells02

es decir, el servidor "Wells", la version "02" del kernel 2.6.23

Despues podras indentificar tu kernel en funcion de este nombre, por ejemplo:

1) uname -a: Linux wells 2.6.23-Wells02 #2 SMP Mon Feb 18 13:17:46 CET 2008 i686 Intel(R) Xeon(TM) CPU 2.66GHz GenuineIntel GNU/Linux

2) sabes que los modulos caen en: /lib/modules/2.6.23-Wells02

Bien, despues de editar el Makefile, haces un "make menuconfig", despues "make" y finalmente "make modules_install"

El /usr/src/linux/arch/i386/boot/bzImage es tu nuevo kernel; ese kernel lo copias en /boot (esta particion no debes de tenerla montada de forma habitual, por si se cae tu sistema, que esa particion no pueda estar en uso) con un nombre tambien identificativo de lo existente en el Makefile, como /boot/vmlinuz-2.6.23-Wells02

Y añades estas lineas en el /etc/lilo.conf

image = /boot/vmlinuz-2.6.23-Wells02

        root = /dev/sda4

        label = Wells07

        read-only

y haces un "lilo" para cargar la nueva configuracion

Como ves, muchas cosas son arbitrarias, pero conviene mantener un orden interno

Un saludo!

Pd. SI USO LILO, QUE PASA! :)

----------

## Stolz

Si no te encuentra el módulo a pesar de haberlo compilado tal vez no estás usando el mismo kernel que has compilado. 

 ¿estas iniciando un 2.6.23-gentoo-r9 y /usr/src/linux apunta a /usr/src/linux-2.6.23-gentoo-r9?

¿aparece el módulo que necesitas al ejecutar este comando?

```
find /lib/modules/`uname -r`/ -type f -iname '*.o' -or -iname '*.ko'
```

Si usas partición /boot ¿te acordaste de montarla?

inconexo, si no necesitas algo más concreto tal vez te puedas ahorrar el tener que editar a mano el Makefile con la opción LOCALVERSION, modificable desde el propio menuconfig

----------

## i92guboj

 *luisfe55 wrote:*   

> 
> 
> ```
> # make && make modules_install
> 
> ...

 

Lo más simple:

```

make && make install modules_install

```

Y nada más.

Es bueno mantener las cosas simples si no se necesita nada más. Por lo demás, como dicen arriba, tras arrancar el nuevo kernel, usa "uname -a" para comprobar no solo la versión, sino la fecha y hora de compilación. Ésto te servirá para saber si efectivamente has cargado el kernel recién compilado o algún otro. Vigila que tu /boot está montado al hacer el "install" (para todo lo demás da igual). Y asegúrate de que en tu grub.conf las cosas apuntan al lugar correcto, en la partición correcta.

----------

## Eleazar Anzola

 *luisfe55 wrote:*   

> ¡Hola a todos!
> 
> Soy nuevo, disculpen si mi pregunta es tonta: ¿Cómo se recompila el kernel cuando inicialmente se nos olvidó darle soporte a algo?
> 
> Sucede que no activé como módulo el soporte para mi tarjeta de red, lo cual me impide continuar con la instalación, así que me gustaría recompilar el kernel desde el sistema ya instalado, en lugar de tener que regresar al cd de instalación mínima.
> ...

 

Despues de todo lo que he visto colocar aqui, surge una pregunta aun más estupida pero que suele suceder ¿Hiciste modprobe modulo_de_tu_tarjeta_aqui? y si no es así ¿Puedes probar a ver que sucede? si no sabes cual es el modulo correcto de la tarjeta puedes hacer un 

```
ls /lib/modules/2.6.23-gentoo-r9/kernel/drivers/net
```

 con eso obtienes el nombre correcto del modulo al que debes hacer el modprobe. Si funciona y solo si funciona lo agregas al /etc/modules.autoload.d/kernel-2.6 con un vulgarius 

```
echo modulo_de_tu_tarjeta_aqui >> /etc/modules.autoload.d/kernel-2.6
```

----------

## hfernando

no me fije mucho en lo que decian las respuestas pero lo que yo aria seria: 

make clean 

despues un make menuconfig ,,etc ,,,etc,,

----------

## diegoto

interesante el "eselect kernel list" aunque solo cambie el link al directorio correspondiente.

gracias

----------

## johpunk

 *Quote:*   

> http://www.gentoo.org/doc/es/kernel-upgrade.xml

 

----------

## luisfe55

Gracias. Creo haber cometido un error de novato al no montar /boot.

Ahora hay un error que me quita el sueño: Sucede algo extraño cuando intento compilar, no parece hacerlo bien y pone el siguiente error:

```
dnsdomainname: Host name lookup failure
```

y termina de pronto la compilación como si lo hubiese hecho bien, pero no es asi.

¿Alguien tiene idea de lo que pudiera estar sucediendo?

----------

## luisfe55

Encontré como solucionarlo  :Wink:  la respuesta estaba perdida en un mensaje de un grupo de correo del 2004

http://readlist.com/lists/gentoo.org/gentoo-user/1/6698.html

Por alguna razón hostname no está en el runlevel default así que se hace lo siguiente:

```
# hostname <hostname here>

# echo <hostname> > /etc/hostname

# rc-update add hostname default

# echo 127.0.0.1 <hostname> >> /etc/hosts
```

y listo... el kernel parece compilar de manera normal

Gracias a todos

----------

## the incredible hurd

 *luisfe55 wrote:*   

> 
> 
> ```
> 
> # echo <hostname> > /etc/hostname
> ...

 

Eso ha quedado obsoleto y debe advertirlo cuando inicias el sistema, ahora ha pasado a estar en /etc/conf.d/hostname

y la sintaxis no es la misma, debe contener

HOSTNAME="tu_host_name"

----------

