Como compilar un módulo sin recompilar todo el kernel (en OpenSuSE 10.2)

Este documento describe como solucioné la siguiente situación:

Después de actualizar la distribución GNU/Linux de mi computadora, pasando de la versión 10.1 a la 10.2 de OpenSuSE me encontré que algunas aplicaciones no accedían a los dispositivos USB, ya que para esto necesitan poder ver la carpeta /proc/bus/usb.

El tema en cuestión es que el kernel por defecto que viene con la distribución no tiene habilitada la opción “USB device filesystem” con lo cual no es posible montar el sistema de archivos virtual usbfs.

Ante este problema tenía que encontrar una solución. En varios foros se recomendaba recompilar el kernel, tarea que si bien en alguna época hacía habitualmente, en la actualidad le esquivo bastante. La inquietud aquí era, si por ejemplo los drivers propietario de la placas de video, pueden compilar solo los módulos que necesitan, entonces tiene que ser posible compilar un solo módulo, en vez de todo el kernel.

Con esta idea empecé a investigar, sin mucho éxito, hasta que en la lista del Lugro me tiraron varios datos, que apuntaban a que si es posible realizar esta compilación. Con esto me dedique a probar con resultado satisfactorio, al final obtuve el módulo usbcore.ko recompilado y funcional, sin necesidad de recompilar todo el kernel.

Los pasos a seguir son los siguiente:

1) Se deben instalar los fuentes del kernel, en mi caso ya los tenía instalados en la carpeta /usr/src/linux, pero para esta prueba copie todo el contenido a una carpeta temporal en mi home (${home}/tmp/kernel/)

2) Abro una consola y me posisiono en la carpeta dende están los fuentes del kernel.

3) ejecuto los siguientes comandos:

#> make clean
#> make cloneconfig

Este comando sirve para copiar la configuración del kernel actual en el archivo .config utilizado para compilar el kenrel

#> make menuconfig

En el menú de configuración del kernel voy a:

Device Drivers –> USB Support –> USB device filesistem

menuconfig

Activo esta opción y saldo guardando el resultado.

Bien ahora hay que compilar solo el módulo “usbcore” y para esto ejecutamos lo siguiente:

#> make modules_prepare

#> make SUBDIRS=drivers/usb/core modules

Listo tenemo el modulo compilado, solo queda copiar el archivo drivers/usb/core/usbcore.ko a /lib/modules/{version}/kernel/drivers/usb/core

Ejecutamos depmod -a

y Reiniciamos (o desactivamos todos los modulos usb y los volvemos a cargar)
Listo tenemo la distribución OpenSuSE 10.2 con soporte para usbfs.

17 pensamientos en “Como compilar un módulo sin recompilar todo el kernel (en OpenSuSE 10.2)

  1. Buena guia!! Funciono bien en wmware workstation 5.5.3. Sin embargo cuando pongo la memoria usb en suse, aparecen continuamente muchas ventanas emergentes que dicen detectar el dispositivo y preguntan si deseas abrirlo en konqueror, solo se detienen hasta hacer una expulsion segura. Pero la luz del USB continua prendida (aun no desmontado del todo).

    Tengo una pregunta…¿solo hay que activar -USB device file system- o tambien es necesario activar -the share table of common- ?

    ver post #7 en:
    http://www.forosuse.org/forosuse/showthread.php?t=10242

    AldoZC

  2. Solo es necesario activar el USB device filesystem con eso alcanza.

    En cuanto a la memoria USB no te podría decir que sucede. Proba desmontar el sistema de archivos usbfs. En mi caso particular monto varios dispositvos de memoria USB y no se presenta ese problema. (camara de fotos, discos, telefono, etc).

    Exitos.

  3. Hola Lorenzo.
    Es correcto que tenga solo la opción para desactivar o no el usb_devicefs, ya que el soporte para éste se compila dentro del módulo usbcore. Por eso tenes que recompilar este módulo, solo que activando además el soporte para usb_devicefs.

    Exitos

    Omar

  4. Hola magnifico:

    Estupendo trabajo, gracias a esta guia podemos activar el usbFS en el kernel a punto rapidamente cada vez que se descarga un nuevo parche.

    Sólo falta una cosa, la primera operación de este proceso es hacer logon como root (típicamente con su) para poder hacer todas las operaciones de make del kernel (parece que tú trabajas directamente como root).

    Un saludo y gracias.

    El Fontanero

  5. bueno aqui un problema aversi me puedes ayudar va todo bien hasta que hago el make menuconfig

    HOSTLD scripts/kconfig/mconf
    HOSTCC scripts/kconfig/lxdialog/checklist.o
    In file included from scripts/kconfig/lxdialog/checklist.c:24:
    scripts/kconfig/lxdialog/dialog.h:31:20: error: curses.h: No existe el fichero o el directorio

    todo comienza con ese error y de ahi se desencadenan muchos y no prosigue, no sabes que librerias me puedan faltar?? por que el kernel-source, no se que libresias se ocupen, me pueden ayudar?

  6. Probablemente el problema que tenés, es la falta de las librerías ncurses, en mi sistema tengo instalados los siguientes páquetes:

    yast2-ncurses-2.14.4-3
    ncurses-devel-5.5-42
    php5-ncurses-5.2.0-10
    ncurses-5.5-42

    Verificálo ejecutando:

    #> rpm -qa | grep ncurse

  7. mi pregunta es:

    tengo un modem usb, y no puedo entrar a internet porque no lo detecta como conectado por falta de este modulo

    cuando hago este procedimiento, me dete4ctará el modem??????????

  8. Si el modem USB esta soportado por el kernel y no esta compilado por defecto, este procedimiento se aplicaría a tu necesidad.
    Probá y fijate que pasa una vez compilado. No se pierde nada ya que no rompemos el kernel por defecto.

  9. Pingback: NW-E003F y VMware. It’s alive!! « Keep Walking

  10. Respondiendo a #

    Comentario por Roberto — 15 – Marzo – 2007 @ 11:40 pm

    Yo tenía el mismo error que le sucedia a él cuando queria ejecutar el comando

    #> make menuconfig

    pero se resuelve instalando en el YaST2 > Software Management

    -ncdu
    -ncurses
    -ncurses-devel
    -php5-ncurses
    -yast2-ncurses

    ¡ Suerte !

Responder a Gustavo Serrano Cancelar respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s