# [kernel] compilación desde 0 [resuelto]

## Theasker

Hace tiempo que estoy con el 3.4.9 y al compilar el que hay ahora estable 3.6.11 arranca bien pero no me funicona el teclado. Aprovechando este contratiempo quería hacer una limpieza y saber que mi kernel está todo lo limpito  que puede estar y con lo mínimo.

El problema es que quitando drivers y file sistems que se más o menos lo que hay o no hay que poner, con lo del procesador y las demás opciones no se casi na. Las opciones que te avisa que si no sabes lo que es no lo conectes bien, pero hay muchas que no tengo ni idea de lo que es, incluso leyendo la ayuda.

¿Cómo sería lo más facil para dejarlo todo lo limpio posilbe y que no instale ni carge nada superfluo?

Si no cargo ningún .config, ¿ya van activadas las opciones necesarias mínimas, al menos para procesador, aunque no para drivers?

Gracias anticipadas y saludos a tod@s

----------

## Pablo S. Barrera

Si no copias el .config no te va a tomar nada de la vieja configuracion, pero el kernel, a pesar de que va a ser el basico va a necesitar los retoques necesarios para que corra en tu sistema. Hay una guia para seguir, donde hace incapie en: Filesystem, Ext2, ext3, ext4, reiserfs o los sistemas de archivos que tengas, eso no te lo olvides porque no arranca, y tambien el driver adecuado de tus discos.  Por las dudas no borres el viejo kernel. Cuando compiles el nuevo fijate el microprocesador que te toma. 

Si queres copia un lspci, modelo de mother y vamos armando el kernel. Lo más importante de todo esto es que vos sepas bien que hardware tenés, no es lo mismo compilar 20 drivers de cada placa que compilar el adecuado. A veces por las dudas es mejor que sobre y no que falte pero ahi esta el gran equilibrio entre funcionalidad y equilibrio.

----------

## Theasker

Entonces, según dices, si no copio el kernel anterior y lo dejo como está, se queda básico, por lo que si configuro el tipo de procesador, sistemas de ficheros (ext4,ext2...) y drivers varios, ¿debería funcionar sin configurar nada más? o debería configurar algo que no venga por defecto y que sea importante.

----------

## Pablo S. Barrera

Tenes que configurar, placas de audio, video, red, drivers sata/pata de tus discos, esto es fundamental. 

En esta guia esta todo explicadito, fijate de usar la de tu micro.

http://www.gentoo.org/doc/es/handbook/handbook-x86.xml?part=1&chap=7

----------

## Stolz

Para compilar un kernel "limpio", sin ninguna opcion seleccionada:

```
make allnoconfig
```

A partir de ahí, con make menuconfig seleccionas lo mínimo para que arranque. Si andas perdido lo mejor es seguir el proceso opuesto, es decir, ir quitando opciones hasta que no arranque o algo deje de funcionar.

----------

## cohone

 *Theasker wrote:*   

> Hace tiempo que estoy con el 3.4.9 y al compilar el que hay ahora estable 3.6.11 arranca bien pero no me funicona el teclado. Aprovechando este contratiempo quería hacer una limpieza y saber que mi kernel está todo lo limpito  que puede estar y con lo mínimo.
> 
> El problema es que quitando drivers y file sistems que se más o menos lo que hay o no hay que poner, con lo del procesador y las demás opciones no se casi na. Las opciones que te avisa que si no sabes lo que es no lo conectes bien, pero hay muchas que no tengo ni idea de lo que es, incluso leyendo la ayuda.
> 
> ¿Cómo sería lo más facil para dejarlo todo lo limpio posilbe y que no instale ni carge nada superfluo?
> ...

 

Que no funcione el teclado y raton me ha pasado varias veces al cambiar de kernel, se soluciona haciendo un emerge de los módulos de x11 

```
emerge -p @x11-module-rebuild
```

Saludos

----------

## Arctic

 *Stolz wrote:*   

> Para compilar un kernel "limpio", sin ninguna opcion seleccionada:
> 
> ```
> make allnoconfig
> ```
> ...

 

```
make mrproper
```

Salu2

----------

## Stolz

 *Arctic wrote:*   

>  *Stolz wrote:*   Para compilar un kernel "limpio", sin ninguna opcion seleccionada:
> 
> ```
> make allnoconfig
> ```
> ...

 

No es lo mismo Arctic. mrproper limpia el kernel, no lo compila. Con mrproper eliminas la configuración, todos los archivos generados por la compilación y algo más que no recuerdo bien. Vamos, te quedas solo con las fuentes.

Con allnoconfig en cambio lo compilas con el mínimo posible de opciones seleccionadas. Se supone que es ideal para hacer justo lo que prguntó Theasker es decir, deseleccionar todo lo superfluo e ir activano solo las cosas que necesites.

----------

## Arctic

 *Stolz wrote:*   

>  *Arctic wrote:*    *Stolz wrote:*   Para compilar un kernel "limpio", sin ninguna opcion seleccionada:
> 
> ```
> make allnoconfig
> ```
> ...

 

Ok, culpa mia por leer rápido...........

Vale la pena pulir tanto la configuración del kernel ???  Tampoco irse al extremo de poner todo en yes, pero salvo tener una imagen mas pequeña y liberar "ligeramente" la RAM ????

Salu2

----------

## papu

yo he tenido la paciencia de guardar un .config durante años( no recuerdo cuantos) e ir jugando con él segun mis actualizaciones del pc o ir quitando poco a poco cosas que no necesito poniendolas como MODULO siempre que sea posible hacerlo asi no ocupan sitio en la imagen y solo se cargan si son necesarias.

siempre he guardado varias versiones de .config para ir jugando con ellas a partir de una .config digamos raiz done todo se que va funcionar, lo demás de tanto mirar el .config te se quedan las cosas esenciales jajaja.

cargando anteriores .config con make oldconfig es lo que utilizo siempre. Antes de compilar nuevo kernel utilizo  make mrproper aunque ultimaente make distclean, antes de ahcer eso hay que acordarse de guardar el .config actual si es que te interesa hacerlo sino desaparece y cagada.

ahora estoy usando gentoo-sources pq me lo pide  ati-drivers, antes usaba kernels vainilla y tampoco había problemas.

sino se tiene un punto de referencia la mejor opcion es la que ha dicho Stolz   :Smile:  , sin perder el .config que tengas actulamente por si algo no tira.

saludos, ad1

----------

## gringo

 *Quote:*   

> Vale la pena pulir tanto la configuración del kernel ??? 

 

a ver, no tiene sentido tener habilitado drivers u otras funcionalidades que no se van a usar pero si alguien se espera que por tener un kernel con lo justo va a ser mas rápido o comer menos ram, me temo que la diferencia ( si es que la hay) no va a ser cuantificable. Si lo que se busca es un binario pequeño ( del kernel me refiero) entonces si se puede uno poner a investigar pero al final acabarás tirando de initrd.

Solo comentar que hay tb. un make defconfig , que viene siendo una configuración por defecto para la arquitectura seleccionada pero ya he leído en varios sitios que para entornos de "escritorio doméstico" no se debe usar porque está obsoleto.

saluetes

----------

## Stolz

A mi en mi casó si me valió la pena cuando lo usé en su día porque por aquel entonces compilar un kernel con opciones típicas podía tardar más de media hora. Desde entonces vengo compilando mis kernels con make oldconfig y cada año que pasa poco a poco se van marcando cosas nuevas y desmarcando cosas antiguas. Como ya dije antes, ahora que compilar y reiniciar es cuestión de minutos creo que es mejor partir de un kernel que te funcione e ir quitando opciones hasta que deje de arrancar o funcionar algo.

----------

## Yczo

Hola, para los que son novatos como yo y algun día nos gustaría saber lo que hacemos aqui aporto la que para mi es la guía semi definitiva (No he encontrado nada mejor en la web)

http://kernel-seeds.org/settings-00.html

Un cordial saludo

----------

## Theasker

gracias a todos, en cuanto consiga hacer funcionar el montaje de dispositivos y el poder apagar/reiniciar con mi usuario (supongo que problemas con consolekit) me pongo al tema con el kernel.

Me habéis ayudado bastante.

Un saludo a todos

----------

## deovex

Hace poco tuve que limpiar el kernel quitando opciones hasta que deje de funcionar.

¿Cuales son los pasos para compilar el kernel de manera correcta?

Lo que hago es simplemente copiar .config al nuevo kernel y luego hago make menuconfig y lo compilo. Nada mas. Debería hacer make oldconfig, make mrproper, etc?.

Saludos!

----------

## papu

 *deovex wrote:*   

> Hace poco tuve que limpiar el kernel quitando opciones hasta que deje de funcionar.
> 
> ¿Cuales son los pasos para compilar el kernel de manera correcta?
> 
> Lo que hago es simplemente copiar .config al nuevo kernel y luego hago make menuconfig y lo compilo. Nada mas. Debería hacer make oldconfig, make mrproper, etc?.
> ...

 

yo lo hago así:

kernel vanilla (o gentoo-sources):

1--------- cd  /usr/src/ y bajar nuevo_kernel wget  nuevo_kernel .

2---------    decomprimir:  tar -xvJf nuevo_kernel. Si usas kernel gentoo-sources los pasos 1) 2)  son automáticos y con el USE="symlink" incluye también enlazar al nuevo_kernel del paso 5)

3---------    copia de seguridad del .config si es que no se tiene ya cp linux/.config .config-anterior

4---------    limpieza de un kernel ya compilado (opcional y realizable cuando se quiera): cd /usr/src/linux  (este directorio ha de apuntar siempre al kernel en cuestión que se quiera limpiar) y  make clean o make mrproper o make distclean , de menor a mayor limpieza; yo uso distclean. Este paso es opcional si se quieren mantener varios kernels activos.

5---------     cd /usr/src/  y enlazar nuevo_kernel a linux:  ln -sfn nuevo_kernel  linux y cd  /usr/src/linux

6---------     make oldconfig carga las opciones de un .config anterior y pregunta por las nuevas, interactivamente, si existen.

7---------     make nconfig  para entrar en la configuración manual y grabar cuando sea necesario.

8-------- compilar el nuevo_kernel make -j && make modules_install && make install, make install copia el  bzImage y .config de la compilación recién efectuada  a /boot 

9--------  actualizar la configuración del grub para poder escoger el nuevo_kernel

10-------- suele ser necesario ( con actualizaciones mayores de versión del kernel  ej: 3.9.4 a 3.9.5, 3.9.5 a 3.1.0) o recomendable si algo falla o simplemente para asegurar el óptimo funcionamiento, re-compilar  drivers, módulos, algún servicio... (ej: los xf86, alsa, vhba, udev...), con el el nuevo_kernel compilado.

Yo suelo hacer esto y posterior reinicio:

```
emerge -av `eix xf86 --or alsa -I --only-names` udev dbus vhba ati-drivers -j4

```

Si se tienen varios kernels para cambiar el enlace simbolico(todo se compila teniendo en cuenta el kernel enlazado) de uno a otro se puede usar eselect, lo que sería equivalente a   ln -sfn nuevo_kernel  linux :

```
 ~ $ eselect kernel list

Available kernel symlink targets:

  [1]   linux-3.8.0-gentoo

  [2]   linux-3.8.1-gentoo *

~ $ eselect kernel

Usage: eselect kernel <action> <options>

Standard actions:

  help                      Display help text

  usage                     Display usage information

  version                   Display version information

Extra actions:

  list                      List available kernel symlink targets

  set <target>              Set a new kernel symlink target

    target                    Target name or number (from 'list' action)

  show                      Show the current kernel symlink
```

saludos, adéu

----------

## esteban_conde

Si se ha iniciado sesion con un kernel que marcha y solo se quiere actualizar a una version más nueva una vez descargado el nuevo_kernel  lo enlazamos a /usr/src/linux como root se puede hacer zcat /proc/config.gz >/usr/src/linux/.config

 y luego make oldconfig.

----------

## Theasker

Reabro este post porque hasta ahora no he tenido tiempo de conseguir arreglar el problema del teclado y ratón por lo que sigo con el kernel 3.4.9 y estoy intentando compilar el 3.8.13 y arranca perfectamente pero no funciona ni teclado ni ratón. 

No he cambiado ninguna configuración ni de ratón ni de teclado y he comparado con las opciones (de teclado) que tenía el el kernel viejo y no ha cambiado nada, no se muy bien porque no funciona.

Y problema de las X no puede ser, ya que no arranco en modo gráfico.

----------

## quilosaq

Publica el archivo de configuración (.config) del kernel con el que tienes problemas y la salida de:

```
file /boot/archivodelkernelquenova
```

----------

## Theasker

el .config

http://bpaste.net/show/108135/

y la salida

```
# file /boot/gentoo-3.8.13 

/boot/gentoo-3.8.13: Linux kernel x86 boot executable bzImage, version 3.8.13-gentoo (root@Theasker64) #1 SMP Tue Jun 11 22:16:06 CEST, RO-rootFS, swap_dev 0x4, Normal VGA

```

----------

## quilosaq

Creo que te falta HID_GENERIC. Lo tienes en:

```
Device Drivers  --->

  HID support  --->

    <*>   Generic HID driver
```

----------

## Theasker

Pues .... con eso está solucionado.

Por lo que se me plantea una duda, he comprado esa opción en el antiguo kernel y en el nuevo, porqué si en el antiguo está activada esa opción y compilé el nuevo copiando el .config de este y luego make oldconfig, esa opción desaparece. Se supone que mantiene las configuraciones que ya tenía.

Además no es problema de este último kernel, no lo había actualizado antes, porque a lo largo de todas las actulizaciones del kernel que ha habido desde la 3.4.9 me ha pasado lo mismo, es decir, con lo que se ahora, se había desconectado esa opción todas las veces que había hecho el make oldconfig en todos los kernels intermedios.

¿Cómo debería compilar a partir de ahora los kernels?, lo que pensaba que hacía bien se ha convertido en algo poco fiable. Cómo debería actuar a partir de ahora para actualizar los nuevos kernels.

Gracias por la ayuda.

----------

## papu

¿dices que tu anterior .config tiene esa opción puesta y al hacer make oldconfig te desaparece en el nuevo .config ?

pues usa a partir de ahora el .config nuevo con esa opción y no el anterior, pero es muy raro eso, cuando dices algo teiens que dar datos los demá no sabemos cual era tu anterior kernel ...quizás tu anterior kernel era "muy diferente" es decir antiguo respecto a este, pero vamos eso que tu dices a mi no me ha pasado nunca y mira que llevo años con el oldconfig jejeje.

has de hablar de .config-3.x.x  o de .config-2.x.x .... o publicar los .config  dentro ya pone la version del kernel de que procede.  

ves mirando a ver ahora ya sabes lo que ocurre.

saludos, ad1

----------

## Theasker

mi anterior kernel como digo arriba era el 3.4.9 y he copiado el .config de este a todos los kernels hasta el estable actual, es decir, 3.5.7, ..., 3.8.13, y todas las veces arrancaba y no me funcionaba ni teclado ni ratón, por lo que sabiendo lo que ahora se gracias a quilosaq, la opción Generic HID driver se desactivaba y no se porqué.

----------

## papu

pues usa el actual .config de ahora en adelante a ver, a mi es que eso no me ha pasado por ahora.

----------

## quilosaq

 *Theasker wrote:*   

> ...
> 
> ¿Cómo debería compilar a partir de ahora los kernels?, lo que pensaba que hacía bien se ha convertido en algo poco fiable. Cómo debería actuar a partir de ahora para actualizar los nuevos kernels.
> 
> ...

 

La opción oldconfig es bastante buena pero no infalible ¿por qué?. Este caso en un buen ejemplo. La entrada Generic HID driver aparece por primera vez en los menus de configuración de la serie 3.5. Si se hace un oldconfig con un .config de la serie 3.4 el configurador mantendrá las mismas configuraciones del kernel anterior pero para las que sean nuevas se le preguntará al usuario que hacer, ofreciéndole una opción por defecto. Aquí es donde puede introducirse un error, bien porque la opción por defecto no sea adecuada para nosotros, bien porque digamos a todo que si o que no, bien porque elijamos mal.

Normalmente oldconfig aceptando las opciones por defecto para las entradas nuevas (make oldconfig alldefconfig) es una buena elección.

Alternativamente está genkernel.

----------

## papu

el dice,o eso entiendo, que su anterior kernel ya tenía esa opción y al pasar a la nueva desaparece, en cambio tu dices que no estaba hasta la version actual... en fin da igual  :Smile: 

 oldconfig no elimina opciones sino que te avisa de las nuevas y si las quita es porque ya no van a usarse más o la han variado por alguan causa, hay que ir con un poco de cuidado y estar al tanto de las nuevas,  es practica, yo sino entiendo alguna nueva no la activo( o la pongo como modulo si veo que pude serme útil) asi me ahorro problemas. Yo suelo tener un kernel que se que me va cargar más el nuevo que estoy compilando por si la moscas.

saludos, ad1

----------

## Theasker

Ahora no estoy delente de mi gentoo, pero ayer lo que hice fue comparar esta opción en los 2 kernels y si que estaba, ese es el problema, si no hubiera estado, lo normal es que la hubiera seleccionado mal al darme la información en oldconfig, pero el problema es que, sin estar delante y no poder corroborarlo de nuevo, esa opción en el 3.4 ya estaba seleccionada y con oldconfig desaparece.

Lo que voy a hacer, y sabiendo el problema, es guardar el .config "bueno" y volver a hacerlo para comprobar lo que hace fijandome en las opciones que me da a elegir el oldconfig.

Ya contaré

----------

## quilosaq

 *papu wrote:*   

> ...
> 
> en cambio tu dices que no estaba hasta la version actual... en fin da igual
> 
> ...

 

No da igual.

 *Theasker wrote:*   

> ...
> 
> ayer lo que hice fue comparar esta opción en los 2 kernels y si que estaba
> 
> ...

 

No estaba. Míralo bien. Tu kernel 3.4:

```
Device Drivers

  HID Devices (NEW)

    Generic HID support

```

Tu kernel 3.8:

```
Device Drivers

  HID support

    Generic HID driver

```

Hay diferencias. La mas importante es que Generic HID support representa el símbolo HID en el archivo de configuración del kernel y Generic HID driver representa el símbolo HID_GENERIC que, repito, no estaba en la versión 3.4. oldconfig hace bien su trabajo.

----------

## Theasker

No me había dado cuenta de la diferencia, pero muchas gracias por la corrección y me quedo muchísimo más tranquilo.

Un saludo y muchas gracias de nuevo

----------

