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