Creando el paquete deb del driver

17 03 2009

En este post voy a mostrar cómo crear el paquete Debian del driver de la tarjeta, sin el código fuente (ese lo crearemos en otro post distinto).
En este paquete vamos a colocar el fichero del módulo (piccumusb.ko) que se ubicará en /lib/modules/2.6.26-1-686/kernel/drivers/misc. También meteremos el fichero con las reglas para udev (explicaremos el funcionamiento de udev en otro post), el cual se usa para que cuando conectemos la tarjeta, teniendo el módulo del Kernel cargado, le asigne los permisos adecuados al fichero de dispositivo de la tarjeta (0666 en este caso).

Lo primero que necesitaremos es la ayuda de varias herramientas, si bien en este post no las usaremos todas.
sudo aptitude install maint-guide-es dh-make devscripts dpkg-dev autoconf automake dh-make debhelper devscripts fakeroot pbuilder

También necesitaremos descargarnos el fuente del driver, lo podemos descargar mediante Subversion, como explicamos en este post:
mkdir /tmp/piccumusb
$svn co https://piccumusb.svn.sourceforge.net/svnroot/piccumusb/driver/trunk /tmp/piccumusb

Puesto que necesitamos el modulo compilado, tendremos que tener a mano las cabeceras de nuestro núcleo
$sudo aptitude install linux-headers-`uname -r`

$cd /tmp/piccumusb
$ make clean
$rm -rf *.o *~ core .depend .*.cmd *.mod.c .tmp_versions *.bak *.symvers
$ make
make -C /lib/modules/2.6.26-1-686/build M=/tmp/piccumusb
make[1]: se ingresa al directorio `/usr/src/linux-headers-2.6.26-1-686'
LD /tmp/piccumusb/built-in.o
CC [M] /tmp/piccumusb/piccumusb.o
Building modules, stage 2.
MODPOST 1 modules
CC /tmp/piccumusb/piccumusb.mod.o
LD [M] /tmp/piccumusb/piccumusb.ko
make[1]: se sale del directorio `/usr/src/linux-headers-2.6.26-1-686'

Una vez compilado nuestro módulo sin errores, pasaremos a crear la estructura de nuestro paquete, para ello en primer lugar crearemos un directorio de trabajo donde colocaremos la estructura de nuestro paquete.
$mkdir /tmp/piccumusb-module-`uname -r`
$cd /tmp/piccumusb-module-2.6.26-1-686

Como dijimos antes nuestro módulo se instalará en /lib/modules/versión_de_nuestro_kernel/kernel/drivers/misc, mientras que la regla para udev se instalará en /etc/udev/rules.d, por ello necesitamos recrear la estructura de destino de nuestros ficheros para que al instalar el paquete estos se instalen en su lugar correcto.
mkdir -p /tmp/piccumusb-module-`uname -r`/lib/modules/`uname -r`/kernel/drivers/misc
mkdir -p /tmp/piccumusb-module-`uname -r`/etc/udev/rules.d

En el directorio /tmp/piccumusb-module-2.6.26-1-686/lib/modules/2.6.26-1-686/kernel/drivers/misc (la versión del Kernel puede variar) colocaremos el fichero de nuestro driver (piccumusb.ko)
cp /tmp/piccumusb/piccumusb.ko /tmp/piccumusb-module-2.6.26-1-686/lib/modules/2.6.26-1-686/kernel/drivers/misc

En el directorio /tmp/piccumusb-module-2.6.26-1-686/etc/udev/rules.d deberá ir el fichero 40-piccumusb.rules
cp /tmp/piccumusb/40-piccumusb.rules /tmp/piccumusb-module-2.6.26-1-686/etc/udev/rules.d

Una vez recreada la estructura de los directorios de destino, crearemos el directorio DEBIAN, en el cual colocaremos el fichero control y los scripts de pre/post-instalación/desinstalación.
mkdir /tmp/piccumusb-module-2.6.26-1-686/DEBIAN

En el fichero control se definen las dependencias del paquete, su autor, sección que ocupará el paquete en la jerarquía de Debian, etc. En nuestro caso, editaremos el fichero con nuestro editor favorito
emacs /tmp/piccumusb-module-2.6.26-1-686/DEBIAN/control
y colocaremos en él algo tal que así:

Package: piccumusb-module
Priority: optional
Section: devel
Installed-Size: 52
Maintainer: Joaquin Manuel Llano Montero
Architecture: i386
Version: 1.0
Depends:
Suggest: piccumusb-notifier (>= 1.0), piccumusb-gui (>=1.0), piccumusb-console (>=1.0)
Description: Modulo para el nucleo 2.6.26 de la piccumusb.

En cuanto a los scripts de pre/post-instalación/desinstalación, nosotros sólo necesitaremos dos de ellos, el de post-instalación (postinst), que se encargará de cargar nuestro módulo y de satisfacer las dependencias entre los módulos instalados y el nuestro mediante depmod. El otro script que necesitaremos se ejecutará antes de la desinstalación (prerm) y se encargará de descargar nuestro módulo del núcleo antes de borrarlo.
Estos scripts son como cualquier otro script de shell, vamos con el primero de ellos
emacs /tmp/piccumusb-module-2.6.26-1-686/DEBIAN/postinst
Este fichero debe quedar así:
#!/bin/bash
insmod /lib/modules/2.6.26-1-686/kernel/drivers/misc/piccumusb.ko
depmod -a

Hay que tener precaución de cambiar la versión del núcleo por la del que estemos creando el driver. No vale con usar uname -r como hemos hecho hasta ahora ya que alguien puede querer instalar el módulo para un kenel distinto del que está ejecutando.

Vamos ahora con el otro script, prerm:
emacs /tmp/piccumusb-module-2.6.26-1-686/DEBIAN/prerm
Éste deberá quedarnos tal que así:
#!/bin/bash
rmmod piccumusb

Una vez creados los scripts hay que cambiarles los permisos, si no las herramientas de creación de paquetes se quejarán de ello:
chmod 0555 posinst prerm

También tendremos que cambiar los permisos a los directorios:
$ find ./debian -type d | xargs chmod 755

Por último construiremos el paquete:
$cd /tmp
$fakeroot dpkg-deb --build piccumusb-module-2.6.26-1-686

En /tmp/piccumusb-module-2.6.26-1-686.deb tendremos nuestro paquete recién creado.

Para instalarlo basta con hacer
$sudo dpkg -i piccumusb-module-2.6.26-1-686.deb

Mientras que para borrarlo tendremos que hacer:
$sudo dpkg -r piccumusb-module

Una vez instalado, podremos ver si está instalado correctamente y el módulo se ha cargado mediante:
$ lsmod |grep piccumusb
Que nos dará una salida tal que así:
piccumusb 5856 0
usbcore 118160 6 piccumusb,uvcvideo,usbhid,ehci_hcd,uhci_hcd

También podemos ver los mensajes del núcleo y ver que nuestro driver está cargado:
$dmesg
[25360.473200] usbcore: registered new interface driver piccumusb

Por supuesto, podremos ver que el fichero del driver se encuentra en /lib/modules/2.6.26-686/kernel/drivers/misc y que las reglas para udev están en /etc/udev/rules.d

Si necesitáis más información sobre el sistema de paquetes de Debian y cómo crear vuestros propios paquetes
http://www.esdebian.org/articulos/23561/creando-paquetes-debian
http://www.debian.org/doc/manuals/reference/ch-package.es.html
http://informatica.escuelaedib.com/index.php?option=com_myblog&show=CA-mo-crear-tus-propios-paquetes-Debian.html&Itemid=59
http://www.esdebian.org/foro/24991/guia-crear-paquetes-deb
https://www.musix.org.ar/wiki/index.php/Como_hacer_un_paquete_deb
http://www.uv.es/uvdebian/pkg/
http://brutalchrist.wordpress.com/2009/02/05/debianizando/
http://www.debian.org/doc/manuals/maint-guide/ch-start.es.html
PD: sé que el paquete todavía no cumple con las directrices de Debian (si queréis comprobarlo basta con ejecutar lintian piccumusb-module-2.6.26-686.deb), pero es una prueba, lo iré puliendo y rellenaré este post con los cambios.

Anuncios

Acciones

Information

3 responses

25 03 2009
Construyendo el paquete para las notificaciones « PIC CUM USB

[…] Construyendo el paquete para las notificaciones 25 03 2009 El paquete de las notificaciones es muy parecido al del driver, cuya creación ya puse en su día. […]

8 06 2009
brutalchrist

Wow
Muchas gracias por utilizar mi entrada como referencia.
Muy agradecido.
Saludos 🙂

8 06 2009
Joaquín Manuel Llano Montero

Gracias a tí brutalchrist, me has servido de ayuda ;).

¡Saludos!

Responder

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 )

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 )

Google+ photo

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

Conectando a %s




A %d blogueros les gusta esto: