Ehh. Nie ma pod ręką ftdi, ale mam cp2102. Nie ważne jaki chodzi o idee. Na usb wygląda on tak:
T: Bus=01 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#= 8 Spd=12 MxCh= 0
D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=10c4 ProdID=ea60 Rev= 1.00
S: Manufacturer=Silicon Labs
S: Product=CP2102 USB to UART Bridge Controller
S: SerialNumber=0001
C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=100mA
I:* If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=cp210x
E: Ad=81(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
E: Ad=01(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
On ma serial number 0001. Po włożeniu do usb generuje m.in takie zdarzenie
USER=root
OF_NAME=port
ACTION=add
SHLVL=1
HOME=/
SEQNUM=623
HOTPLUG_TYPE=usb
DEVPATH=/devices/platform/ahb/1b000000.usb/usb1/1-1/1-1.1/1-1.1:1.0
LOGNAME=root
DEVICENAME=1-1.1:1.0
TERM=linux
SUBSYSTEM=usb
PATH=/usr/sbin:/usr/bin:/sbin:/bin
MODALIAS=usb:v10C4pEA60d0100dc00dsc00dp00icFFisc00ip00in00
TYPE=0/0/0
PRODUCT=10c4/ea60/100
INTERFACE=255/0/0
PWD=/
DEVTYPE=usb_interface
OF_FULLNAME=/ahb/usb@1b000000/port@1/port@1
OF_COMPATIBLE_N=0
Więc robię teraz plik /etc/hotplug.d/usb/99-serial o takiej zawartości:
#!/bin/sh
if [ "$DEVTYPE" = "usb_interface" ] && [ "$ACTION" = "add" ]; then
for tty in /sys/$DEVPATH/ttyUSB*; do
[ -d "$tty" ] || continue
if [ "$PRODUCT" = "10c4/ea60/100" ]; then
# to jest mój konwerter
echo "tty: $tty" >> /tmp/log.txt
OLDD=${tty##*/}
echo "$OLDD" >> /tmp/log.txt
echo "serial: "$(cat /sys/$DEVPATH/../serial) >> /tmp/log.txt
# tu trzeba coś dodać
fi
done
fi
W pliku /tmp/log.txt odkłada się informacja:
# cat /tmp/log.txt
tty: /sys//devices/platform/ahb/1b000000.usb/usb1/1-1/1-1.1/1-1.1:1.0/ttyUSB0
ttyUSB0
serial: 0001
Czyli wiesz że stary interfejs o nazwie ttyUSB0 ma serial number 0001. Przerób to sobie, podstaw sobie swój product (pewnie 403/6001/600 - jak zrobiłeś logowanie to
echo "----" > /tmp/plik.txt
zamień na
echo "----" >> /tmp/plik.txt
bo inaczej będzie ci plik nadpisywał i nie zobaczysz wszystkich zdarzeń).
Skoro masz nazwę interfejsu i wiesz jaki ma serial number to robisz teraz prostego ifa i zależności od seriala robisz taki link jak chcesz np uzupełniasz to o np. taki kod jeżeli chcesz zrobić linki:
SERIALNUMEBR=$(cat /sys/$DEVPATH/../serial)
if [ "$SERIALNUMBER" = "AAAACCCC" ]; then
rm /dev/RS232
ln -s /dev/$OLDD /dev/RS232
fi
# to jest
if [ "$SERIALNUMBER" = "AAAABBBB" ]; then
rm /dev/RS485
ln -s /dev/$OLDD /dev/RS485
fi
Jasne teraz?
Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.