Páginas

viernes, 29 de mayo de 2009

Compilación en Debian del kernel (Debian way)

Fuente: http://kernel-handbook.alioth.debian.org/
Josep Jorba Esteve. Ingeniero superior y doctor en Informática por la UAB. Curso completo, (12 modulos) disponibles para descargar:
Master internacional de Software Libre Universidad Autonoma de Barcelona


En Debian, hay que añadir la configuración por el método denominado Debian Way. Un método que nos permite construir el kernel de una forma flexible y rápida.

Para el proceso serán necesarias una serie de utilidades (instalar los paquetes, o similares): kernel-package, ncurses-dev, fakeroot, wget, bzip2.

Podemos observar el método desde dos perspectivas, reconstruir un kernel equivalente al proporcionado por la distribución, o bien personalizarlo y utilizar así el método para construir un kernel equivalente personalizado.

En el primer caso, pasamos por obtener la versión de las fuentes del kernel que nos proporciona la distribución (sea x la revisión del kernel 2.6):

# apt-get install linux-source-2.6.x
$ tar -xvjf /usr/src/linux-source-2.6.x.tar.bz2

donde obtenemos las fuentes y las descomprimimos (el paquete deja el archivo en /usr/src).

Instalación de herramientas básicas:

# apt-get install build-essential fakeroot

Comprobar dependencias de las fuentes

# apt-get build-dep linux-source-2.6.x

Y construcción del binario, según configuración preestablecida del paquete
(semejante a la incluida en los paquetes image oficiales del kernel en Debian):

$ cd linux-source-2.6.x
$ fakeroot debian/rules binary

Existen algunos procedimientos extra para la creación de kernels en base a diferentes niveles de patch proporcionados por la distribución, y posibilidades de generar diferentes configuraciones finales (puede verse la referencia de la nota para complementar estos aspectos).

En el segundo caso, más habitual, cuando deseamos un kernel personalizado,
deberemos realizar un proceso semejante a través de un paso de personalización típico (por ejemplo, mediante make menuconfig), los pasos:

Obtención y preparación del directorio (aquí obtenemos los paquetes de la
distribución, pero es equivalente obteniendo las fuentes desde kernel.org):

# apt-get install linux-source-2.6.x
$ tar xjf /usr/src/linux-source-2.6.x.tar.bz2
$ cd linux-source-2.6.x

a continuación realizamos la configuración de parámetros, como siempre podemos basarnos en ficheros .config que hayamos utilizado anteriormente, para partir de una configuración conocida (para la personalización, también puede usarse cualquiera de los otros métodos, xconfig, gconfig...):

$ make menuconfig

construcción final del kernel dependiendo de initrd o no, sin initrd disponible (hay que tener cuidado con la versión utilizada; a partir de cierta versión del kernel, puede ser obligatorio el uso de imagen initrd):

$ make-kpkg clean
$ fakeroot make-kpkg --revision=custom.1.0 kernel_image

o bien si disponemos de initrd disponible (construido ya)

$ make-kpkg clean
$ fakeroot make-kpkg --initrd --revision=custom.1.0 kernel_image

El proceso finalizará con la obtención del paquete asociado a la imagen del kernel, que podremos finalmente instalar:

# dpkg -i ../linux-image-2.6.x_custom.1.0_i386.deb

Añadimos, también en este apartado, otra peculiaridad a tener en cuenta en Debian, que es la existencia de utilidades para añadir módulos dinámicos de kernel proporcionados por terceros. En particular la utilidad module-assistant permite automatizar todo este proceso a partir de las fuentes del módulo.

Necesitamos disponer de los headers del kernel instalado (paquete linux-headers-version) o bien de las fuentes que utilizamos en la compilación del kernel. A partir de aquí module-assistant puede utilizarse interactivamente, permitiendo seleccionar entre una amplia lista de módulos registrados previamente en la aplicación, y puede encargarse de descargar el módulo, compilarlo e instalarlo en el kernel existente.

También en la utilización desde línea de comandos, podemos simplemente especificar (m-a es equivalente a module-assistant):

# m-a prepare
# m-a auto-install nombre_modulo

Lo cual prepara el sistema para posibles dependencias, descarga fuentes del módulo, compila y, si no hay problemas, instala para el presente kernel. El nombre del módulo podemos observarlo de la lista interactiva de module-assistant.

No hay comentarios:

Publicar un comentario