Como utilizar MODEM Baycom en Linux
Introducción
El driver original de
baycom para Linux fue desarrollado por el colega
Thomas M. Sailer, HB9JNX/AE4WA,
[email protected]
Originalmente se trataba de
un solo controlador, llamado “baycom” el cual creaba los dispositivos bc0, bc1,
bc2 y bc3.
A partir de 1998 el driver fue separado en diferentes drivers
independientes, los cuales se adaptan a las necesidades de cada tipo de MODEM
baycom que se utilice.
Desde aquí los dispositivos
creados varían de nombre de acuerdo con el tipo de driver baycom a utilizar. No
se denominarán mas bc0, bc1 etc. Esto puede crear alguna confusión si
recurrimos a documentación antigua, o a versiones del kernel anteriores a 1998.
En principio debemos
determinar cual de los drivers baycom se adapta al MODEM que utilizaremos.
Repasemos cada uno de ellos:
baycom_ser_fdx
Este controlador soporta
los MODEM de tipo SER12 y es capaz de operar tanto en half-duplex como en
full-duplex. La velocidad (baud rate) puede ser ajustada y se adapta a la mayoría de los casos. Los
dispositivos por crear serán:
bcsf0, bcsf1, bcsf2 etc.
Comúnmente se utilizarán
módems con TCM 3105 a través de puerto serial.
baycom_ser_hdx
Se trata de un driver
alternativo que solamente soporta 1200 baudios en half-dulplex. Creará los
dispositivos bcsh0, bcsh1 etc.
El autor recomienda
utilizar este controlador si el baycom_ser_fdx no funciona correctamente con el
UART que utilicemos.
baycom_par
Este driver, para puerto
paralelo soporta los MODEM conocidos como
“par96” y “picpar” Creará los dispositivos: bcp0, bcp1, etc
baycom_epp
Este es un driver para los
módems del tipo “epp” que están diseñados para operación a velocidades mayores y
por puerto paralelo. Creará los dispositivos
bce0, bce1, etc
Como en la mayoría de las
necesidades de radioaficionados, habrá que compilar un nuevo kernel capaz de
soportar el protocolo AX.25 y los dirvers adecuados. El kernel genérico
instalado por Linux no está preparado, aunque el código fuente nos ofrece todas
las herramientas como para armarlo a medida.
No describiremos aquí todas
las opciones a incluir para un correcto funcionamiento del sistema. Tan sólo
nos limitaremos a describir las opciones necesarias para operar AX.25 con MODEM
baycom.
Recordemos que solamente una cuidadosa selección de las opciones
en concordancia con todo nuestro hardware nos garantizará el correcto
funcionamiento del sistema.
Para esta descripción
utilizaremos Código fuente del kernel 2.4.19 (último kernel estable al momento
de este documento)
En Linux es posible
utilizar un kernel con los dirvers incluidos en él, o bien crearlos como
módulos, para poder cargar y descargarlos según lo necesitemos.
Si nuestra intención es
armar un kernel con los drivers incluidos (built in), en la sección Amateur
Packet Radio seleccionaremos lo siguiente:
[*] Amateur Radio Support
<*> Amateur Radio
AX.25 level 2 Protocol
AX.25 Network Device Drivers
---à
<*> baycom
ser12 fullduplex driver for AX.25
<*> baycom ser12 halfduplex driver for AX.25
<*> picpar and par96 driver for AX.25
<*> epp driver for AX.25
Como vemos aquí tenemos los
cuatro drivers baycom disponibles. Podemos seleccionar todos, o tan solo
aquel/aquellos que necesitemos.
Si nuestra intención es
armar un kernel con los drivers construidos como módulos, en la sección Amateur
Packet Radio seleccionaremos lo siguiente:
[*] Amateur Radio Support
<M> Amateur Radio AX.25
level 2 Protocol
AX.25
Network Device Drivers ---à
<M> baycom ser12 fullduplex driver for AX.25
<M> baycom ser12 halfduplex
driver for AX.25
<M> picpar and par96 driver
for AX.25
<M> epp driver for AX.25
En
el caso de necesitar alguno de los dirvers que operan sobre puerto paralelo,
será necesario habilitar otra opción en el momento de la compilación del
kernel:
Parallel
port support ---à
<M> Parallel port support
Repasemos
los pasos para compilar el kernel:
Comúnmente
el código fuente lo encontraremos en el dir:
/usr/src/linux
allí,
ejecutaremos los siguientes comandos:
make
mrproper Prepara archivos
para compilar
make
menuconfig Presenta el menú
contextual de selección
make
dep Establece las
dependencias
make
clean Limpia
elementos innecesarios
make
bzImage Compila el nuevo
núcleo
make
modules Compila los módulos
make
modules_install Instala los módulos
en el dir /lib/modules
Nuestro
nuevo kernel se ubicará en:
/usr/src/linux/arch/i386/boot/bzImage
Este
archivo lo copiaremos a nuestro directorio de boteo y luego haremos las
modificaciones necesarias en /etc/lilo.conf para que al reiniciar la máquina
encontremos disponible nuestro flamante kernel con soporte para modem baycom.
NOTA: Un error frecuente al reiniciar con el nuevo kernel, se debe a la selección del tipo de microprocesador. Si tenemos algún problema, podremos seleccionar procesador 386, el cual será compatible con una gran cantidad de hardware, incluso Pentium y AMD.
Si
elegimos compilar con los dirver incluidos en el kernel, podremos dedicarnos
directamente a la configuración de los dispositivos.
Si
optamos por compilar los módulos, deberemos cargarlos antes de configurar:
modprobe
ax25
modprobe
baycom_ser_fdx (o el driver baycom que
necesitemos)
Recordemos
algunos comandos para el manejo de módulos:
insmod
nombre_del_modulo Carga el
módulo
modprobe
nombre_del_modulo Carga el
módulo y módulos dependientes
lsmod Muestra
la lista de módulos cargados
rmmod
nombre_del_modulo Descarga
un determinado módulo
Recordemos
que los módulos se pueden cargar con el comando “insmod”, pero para que
funcione satisfactoriamente habrá que cargar en orden el resto de los módulos
dependientes. Por ello si utilizamos “modprobe” se cargaran de forma
inteligente todos los módulos necesarios que dependan del indicado.
Una
vez que hemos boteado con el nuevo kernel (y cargado los módulos si fuere
necesario) deberemos configurar los dispositivos a utilizar. Estas herramientas
de configuración están incluidas en el paquete de utilidades ax25 conocidos
como:
“ax25-utils”
Es recomendable instalar este
paquete completo en nuestro sistema ya que nos proveerá de herramientas
indispensables para diferentes usos. La versión que yo utilizo es:
ax25-utils-2.1.42a-3.i386.rpm
Este paquete auto-instalable lo podremos bajar de:
y lo instalaremos con:
rpm
–i ax25-utils-2.1.42a-3.i386.rpm
Si lo deseamos, o si la
distribución que utilicemos no soporta paquetes rmp, podremos buscar una versión en código fuente y compilarla e
instalarla a nuestro gusto.
Ahora,
procederemos a liberar el puerto serial que vamos a utilizar.
Recordemos
que en linux las denominaciones son diferentes a D.O.S:
COM1 ttyS0
COM2 ttyS1
COM3 ttyS2
COM4 ttyS3
Supongamos
que elegimos el “ttyS1” (COM2), con el driver baycom_ser_fdx.
Lo liberaremos, para dejar que el driver del
baycom lo pueda utilizar:
En
una terminal ejecutaremos:
setserial /dev/ttyS1 uart
none
Ahora
sí, utilizaremos la ax25-util conocida como “sethdlc” para configurar el
dispositivo:
sethdlc –i bcsf0 –p mode
“ser12” io 0x2f8 irq 3
Así
quedará creado el dispositivo bcsf0, el cual podremos observar con el comando:
ifconfig
bcsf0
Ya
estamos en condiciones de asignar a ese dispositivo nuestra licencia de
radioaficionado y la ip correspondiente:
ifconfig bcsf0 44.153.32.70
hw ax25 lw2dtq
Ahora
rutearemos por allí las direcciones de
ips que necesitemos. Por ejemplo:
route
add 44.153.32.83 bcsf0
Cada
aplicación AX.25 lee un archivo que le proveerá las configuraciones según el
puerto que se utilice.
Este
archivo se aloja en:
/etc/ax25/axports
Se
puede crear con un procesador de texto común, y su formato es el siguiente:
# /etc/ax25/axports
#
#
# name callsign speed paclen window description
#
bcsf0 LW2DTQ 1200 256 4 Modem Baycom en VHF
bcsf1 LW2DTQ-3 1200 512
4 Modem Baycom en UHF
scc0 LW2DTQ-4 4800 512
4 Placa SCC
Como
vemos en este ejemplo, hemos cargado dos puertos baycom y un puerto scc. Claro
está que si tenemos un único MODEM, solo bastará la primera línea. En este
ejemplo observamos que cada puerto necesita la señal distintiva con SSID diferentes, y así poder asociarlas
correctamente al dispositivo correspondiente.
Para
ajustar los parámetros ax25 recurriremos una vez mas a la utilidad “sethdlc”
Con
ella podremos configurar, txdelay, txtail, persist, slotime, y e indicar si
opera full o half duplex. Los valores se expresan en múltiplos de 10 milisegundos.
Es
necesario utilizar a opción –a para cargar los parámetros, y la opción –i para
indicar el dispositivo a calibrar:
Ejemplo:
sethdlc
-i bcsf0 -a txd 200 txt 50 slot 100 ppersist 220 half
Otra opción para ajustar los parámetros ax25 es
utilizar la utilidad kissparms.
Hasta
este punto estamos en condiciones de salir al aire utilizando el kernel del
linux, sin necesidad de ningún programa adicional.
Pero si nuestra intención es correr un
programa del tipo NOS, es posible usar el dispositivo ya creado y asociarlo
para que pueda ser utilizado simultáneamente.
Para esta tarea necesitaremos otra utilidad
ax25 llamada:
net2kiss
Esto
nos permitirá crear una pseudo terminal que vinculará el dispositivo del kernel
con el dispositivo “atachado” en el Jnos/Tnos. Esta pseudo-tty se la considera
como un enlace con dos extremos. Del lado del kernel se llamará:
ptyp0,
ptyp1, ptyp2 etc.
Y
del lado del jnos:
ttyp0, ttyp1, ttyp2 etc
Recordemos
que siempre trabajarán en pares, y que el numero del dispositivo virtual debe
coincidir en ambos extremos.
Por
ejemplo, crearemos en el kernel una pseudo-tty que enlace al Jnos para el
dispositivo baycom bcsf0:
net2kiss -i bcsf0 /dev/ptyp0 &
Ahora
en el otro extremo (un attach de Jnos) crearemos el puerto con:
attach asy ttyp0 - ax25 2m
1024 256 38400
NOTA:
El símbolo & (ampersand) al final de los parámetros del
comando net2kiss hace que el proceso quede en background. Es decir que continúe
ejecutándose, aunque no lo veamos.
Para no generar conflictos, debemos asignar números Ip diferentes al kernel y al jnos.
Mas
detalles sobre Jnos/Tnos se pueden encontrar en el documento destinado a placas scc en http://www.qsl.net/lw2dtq/scc.htm
12
de septiembre de 2002
Diego
de Nicolás
LW2DTQ
*Agradecimiento a Claudio (LU7ARM)