HowTo: Compilar Zaptel/DAHDI en un entorno Xen

A raiz del comentario de un usuario me he acordado de un post que tenía en mente pendiente desde hace tiempo: un pequeño HowTo para compilar Zaptel o DAHDI en un equipo con Xen.

El problema que tenemos a la hora de compilar ztdummy o dahdi_dummy en Xen es la fuente de timming. En las versiones actuales de Zaptel y DAHDI el timming (cuando no tenemos tarjetas) se puede obtener de tres fuentes:

  1. El HPET.
  2. El RTC.
  3. El tick del sistema (opción CONFIG_HZ)

En Xen (si usamos el kernel oficial 2.6.18 parcheado) no tenemos disponibles ni la primera ni la segunda opción, pero Zaptel se cree que SÍ que tenemos acceso al RTC, y por tanto falla.

Para solucionarlo tenemos que editar el fichero ztdumy.c o dahdi_dumy.c y localizar la siguiente sección:

/*
* NOTE: (only applies to kernel 2.6)
* If using an i386 architecture without a PC real-time clock,
* the #define USE_RTC should be commented out.
*/
#if defined(__i386__) || defined(__x86_64__)
#if LINUX_VERSION_CODE >= VERSION_CODE(2,6,15)
/* The symbol hrtimer_forward is only exported as of 2.6.22: */
#if defined(CONFIG_HIGH_RES_TIMERS) && LINUX_VERSION_CODE >= VERSION_CODE(2,6,22)
#define USE_HIGHRESTIMER
#else
#define USE_RTC
#endif
#else
#if 0
#define USE_RTC
#endif
#endif
#endif

Si os fijáis el comentario ya nos indica lo que tenemos que hacer: comentar las líneas correspondientes para que no se defina el flag USE_RTC. Para ello modificamos el código anterior dejándolo así:

/*
* NOTE: (only applies to kernel 2.6)
* If using an i386 architecture without a PC real-time clock,
* the #define USE_RTC should be commented out.
*/
#if defined(__i386__) || defined(__x86_64__)
#if LINUX_VERSION_CODE >= VERSION_CODE(2,6,15)
/* The symbol hrtimer_forward is only exported as of 2.6.22: */
#if defined(CONFIG_HIGH_RES_TIMERS) && LINUX_VERSION_CODE >= VERSION_CODE(2,6,22)
#define USE_HIGHRESTIMER
#else
//#define USE_RTC
#endif
#else
#if 0
//#define USE_RTC
#endif
#endif
#endif

De esta manera, Zaptel o DAHDI compilarán sin problemas en un entorno Xen y podremos utilizar el dummy driver necesario para MeetMe o el IAX trunking.

10 thoughts on “HowTo: Compilar Zaptel/DAHDI en un entorno Xen

  1. Muchas gracias por la guía, pero creo que estoy fallando en algo.

    Instalé el kernel-xen-devel via yum y bajé la ultima versión de dahdi (2.1.0). Modifiqué el archivo que indicas en el post y luego intenté compilar las fuentes.

    Me sale el mismo error de siempre

    «You do not appear to have the sources for the 2.6.18-xen kernel installed»

    Creo que me estoy equivocando en algo…

    Que será? 🙂

  2. Seguimos con la telenovela 🙂
    Ahora, modificando el Makefile, logré instalar Dadhi (versión 2.1.0.1) Antes del make comenté la lineas indicadas en el archivo dahdi_dumy.c

    Todo sale bien. He compilado nuevamente Asterisk y me sale con dahdi, meetme y todo lo demás.

    He modificado el archivo /etc/dahdi/modules y comentado todo lo que aparece (ya que no tengo tarjetas instaladas)

    El problema es que cuando intento arrancar dahdi
    /etc/init.d/dahdi start
    me sale:
    Loading DAHDI hardware modules:
    FATAL: Module dahdi not found.
    y en el log de asterisk:

    ERROR[3861] codec_dahdi.c: Failed to open /dev/dahdi/transcode: No such file or directory

    Que será?

    Gracias de antemano

  3. He compilado primero dahdi-linux-2.1.0.1 con make, luego dahdi-tools-2.1.0.1 pero sin pasar por el make menuselect.

    Cuando he vuelto a compilar asterisk 1.6.0.1 todos los módulos y aplicaciones relacionadas con dahdi salían ya preseleccionadas.

    El problema aparece solamente cuando arranco el daemon de dahdi y asterisk

    para compilar dahdi en la carpeta /lib/modules tenia dos carpetas:

    2.6.18-92.1.18.el5 2.6.18-92.1.18.el5xen 2.6.18-xen

    Escogí 2.6.18-92.1.18.el5xen

    En /usr/src/kernels tenia

    2.6.18-92.1.18.el5-x86_64 2.6.18-92.1.18.el5-xen-x86_64

    escogí

    2.6.18-92.1.18.el5-x86_64

    Quizás me equivoqué en eso 🙂

    La verdad ya no se por donde andar…

    Pero, a pesar de todo, soy optimista 🙂

    Chao y muchas gracias de antemano

  4. Bueno y cuando tienes tarjestas que pasa? o que procedimiento se sigue? (en mi caso tengo una Digium TE410p)

    gracias

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *