# Extraño error al intentar acceder a /lib/modules/kern/build/

## ZaPa

Hola a todos, veamos, tengo un problema que es un tanto extraño, estube siguiendo el proceso para parchear los drivers de mi dispositivo usb para que permita inyección de tráfico, pues uno de los pasos es: 

```

cd /usr/src/linux/drivers/net/wireless/zd1211rw

make -C /lib/modules/2.6.19-gentoo-r5/build/ M=`pwd` modules

cd /usr/src/linux/net/ieee80211

make -C /lib/modules/2.6.19-gentoo-r5/build/ M=`pwd` modules

```

Pues cuando intento hacer eso, me dice que no existe el fichero o el directorio. Sin embargo, yo acceso a /lib/modules/ y la carpeta build se encuentra ahí, intento acceder a ella con un cd build y me dice lo mismo y estoy logeado como root.

¿Qué ocurre? Es algo muy extraño, ¿verdad?

Muchisimas gracías por su atención.

Espero respuestas.

Saludos.

----------

## jgascon

El directorio build que hay en /lib/modules/2.6.19-gentoo-r5 es un enlace simbólico, en mi máquina me dice lo siguiente:

```

jgascon@seiya /lib/modules/2.6.18-gentoo-r3 $ file build

build: symbolic link to `/usr/src/linux-2.6.18-gentoo-r3'

jgascon@seiya /lib/modules/2.6.18-gentoo-r3 $ ls -ld build

lrwxrwxrwx 1 root root 31 Feb  7 12:16 build -> /usr/src/linux-2.6.18-gentoo-r3

```

Lo que pasa con los enlaces simbólicos es que si borras el directorio al que apuntan, el enlace sigue ahí pero el directorio no y por tanto no puedes acceder. Asegurate de que exista el directorio al que apunta el enlace, seguramente no es ese el kernel que estás usando ahora mismo. Para saber el kernel que estás usando:

```

jgascon@seiya ~ $ eselect kernel list

Available kernel symlink targets:

  [1]   linux-2.6.18-gentoo-r2

  [2]   linux-2.6.18-gentoo-r3

  [3]   linux-2.6.18-gentoo-r3-old

  [4]   linux-2.6.18-gentoo-r4

  [5]   linux-2.6.18-hardened-r6 *

  [6]   linux-2.6.20-hardened-r2

  [7]   linux-2.6.20-hardened-r5

```

----------

## ZaPa

Hola jgascon, muchisimas gracías por tu respuesta, al parecer fué una confusión mía si usaba otro jeje.

Una pregunta, veamos, para aplicar los parches para dicho driver usb, necesito hacer lo siguiente:

```

cp /usr/src/linux/drivers/net/wireless/zd1211rw/zd1211rw.ko /lib/modules/MIKERNEL/kernel/drivers/net/wireless/zd1211rw/zd1211rw.ko

cp /usr/src/linux/net/ieee80211/*.ko /lib/modules/MIKERNEL/kernel/net/ieee80211/

cp /usr/src/linux/net/ieee80211/softmac/*.ko /lib/modules/MIKERNEL/kernel/net/ieee80211/softmac/

```

Eh ahí la cuestión, y es una cosa rarisima, si yo hago uname -a me responde que estoy usando el kernel:

uname -a:

```

Linux localhost 2.6.20-gentoo-r3 #10 SMP Thu Jul 12 05:59:03 CEST 2007 i686 Intel(R) Pentium(R) M processor 1.70GHz GenuineIntel GNU/Linux

```

Pero yo si me dirijo a /lib/modules/2.6.20-gentoo-r3/kernel/drivers/  ahi solamente encuentro 2 carpetas:

```

char  crypto

```

Y si me dirijo al primer kernel que tubé en la maquina: cd /lib/modules/2.6.17-gentoo-r7/kernel/drivers/    ahi si estan todas las carpetas, y también se encuentran las que busco en este caso.

```

acpi   bluetooth  firmware  ieee1394    isdn   message  parport  scsi

base   char       hwmon     infiniband  md     mmc      pcmcia   serial

block  cpufreq    ide       input       media  net      rtc      usb

```

Y mi pregunta és. No devería de aparecer todas esas carpetas en mi nuevo kernel? es muy extraño, o esto funciona así? porqué no entiendo esto si tengo diferente kernel porqué dichas carpetas se encuentran en mi 1º kernel?

Me podrían explicar más o menos?

Muchisimas gracías de verdad.

Saludos.

Espero respuestas.

----------

## jgascon

Los módulos que te aparecen en /lib/modules son los que tu hayas escogido crear al configurar el kernel al ejecutar "make menuconfig" y después has instalado usando "make modules_install". Si has cambiado la configuración de un kernel a otro es normal que cambie el contenido de "/lib/modules/MIKERNEL/kernel/". Por lo tanto deberías revisar la configuración de tu kernel e incluir los módulos que necesitas. 

Ten en cuenta que cada vez que ejecutas "make modules_install" se crea un nuevo directorio "/lib/modules/MINUEVOKERNEL" que si la versión del kernel es la misma puede sobreescribir la anterior, por eso antes de compilar el kernel haz una copia del directorio.

----------

## ZaPa

Hola de nuevo jgascon, muchas gracías por tu respuesta.

Veamos, no entiendo una cosa, si en mi 1º kernel que utilicé en mi gentoo, configure unos modulos he hicé make && make modules_install, si hasta ahí comprendo, pero lo que no entiendo porqué, en mi nuevo kernel (el 2.6.20-gentoo-r3), también he reconfigurado kernel varias veces, y he echo un make y un make modules_install y no se crean todas las carpetas que tengo en /lib/modules/MI1ºKERNEL a /lib/modules/2.6.20-gentoo-r3 esto es lo que no entiendo, si he reconfigurado kernel muchisimas veces con mi nuevo kernel porqué solamente tengo 3 carpetas en /lib/modules/2.6.20-gentoo-r3 y se encuentra en el antiguo? el kernel antiguo no devería de quedar en el olvido?

Si hago un make modules_install no deverían de colocarse todos los modulos marcados de mi kernel en /lib/modules/2.6.20-gentoo-r3?

Perdona mi confusión pero es un lío que tengo en mi cabeza.

Espero que me puedas ayudar.

Muchisimas gracías.

Saludos.

----------

## jgascon

Cada vez que haces "make modules_install" los módulos van a parar a /lib/modules/kernel-elquesea. Estos directorios no desaparecen cuando desinstalas un kernel (al menos eso creo ahora) porque cuando desinstalas el kernel desinstalas las fuentes del kernel pero no lo que has compilado. 

Ahora bien, aparte de los módulos que creas al compilar el kernel, también hay módulos que se instalan después al instalar los "drivers" de algunos dispositivos y también van a /lib/modules/kernel-elquesea. Para saber donde se instalarán estos drivers es preciso que el enlace /usr/src/linux sea correcto, en mi caso:

```

seiya ~ # ls -l /usr/src/linux

lrwxrwxrwx 1 root root 31 jul 12 17:39 /usr/src/linux -> /usr/src/linux-2.6.20-gentoo-r7

seiya ~ # uname -a

Linux seiya 2.6.20-gentoo-r7 #6 SMP PREEMPT Sat Jun 2 01:56:33 CEST 2007 x86_64 AMD Athlon(tm) 64 X2 Dual Core Processor 3800+ AuthenticAMD GNU/Linux

seiya ~ #

```

Si no coinciden lo único que tienes que hacer es eliminar el enlace y volverlo a crear con 'ln -s' pero apuntando al directorio de las fuentes del kernel correcto. Tambien lo puedes hacer con 'eselect kernel list' y 'eselect kernel set'.

Una vez que ya tengas bien el enlace vuelve a instalar los drivers de tu usb:

```

emerge -av net-wireless/zd1211 net-wireless/zd1211-firmware

```

Espero que esto te sea de ayuda  :Wink: 

----------

## ZaPa

Hola de nuevo.

El enlace esta perfectamente creado, ahún no comprendo porqué me ocurre esto.

uname -a:

```

Linux localhost 2.6.20-gentoo-r3 #10 SMP Thu Jul 12 05:59:03 CEST 2007 i686 Intel(R) Pentium(R) M processor 1.70GHz GenuineIntel GNU/Linux

```

ls -l /usr/src/linux:

```

lrwxrwxrwx 1 root root 22 may 10 13:04 /usr/src/linux -> linux-2.6.20-gentoo-r3

```

¿Alguna otra idea? 

Muchisimas gracías

Saludos, espero respuestas.

----------

## jgascon

Tienes que compilar el módulo para la pila 'ieee80211':

```

Networking  --->

     <M>   Generic IEEE 802.11 Networking Stack

```

Y el módulo para tu tarjeta, pero aquí hay un problema, porque yo no he encontrado soporte para tu tarjeta en los dos últimos kernels 2.6.20-r6 y r7, el r3 no lo he podido mirar porque no lo tengo instalado. Pero deberían estar aquí:

```

Device Drivers  ---> 

    Network device support  --->

         Wireless LAN (non-hamradio)  --->

```

Sólo encuentro para la "USB ZD1201" pero no para la "zd1211". Por otra parte puedes instalar el módulo mediante: 

```

emerge -av net-wireless/zd1211

```

Esto te instalará los siguiente módulos:

```

/lib/modules/TU_KERNEL/net/zd1211.ko

/lib/modules/TU_KERNEL/net/zd1211b.ko

```

Parece que el nombre de los módulos ha cambiado recientemente. Si estos módulos no te sirven prueba a buscar los que necesitas en la web del fabricante y compilalos a mano.

----------

## ZaPa

Veamos, yo lo que no entiendo es porqué, en /lib/modules/2.6.20-gentoo-r3 (que es el que tengo), no me aparecen ni la mitad de carpetas que me aparecen en /lib/modules/2.6.17-gentoo-r7 y eso que ya he recompilado kernel muchisimas veces con el nuevo kernel (2.6.20-gentoo-r3) y las carpetas, de los modulos de sonido y muchisimos más modulos están ahi.

No lo entiendo.

Saludos.

Espero respuestas

Muchisimas gracías.

----------

## Inodoro_Pereyra

Te queda claro que lo que quieras cargar dinámicamente se debe elegir dentro del kernel con la tecla M (por Módulo) y lo que quieras tener compilado estáticamente en el kernel lo seleccionas con la tecla Y cierto?

No será que en tu primer kernel 17-rX tenías muchas cosas cargadas dinámicamente que ahora en tu nuevo kernel 20-rX están marcadas como estáticas?

Es la explicación mas racional que se me ocurre.

Salud!

----------

## ZaPa

Hola a todos y muchas gracías por sus respuestas.

Inodoro_pereyra, gracías por tu respuesta.

Veamos, pero es igual como yo los tenga marcados, como modulos o con el (*), si actualizo a nuevo kernel, y despues entro al nuevo kernel, hago un: make menuconfig && make && make install, ¿nose deverían de copiar TODOS los modulos que tenga marcados y lo que no son modulos? (los que tengo marcados con el (*)). Lo caso es qué, en /lib/modules/kernelviejo/ tengo un monton de carpetas, que supuestamente son modulos y demás, por ejemplo tengo la carpeta sound,q ue ahi estan los modulos para el sonido, y en /lib/modules/kernelactual no está la carpeta sound ni la mayoria de carpetas (solo 2 carpetas) y ahún asi tengo sonido en mi gentoo.

Lo veo muy raro esto y ahún no lo termino de comprender.

Espero que no les sea molesto

Muchisimas gracías a todos.

Saludos.

Espero respuestas.

----------

## jgascon

Cuando configuras el kernel lo que marcas como [*] se integra directamente en el kernel (el archivo bzImage) y lo que marcas como módulos [M] se compila como módulo (los archivos .ko) y van a parar a /lib/modules/kernel-lo-que-sea.

Si al configurar el kernel nuevo has incluido todo el soporte directamente en el kernel (con la opción [*]) y sólo has compilado unas pocas opciones como módulo es normal que tengas menos directorios bajo /lib/modules/kernel-lo-que-sea. 

Normalmente se recomienda incluir sólo en el kernel aquellos drivers que se usen constantemente (placa, disco duro, sistema de archivos, etc) y dejar como modulos aquellos que no se usen tan frecuentemente (red, audio, etc). Ten en cuenta que contra más drivers incluyas directamente en el kernel, éste ocupará más espacio y el kernel está siempre cargado en memoria.

----------

## Inodoro_Pereyra

Y para terminar de aclarar lo que ya de por sí aclaró el amigo jgascon:

Si compilas como [M] no necesitas reiniciar la pc para aplicar los cambios. Basta con cargar el modulo con modprobe para usarlo inmediatamente.

Si compilas como [*] hay que copiar la nueva bzimage a tu /boot/ reemplazando el kernel viejo por el nuevo y reiniciar la pc para aplicar los cambios.

Salud!

----------

