Compilación y actualización del núcleo Linux
De Comunidad MoLinux, la enciclopedia libre.
Indicaciones para compilar un núcleo con las herramientas de Debian:
http://arco.inf-cr.uclm.es/mdoc-kernel.html
Indicaciones para añadir un driver a un dispositivo que no esté soportado:
En ocasiones, los fabricantes dan algo de soporte a la comunidad de usuarios de linux, proporcionando un driver o las especificaciones necesarias para programarlo.
En raras ocasiones el driver está lo suficientemente maduro como para funcionar en cualquier distribución. Normalmente los fabricantes son reticentes a soltar los fuentes y lo único que nos dejan es un binario para Redhat / Suse, haciendo prácticamente imposible usar el driver en otra distribución o incluso en una versión posterior de una de las anteriores.
En el caso de que sí tengamos un código fuente que podamos compilar, podremos tener al menos la oportunidad de integrar dicho driver en nuestra distribución y con el tiempo, seguramente el driver alcance la madurez suficiente como para que se integre en el propio núcleo de linux en una versión posterior.
Mientras este suceso se produce, sin embargo tenemos que compilar nuestro driver manualmente para poder usar el hardware.
El proceso de compilación muchas veces depende de lo bien programado que esté el driver. Por ejemplo el driver de Ralink siempre ha dado problemas ya que dependía del archivo versions.h que se generaba al hacer «makde dep» en el kernel 2.4. Cuando se pasó al kernel 2.6 este paso ya no era necesario y la forma de poder obtener dicho archivo era compilarse un kernel completo.
Si un driver está bien hecho, para compilarlo hay que hacer los pasos siguientes:
- Obtener el paquete de fuentes necesario para el driver
- Descomprimirlo
- Obtener las cabeceras del núcleo, paquete kernel-headers
- Descomprimirlo
- Ajustar los enlaces simbólicos del kernel en ejecución para que apunte a las cabeceras que hemos descomprimido.
Normalmente estos enlaces están en /lib/modules/kernel_version/build
- Ejecutar el comando siguiente en los fuentes del driver que queremos compilar:
make -C /lib/modules/version_nucleo/build SUBDIRS=`pwd` modules
Con estos pasos, un driver diseñado para el kernel 2.6 debería compilarse y generar un archivo driver.ko (driver es el nombre que hayan dado al módulo en cuestion.
Para probarlo, podemos ejecutar el comando insmod driver.ko y si todo va bien, el módulo se cargará y detectará nuestro hardware. A partir de entonces podemos configurarlo con las herramientas del sistema operativo si es necesario. <p>Muchas veces el módulo del kernel falla al compilarse porque quien lo diseñó se saltó las normas de programación del núcleo y usó funciones que no son estables (que no pertenecen al API), algún truco o característica del núcleo que se ha declarado obsoleta, etc.
Ésos módulos sólo los podremos compilar fácilmente con determinadas versiones del núcleo de linux. Los puntos de ruptura más comunes son en la línea 2.6, las versiones 2.6.5 2.6.8 y 2.6.12, por lo que es fácil encontrar drivers que sólo compilen en estos núcleos y uno o dos anteriores.

