Asignación de puertos por número
Serial

Cuando disponemos de varios dispositivos entre ARS, Stacks, mandos de
antenas, etc y que se conectan a un mismo Host (equipo Linux por
ejemplo RaspBerry Pi) tenemos el inconveniente de no saber exactamente
cual es el dispositivo primero, segundo, etc puesto que Linux va
asignando sus nombres a medida que se encienden, con lo cual unas veces
uno puede ser el ttyACM00, ttyACM01 …

Ejemplo de 4 unidades conectadas en una RsPi:

pi@raspberrypi:~$ dir -1 -A -l
/dev/ttyA*


crw-rw—T 1 root dialout 166,  0
Sep  9 14:02 /dev/ttyACM0


crw-rw—T 1 root dialout 166,  1
Sep  9 14:03 /dev/ttyACM1


crw-rw—T 1 root dialout 166,  2
Sep  9 14:07 /dev/ttyACM2


crw-rw—T 1 root dialout 166,  3
Sep  9 14:07 /dev/ttyACM3

Muchas veces es necesario que cada ARS tenga asignado un nombre
predeterminado, así podremos asignar el servicio ser2net a cada unidad
asignando su correspondiente puerto.
Las últimas versiones del firmware de las unidades ARS, Stacks, etc
(p.e. en el ARS desde la V2.3A) incluyen un número de serie que podemos
usar para facilitar a Linux a reconocer a cada dispositivo, usando esta
característica del serial para crean una asociación.

Si tienes una versión anterior del software del ARS que no incluya esta
funcionabilidad, tendrás que actualizarlo y recordando que tendrás que
usar un número de serie diferente para cada ARS.

Se identifican fácilmente los serial de cada firmware por los últimos
digitos del nombre del binario, ejemplo:
–    rci-usb-boot_23e_00001.hex
–    rci-usb-boot_23e_00002.hex

El primero utiliza el serial 00001
y el segundo 00002

Si dispones de un equipo ARS con serial y quieres saber su número,
conecta el ARS a un equipo Linux (ARS apagado) y ejecuta el comando
siguiente:
    udevadm
monitor –-environment

Entonces enciendes el ARS y tendrás una salida similar a esta:


UDEV  [3740.322132]
add     
/devices/platform/soc/20980000.usb/usb1/1-1/1-1.4 (usb)


ACTION=add

BUSNUM=001

DEVNAME=/dev/bus/usb/001/013

DEVNUM=013

DEVPATH=/devices/platform/soc/20980000.usb/usb1/1-1/1-1.4

DEVTYPE=usb_device

ID_BUS=usb

ID_MODEL=USB_Serial

ID_MODEL_ENC=USB\x20Serial

ID_MODEL_ID=000a

ID_REVISION=0100

ID_SERIAL=EA4TX_USB_Serial_00001

ID_SERIAL_SHORT=00001

ID_USB_INTERFACES=:020201:0a0000:

ID_VENDOR=EA4TX

ID_VENDOR_ENC=EA4TX

ID_VENDOR_ID=04d8

MAJOR=189

MINOR=12

PRODUCT=4d8/a/100

SEQNUM=920

SUBSYSTEM=usb

TYPE=2/0/0

UDEV_LOG=3

USEC_INITIALIZED=3740321035

Nota: este listado es un extracto de la salida para UDEV.

Este es un ejemplo donde el ID_SERIAL vale 00001

Recuerda que tendrás que actualizar el firmware del ARS si éste no
incluye número de serie por medio de la utilidad ARS_Loader. Los numero
de serie se comenzaron a incluir apartir de la version 2.3
Configuración

Sabiendo el número de serie que queremos asociar, podemos crear una
regla asignando ese numero de serie a un nombre de puerto.

Sabiendo que un ARS-USB usa el ID_SERIAL = «00001”, vamos al directorio
del equipo Linux:
cd /lib/udev/rules.d
donde tendremos un montón de ficheros, añadiendo uno nuevo por ejemplo:

99-ars-usb.rules

Ejemplo:
sudo nano 99-ars-usb.rules

y añadiendo una linea por cada ARS-USB que queremos identificar, en
este ejemplo disponemos de 6 ARS y 4 stacks:

SUBSYSTEM==»tty»,
ATTRS{idVendor}==»04d8″, ATTRS{idProduct}==»000a»,
ATTRS{serial}==»00001″ , SYMLINK+=»ars01″


SUBSYSTEM==»tty»,
ATTRS{idVendor}==»04d8″, ATTRS{idProduct}==»000a»,
ATTRS{serial}==»00002″ , SYMLINK+=»ars02″


SUBSYSTEM==»tty»,
ATTRS{idVendor}==»04d8″, ATTRS{idProduct}==»000a»,
ATTRS{serial}==»00003″ , SYMLINK+=»ars03″


SUBSYSTEM==»tty»,
ATTRS{idVendor}==»04d8″, ATTRS{idProduct}==»000a»,
ATTRS{serial}==»00004″ , SYMLINK+=»ars04″


SUBSYSTEM==»tty»,
ATTRS{idVendor}==»04d8″, ATTRS{idProduct}==»000a»,
ATTRS{serial}==»00005″ , SYMLINK+=»ars05″


SUBSYSTEM==»tty»,
ATTRS{idVendor}==»04d8″, ATTRS{idProduct}==»000a»,
ATTRS{serial}==»00006″ , SYMLINK+=»ars06″


SUBSYSTEM==»tty»,
ATTRS{idVendor}==»04d8″, ATTRS{idProduct}==»000a»,
ATTRS{serial}==»S0010″ , SYMLINK+=»stack1″


SUBSYSTEM==»tty»,
ATTRS{idVendor}==»04d8″, ATTRS{idProduct}==»000a»,
ATTRS{serial}==»S0015″ , SYMLINK+=»stack2″


SUBSYSTEM==»tty»,
ATTRS{idVendor}==»04d8″, ATTRS{idProduct}==»000a»,
ATTRS{serial}==»S0020″ , SYMLINK+=»stack3″


SUBSYSTEM==»tty»,
ATTRS{idVendor}==»04d8″, ATTRS{idProduct}==»000a»,
ATTRS{serial}==»S0040″ , SYMLINK+=»stack4″

De esta forma, Linux asigna el symlink = ars01 al dispositivo que sea
igual a:
    IdVendor:  04d8
    IdProduct: 000A
    Serial:       00001
De forma similar con el resto.

Nota: Una vez salvado el
fichero, reinicia el equipo para que coja la configuración

A partir de ahora cada vez que se encienda el ARS (serial 00001), Linux
le asigna el nombre de dispositivo ars01 (y de forma análoga con el
resto)

Para abrir ahora el ARS01 vamos a usar el dispositivo: /dev/ars01 y
no  ya el /dev/ttyACMxxx (que era como se usaba antes y variaba
dependiendo del instante del encendido)

Lo puedes comprobar haciendo un ls o dir de la carpeta dev, ejemplo:
    ls /dev

Ya con estos nombres, vamos al servicio ser2net y creamos los
encaminamientos o rutas de puerto TCP a serial, de la siguiente forma:

6000:raw:600:/dev/ars01:38400
8DATABITS NONE 1STOPBIT banner


6001:raw:600:/dev/ars02:38400
8DATABITS NONE 1STOPBIT banner


6002:raw:600:/dev/ars03:38400
8DATABITS NONE 1STOPBIT banner


6003:raw:600:/dev/ars04:38400
8DATABITS NONE 1STOPBIT banner


6004:raw:600:/dev/ars05:38400
8DATABITS NONE 1STOPBIT banner


6005:raw:600:/dev/ars06:38400
8DATABITS NONE 1STOPBIT banner


6010:raw:600:/dev/stack1:38400
8DATABITS NONE 1STOPBIT banner


6011:raw:600:/dev/stack2:38400
8DATABITS NONE 1STOPBIT banner


6012:raw:600:/dev/stack3:38400
8DATABITS NONE 1STOPBIT banner


6013:raw:600:/dev/stack4:38400
8DATABITS NONE 1STOPBIT banner

   
Así el servicio ser2net asocia las conexiones entrantes al puerto 6000
con el ars01 (que tenía serial 00001)  o el 6001 con el ars02, …

Recuerda reiniciar el servicio ser2net por medio del comando:
    sudo
/etc/init.d/ser2net restart