1

Temat: przypisanie na stałe urządzeń ttyUSB

Czy można jakoś na openwrt w prosty sposób przypisać na stałe kolejnośc urządzeń . Chodzi o to, że mam podłączone trzy różne urządzenia, które rozpoznawane są jako ttyUSB0, ttyUSB1, ttyUSB2. Wyjęcie któregoś z nich powoduje, że przy ponownym uruchomieniu urządzenia mają już inna kolejnośc co powoduje, że rozwala się konfiguracja w oprogramowaniu. Mozna to jakoś obejść?

2

Odp: przypisanie na stałe urządzeń ttyUSB

http://eko.one.pl/?p=openwrt-linkidoportowszeregowych

Własnie w wątku obok kłócimy się o to. Ale jeżeli to trzy takie same to nie masz jak tego rozróżnić, chyba że masz faktycznie serial number w usb czy coś podobnego.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

3

Odp: przypisanie na stałe urządzeń ttyUSB

Raczej da sie odróżnic, bo dwa to adaptery na ft232rl (kazdy ma własny ID) a trzecie to modem LTE.

4

Odp: przypisanie na stałe urządzeń ttyUSB

No i mam problem z dwoma adapterami. Wyglądają identycznie. Numeru ID scalaka nie widać. Można mimo to jakoś je przypisać? Tak to wygląda

Adapter pierwszy:
----
USER=root
ACTION=add
SHLVL=2
HOME=/
SEQNUM=756
HOTPLUG_TYPE=usb
DEVPATH=/devices/platform/ehci-platform/usb1/1-1/1-1:1.0
DEVICENAME=1-1:1.0
LOGNAME=root
TERM=linux
SUBSYSTEM=usb
board=WNDR4300
PATH=/usr/sbin:/usr/bin:/sbin:/bin
MODALIAS=usb:v0403p6001d0600dc00dsc00dp00icFFiscFFipFFin00
TYPE=0/0/0
INTERFACE=255/255/255
PRODUCT=403/6001/600
PWD=/
DEVTYPE=usb_interface

Adapter drugi

----
USER=root
ACTION=add
SHLVL=2
HOME=/
SEQNUM=764
HOTPLUG_TYPE=usb
DEVPATH=/devices/platform/ehci-platform/usb1/1-1/1-1:1.0
DEVICENAME=1-1:1.0
LOGNAME=root
TERM=linux
SUBSYSTEM=usb
board=WNDR4300
PATH=/usr/sbin:/usr/bin:/sbin:/bin
MODALIAS=usb:v0403p6001d0600dc00dsc00dp00icFFiscFFipFFin00
TYPE=0/0/0
INTERFACE=255/255/255
PRODUCT=403/6001/600
PWD=/
DEVTYPE=usb_interface


Modem LTE

----
USER=root
ACTION=add
SHLVL=2
HOME=/
SEQNUM=869
HOTPLUG_TYPE=usb
DEVPATH=/devices/platform/ehci-platform/usb1/1-1/1-1:1.3
DEVICENAME=1-1:1.3
LOGNAME=root
TERM=linux
SUBSYSTEM=usb
board=WNDR4300
PATH=/usr/sbin:/usr/bin:/sbin:/bin
MODALIAS=usb:v12D1p1506d0102dc00dsc00dp00ic08isc06ip50in03
TYPE=0/0/0
INTERFACE=8/6/80
PRODUCT=12d1/1506/102
PWD=/
DEVTYPE=usb_interface

5

Odp: przypisanie na stałe urządzeń ttyUSB

Serial number jest jak najbardziej do odczytania, ścieżkę sam sobie wydedukujesz ze skryptu. Poniżej masz mój gotowiec, do podmiany w skrypcie owe numery no i spersonalizowanie pod siebie:

#!/bin/sh

# echo "----" >> /tmp/plik.txt
# env >> /tmp/plik.txt

if ! [ -e /tmp/hubreset ]; then
   rm /dev/ttyUSB_*
   if ! [ "uci -q get 3ginfo.@3ginfo[0].device" = "/dev/ttyUSBx" ]; then
      uci set 3ginfo.@3ginfo[0].device="/dev/ttyUSBx"
      uci commit 3ginfo
   fi
   touch /tmp/hubreset
fi
   
if [ "$DEVTYPE" = "usb_interface" ] && [ "$ACTION" = "add" ]; then
   for tty in /sys/$DEVPATH/ttyUSB*; do
       [ -d "$tty" ] || continue
       OLDD=${tty##*/}

       # to jest FTDI 
       if [ "x$PRODUCT" = "x403/6001/600" ]; then
          if [ "$(cat /sys/$DEVPATH/../serial | grep A8004Wao 2>/dev/null)" ] ; then 
             NEWD="ttyUSB_ftdi1"
             ln -sf /dev/$OLDD /dev/$NEWD
             sleep 1
             /root/scripts/ftdi.sh 1
          elif [ "$(cat /sys/$DEVPATH/../serial | grep A7037TKB 2>/dev/null)" ] ; then
             NEWD="ttyUSB_ftdi2"
             ln -sf /dev/$OLDD /dev/$NEWD
             sleep 1
             /root/scripts/ftdi.sh 2
          elif [ "$(cat /sys/$DEVPATH/../serial | grep AH02RJXD 2>/dev/null)" ] ; then
             NEWD="ttyUSB_ftdi3"
             ln -sf /dev/$OLDD /dev/$NEWD
             sleep 1
            /root/scripts/ftdi.sh 3
          fi
    
       # to jest E398
       elif [ "x$PRODUCT" = "x12d1/1506/0" ]; then
          if [ ${DEVPATH##*.} = "1" ]; then
             NEWD=ttyUSB_3ginfo
             ln -sf /dev/$OLDD /dev/$NEWD
             uci set 3ginfo.@3ginfo[0].device="/dev/"$OLDD
             uci commit 3ginfo
          fi
       fi
   done
fi

if [ "$DEVTYPE" = "usb_interface" ] && [ "$ACTION" = "remove" ]; then
   if [ "x$PRODUCT" = "x403/6001/600" ]; then
      if ! [ -e /dev/ttyUSB_ftdi1 ]; then rm /dev/ttyUSB_ftdi1; fi
      if ! [ -e /dev/ttyUSB_ftdi2 ]; then rm /dev/ttyUSB_ftdi2; fi
      if ! [ -e /dev/ttyUSB_ftdi3 ]; then rm /dev/ttyUSB_ftdi3; fi
   elif [ "x$PRODUCT" = "x12d1/1506/0" ]; then
      if ! [ -e /dev/ttyUSB_3ginfo ]; then rm /dev/ttyUSB_3ginfo; fi
      if ! [ "uci -q get 3ginfo.@3ginfo[0].device" = "/dev/ttyUSBx" ]; then
         uci set 3ginfo.@3ginfo[0].device="/dev/ttyUSBx"
         uci commit 3ginfo
      fi
   fi
fi

Pierwszy "if" w skrypcie jest po to, żeby 3ginfo nie zaczęło po restarcie routera "gadać" na nieodpowiednim porcie i żeby pokasować stare, nieaktualne symlinki.

6

Odp: przypisanie na stałe urządzeń ttyUSB

Dzięki Kolego piekne. Ponieważ dopiero zaczynam zabawe z openwrt , to gdybyś mógł napisać w którym miejscu powinienem zmienić skrypt byłbym wdzięczny.

7

Odp: przypisanie na stałe urządzeń ttyUSB

W tym samym miejscu co poradnik mówi...

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

8 (edytowany przez garysek 2016-04-09 08:05:58)

Odp: przypisanie na stałe urządzeń ttyUSB

Chyba koledze chodzi o to co dokładnie w powyższym skrypcie ma zmienić?

Właściwie co bez zrozumienia działania trudno modyfikować, przeanalizuj sobie dokładnie linijka po linijce to dojdziesz...

if [ "$(cat /sys/$DEVPATH/../serial | grep A8004Wao 2>/dev/null)" ] ; then 

Po komendzie grep masz numer seryjny FTDI (mój), zamień na swój.

/root/scripts/ftdi.sh 1

Te linie z kolei możesz wywalić zupełnie (jest to wywołanie mojego dodatkowego skryptu po wpięciu urządzenia).

9

Odp: przypisanie na stałe urządzeń ttyUSB

Ok, dzięki Wam.

10

Odp: przypisanie na stałe urządzeń ttyUSB

Skróty do ftdi działają ok, ale do modemu mi nie tworzy. Nie wiem czy czegoś nie przeoczyłem. Ponizej zawartość.

Druga sprawa to jak zrobić żeby po starcie systemu skróty sie tworzyły? W przypadku restartu routera trzeba wyciagnać i włożyć urządzenia żeby skróty sie utworzyły.

#!/bin/sh

# echo "----" >> /tmp/plik.txt
# env >> /tmp/plik.txt

if ! [ -e /tmp/hubreset ]; then
   rm /dev/ttyUSB_*
   if ! [ "uci -q get 3ginfo.@3ginfo[0].device" = "/dev/ttyUSBx" ]; then
      uci set 3ginfo.@3ginfo[0].device="/dev/ttyUSBx"
      uci commit 3ginfo
   fi
   touch /tmp/hubreset
fi
   
if [ "$DEVTYPE" = "usb_interface" ] && [ "$ACTION" = "add" ]; then
   for tty in /sys/$DEVPATH/ttyUSB*; do
       [ -d "$tty" ] || continue
       OLDD=${tty##*/}

       # to jest FTDI
       if [ "x$PRODUCT" = "x403/6001/600" ]; then
          if [ "$(cat /sys/$DEVPATH/../serial | grep MPVVV5BA 2>/dev/null)" ] ; then
             NEWD="ttyUSB_ftdi1"
             ln -sf /dev/$OLDD /dev/$NEWD
             sleep 1
     #        /root/scripts/ftdi.sh 1
          elif [ "$(cat /sys/$DEVPATH/../serial | grep A8VU3KHE 2>/dev/null)" ] ; then
             NEWD="ttyUSB_ftdi2"
             ln -sf /dev/$OLDD /dev/$NEWD
             sleep 1
      #       /root/scripts/ftdi.sh 2
      #    elif [ "$(cat /sys/$DEVPATH/../serial | grep AH02RJXD 2>/dev/null)" ] ; then
       #      NEWD="ttyUSB_ftdi3"
        #     ln -sf /dev/$OLDD /dev/$NEWD
         #    sleep 1
    #        /root/scripts/ftdi.sh 3
          fi
   
# to jest E3276
       elif [ "x$PRODUCT" = "x12d1/1506/102" ]; then
          if [ ${DEVPATH##*.} = "1" ]; then
             NEWD=ttyUSB_3ginfo
             ln -sf /dev/$OLDD /dev/$NEWD
             uci set 3ginfo.@3ginfo[0].device="/dev/"$OLDD
             uci commit 3ginfo
          fi
       fi
   done
fi

if [ "$DEVTYPE" = "usb_interface" ] && [ "$ACTION" = "remove" ]; then
   if [ "x$PRODUCT" = "x403/6001/600" ]; then
      if ! [ -e /dev/ttyUSB_ftdi1 ]; then rm /dev/ttyUSB_ftdi1; fi
      if ! [ -e /dev/ttyUSB_ftdi2 ]; then rm /dev/ttyUSB_ftdi2; fi
    # if ! [ -e /dev/ttyUSB_ftdi3 ]; then rm /dev/ttyUSB_ftdi3; fi
   elif [ "x$PRODUCT" = "x12d1/1506/102" ]; then
      if ! [ -e /dev/ttyUSB_3ginfo ]; then rm /dev/ttyUSB_3ginfo; fi
      if ! [ "uci -q get 3ginfo.@3ginfo[0].device" = "/dev/ttyUSBx" ]; then
         uci set 3ginfo.@3ginfo[0].device="/dev/ttyUSBx"
         uci commit 3ginfo
      fi
   fi
fi

11 (edytowany przez garysek 2016-04-09 14:11:55)

Odp: przypisanie na stałe urządzeń ttyUSB

Co do tworzenia linków po restarcie problem masz tu opisany: http://eko.one.pl/forum/viewtopic.php?p … 40#p160840

Nie wiem jak jest z Twoim modemem, ale mój np. tworzy 3 porty szeregowe, żeby wybrać odpowiedni do 3ginfo musiałem dać warunek:

if [ ${DEVPATH##*.} = "1" ]; then

Pewnie w Twoim przypadku trzeba to zmienić (na 3 ?) lub w ogóle usunąć.

Te "sleep 1"dałem przed wywołaniem swojego skryptu, też możesz spokojnie to wywalić.

12

Odp: przypisanie na stałe urządzeń ttyUSB

jajen napisał/a:

...Druga sprawa to jak zrobić żeby po starcie systemu skróty sie tworzyły? W przypadku restartu routera trzeba wyciagnać i włożyć urządzenia żeby skróty sie utworzyły.

Z modemami USB przy starcie działa mi tylko skrypt wrzucony do katalogu /etc/hotplug.d/tty/
wtedy w logach mam:

....
Sat Apr  9 16:07:41 2016 kern.info kernel: [   17.380000] usbcore: registered new interface driver cdc_ether
Sat Apr  9 16:07:41 2016 kern.info kernel: [   17.390000] usbcore: registered new interface driver cdc_ncm
Sat Apr  9 16:07:41 2016 kern.info kernel: [   17.510000] usbcore: registered new interface driver huawei_cdc_ncm
Sat Apr  9 16:07:41 2016 kern.info kernel: [   17.630000] PPP generic driver version 2.4.2
Sat Apr  9 16:07:41 2016 kern.info kernel: [   17.640000] NET: Registered protocol family 24
Sat Apr  9 16:07:41 2016 kern.info kernel: [   17.670000] PPTP driver version 0.8.5
Sat Apr  9 16:07:41 2016 kern.info kernel: [   17.680000] usbcore: registered new interface driver qmi_wwan
Sat Apr  9 16:07:41 2016 kern.info kernel: [   17.690000] usbcore: registered new interface driver rndis_host
Sat Apr  9 16:07:41 2016 kern.info kernel: [   17.700000] usbcore: registered new interface driver sierra
Sat Apr  9 16:07:41 2016 kern.info kernel: [   17.710000] usbserial: USB Serial support registered for Sierra USB modem
Sat Apr  9 16:07:41 2016 kern.info kernel: [   17.720000] usbcore: registered new interface driver sierra_net
Sat Apr  9 16:07:41 2016 kern.info kernel: [   17.750000] usbcore: registered new interface driver snd-usb-audio
Sat Apr  9 16:07:41 2016 kern.info kernel: [   17.820000] usbcore: registered new interface driver option
Sat Apr  9 16:07:41 2016 kern.info kernel: [   17.820000] usbserial: USB Serial support registered for GSM modem (1-port)
Sat Apr  9 16:07:41 2016 kern.info kernel: [   17.830000] option 1-1:1.0: GSM modem (1-port) converter detected
Sat Apr  9 16:07:41 2016 kern.info kernel: [   17.840000] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB0
Sat Apr  9 16:07:41 2016 kern.info kernel: [   17.850000] option 1-1:1.3: GSM modem (1-port) converter detected
Sat Apr  9 16:07:41 2016 kern.info kernel: [   17.850000] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB1
Sat Apr  9 16:07:41 2016 kern.info kernel: [   17.860000] option 1-1:1.4: GSM modem (1-port) converter detected
Sat Apr  9 16:07:41 2016 kern.info kernel: [   17.860000] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB2
Sat Apr  9 16:07:41 2016 kern.info kernel: [   17.880000] usbcore: registered new interface driver qcserial
Sat Apr  9 16:07:41 2016 kern.info kernel: [   17.890000] usbserial: USB Serial support registered for Qualcomm USB modem
Sat Apr  9 16:07:41 2016 kern.debug kernel: [   17.960000] ath: EEPROM regdomain: 0x0
Sat Apr  9 16:07:41 2016 kern.debug kernel: [   17.960000] ath: EEPROM indicates default country code should be used
Sat Apr  9 16:07:41 2016 kern.debug kernel: [   17.960000] ath: doing EEPROM country->regdmn map search
Sat Apr  9 16:07:41 2016 kern.debug kernel: [   17.960000] ath: country maps to regdmn code: 0x3a
Sat Apr  9 16:07:41 2016 kern.debug kernel: [   17.960000] ath: Country alpha2 being used: US
Sat Apr  9 16:07:41 2016 kern.debug kernel: [   17.960000] ath: Regpair used: 0x3a
Sat Apr  9 16:07:41 2016 kern.debug kernel: [   17.980000] ieee80211 phy0: Selected rate control algorithm 'minstrel_ht'
Sat Apr  9 16:07:41 2016 kern.info kernel: [   17.980000] ieee80211 phy0: Atheros AR9100 MAC/BB Rev:7 AR2133 RF Rev:a2 mem=0xb80c0000, irq=2
Sat Apr  9 16:07:44 2016 user.notice DEBUG:  ##################################################################################################
Sat Apr  9 16:07:44 2016 user.notice DEBUG:  start działania hotpluga TTY 15-logi
Sat Apr  9 16:07:48 2016 kern.debug kernel: [   27.220000] ar71xx: pll_reg 0xb8050014: 0x1a000000
Sat Apr  9 16:07:48 2016 kern.info kernel: [   27.220000] eth0: link up (1000Mbps/Full duplex)
Sat Apr  9 16:07:48 2016 kern.info kernel: [   27.220000] device eth0.1 entered promiscuous mode
Sat Apr  9 16:07:48 2016 kern.info kernel: [   27.230000] device eth0 entered promiscuous mode
Sat Apr  9 16:07:48 2016 kern.info kernel: [   27.240000] br-lan: port 1(eth0.1) entered forwarding state
Sat Apr  9 16:07:48 2016 kern.info kernel: [   27.240000] br-lan: port 1(eth0.1) entered forwarding state
Sat Apr  9 16:07:48 2016 daemon.notice netifd: Interface 'lan' is enabled

...

Natomiast po odłączeniu modemu i ponownym podłączeniu uruchamiają się skrypty z katalogów /etc/hotplug.d/tty oraz /etc/hotplug.d/usb Logi:

...
Sat Apr  9 16:22:57 2016 kern.info kernel: [  155.870000] usb 1-1: USB disconnect, device number 2
Sat Apr  9 16:22:57 2016 kern.info kernel: [  155.880000] option1 ttyUSB0: GSM modem (1-port) converter now disconnected from ttyUSB0
Sat Apr  9 16:22:57 2016 kern.info kernel: [  155.890000] option 1-1:1.0: device disconnected
Sat Apr  9 16:22:57 2016 kern.info kernel: [  155.890000] cdc_ether 1-1:1.1 wwan0: unregister 'cdc_ether' usb-ehci-platform-1, Mobile Broadband Network Device
Sat Apr  9 16:22:57 2016 kern.info kernel: [  155.910000] option1 ttyUSB1: GSM modem (1-port) converter now disconnected from ttyUSB1
Sat Apr  9 16:22:57 2016 kern.info kernel: [  155.910000] option 1-1:1.3: device disconnected
Sat Apr  9 16:22:57 2016 kern.info kernel: [  155.920000] option1 ttyUSB2: GSM modem (1-port) converter now disconnected from ttyUSB2
Sat Apr  9 16:22:57 2016 kern.info kernel: [  155.930000] option 1-1:1.4: device disconnected
Sat Apr  9 16:23:03 2016 kern.info kernel: [  161.440000] usb 1-1: new high-speed USB device number 3 using ehci-platform
Sat Apr  9 16:23:03 2016 kern.info kernel: [  161.590000] usb-storage 1-1:1.0: USB Mass Storage device detected
Sat Apr  9 16:23:03 2016 kern.info kernel: [  161.600000] scsi host7: usb-storage 1-1:1.0
Sat Apr  9 16:23:03 2016 kern.info kernel: [  161.600000] usb-storage 1-1:1.1: USB Mass Storage device detected
Sat Apr  9 16:23:03 2016 kern.info kernel: [  161.610000] scsi host8: usb-storage 1-1:1.1
Sat Apr  9 16:23:04 2016 kern.notice kernel: [  162.600000] scsi 7:0:0:0: CD-ROM            HUAWEI   Mass Storage     2.31 PQ: 0 ANSI: 2
Sat Apr  9 16:23:04 2016 kern.notice kernel: [  162.620000] scsi 8:0:0:0: Direct-Access     HUAWEI   SD Storage       2.31 PQ: 0 ANSI: 2
Sat Apr  9 16:23:04 2016 kern.notice kernel: [  162.630000] sd 8:0:0:0: [sda] Attached SCSI removable disk
Sat Apr  9 16:23:08 2016 kern.info kernel: [  166.730000] usb 1-1: USB disconnect, device number 3
Sat Apr  9 16:23:12 2016 kern.info kernel: [  170.830000] usb 1-1: new high-speed USB device number 4 using ehci-platform
Sat Apr  9 16:23:12 2016 kern.info kernel: [  170.980000] usb-storage 1-1:1.0: USB Mass Storage device detected
Sat Apr  9 16:23:12 2016 kern.info kernel: [  170.990000] option 1-1:1.0: GSM modem (1-port) converter detected
Sat Apr  9 16:23:12 2016 kern.info kernel: [  171.000000] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB0
Sat Apr  9 16:23:12 2016 kern.info kernel: [  171.000000] usb-storage 1-1:1.1: USB Mass Storage device detected
Sat Apr  9 16:23:12 2016 kern.info kernel: [  171.020000] cdc_ether 1-1:1.1 wwan0: register 'cdc_ether' at usb-ehci-platform-1, Mobile Broadband Network Device, 02:50:f3:00:00:00
Sat Apr  9 16:23:12 2016 kern.info kernel: [  171.030000] usb-storage 1-1:1.3: USB Mass Storage device detected
Sat Apr  9 16:23:12 2016 kern.info kernel: [  171.040000] option 1-1:1.3: GSM modem (1-port) converter detected
Sat Apr  9 16:23:12 2016 kern.info kernel: [  171.040000] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB1
Sat Apr  9 16:23:12 2016 kern.info kernel: [  171.050000] usb-storage 1-1:1.4: USB Mass Storage device detected
Sat Apr  9 16:23:12 2016 kern.info kernel: [  171.060000] option 1-1:1.4: GSM modem (1-port) converter detected
Sat Apr  9 16:23:12 2016 kern.info kernel: [  171.070000] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB2
Sat Apr  9 16:23:12 2016 kern.info kernel: [  171.070000] usb-storage 1-1:1.5: USB Mass Storage device detected
Sat Apr  9 16:23:12 2016 kern.info kernel: [  171.080000] scsi host13: usb-storage 1-1:1.5
Sat Apr  9 16:23:12 2016 kern.info kernel: [  171.090000] usb-storage 1-1:1.6: USB Mass Storage device detected
Sat Apr  9 16:23:12 2016 kern.info kernel: [  171.100000] scsi host14: usb-storage 1-1:1.6
Sat Apr  9 16:23:13 2016 kern.notice kernel: [  172.090000] scsi 13:0:0:0: CD-ROM            HUAWEI   Mass Storage     2.31 PQ: 0 ANSI: 2
Sat Apr  9 16:23:13 2016 kern.notice kernel: [  172.100000] scsi 14:0:0:0: Direct-Access     HUAWEI   SD Storage       2.31 PQ: 0 ANSI: 2
Sat Apr  9 16:23:13 2016 kern.notice kernel: [  172.110000] sd 14:0:0:0: [sda] Attached SCSI removable disk
Sat Apr  9 16:23:33 2016 user.notice DEBUG:  ##################################################################################################
Sat Apr  9 16:23:33 2016 user.notice DEBUG:  start działania hotpluga USB 15-logi
Sat Apr  9 16:23:33 2016 user.notice DEBUG:  ##################################################################################################
Sat Apr  9 16:23:33 2016 user.notice DEBUG:  start działania hotpluga USB 15-logi
Sat Apr  9 16:23:34 2016 user.notice DEBUG:  ##################################################################################################
Sat Apr  9 16:23:34 2016 user.notice DEBUG:  start działania hotpluga USB 15-logi
Sat Apr  9 16:23:35 2016 daemon.err block: Unkown action change
Sat Apr  9 16:23:38 2016 user.notice DEBUG:  ##################################################################################################
Sat Apr  9 16:23:38 2016 user.notice DEBUG:  start działania hotpluga USB 15-logi
Sat Apr  9 16:23:39 2016 user.notice DEBUG:  ##################################################################################################
Sat Apr  9 16:23:39 2016 user.notice DEBUG:  start działania hotpluga USB 15-logi
Sat Apr  9 16:23:44 2016 user.notice DEBUG:  ##################################################################################################
Sat Apr  9 16:23:44 2016 user.notice DEBUG:  start działania hotpluga TTY 15-logi

..... itd itd
Xiaomi AX3000T @ Netgear R6220
* DVBT2 - T230C *

13 (edytowany przez smereka 2023-06-23 11:29:39)

Odp: przypisanie na stałe urządzeń ttyUSB

Chcę podłączyć 2 urządzenia jednocześnie bazujące na czipie ftdi czyli  RS232 i RS485. Oba przedstawiają się na openwrt dobrze. Chcę je rozróżniać po serialnumber. Cezary rzuć proszę okiem czy dobrze zmodyfikowałem Twój skrypt? Pytam bo nie chce działać i nie za bardzo wiem jak sprawdzić jego działanie... Na pewno pakiet mbusd jak mu zapodałem potem ścieżkę /dev/RS232_0 krzyczał, że brak urządzenia

#!/bin/sh
    if [ "$DEVTYPE" = "usb_interface" ] && [ "$ACTION" = "add" ]; then
        for tty in /sys/$DEVPATH/ttyUSB*; do
            [ -d "$tty" ] || continue
            OLDD=${tty##*/}

            # to jest RS232
            if [ "x$SERIALNUMBER" = "AAAACCCC" ]; then
                NEWD="RS232_"${DEVPATH##*.}
                rm /dev/$NEWD
                ln -s /dev/$OLDD /dev/$NEWD
            fi
   
            # to jest RS485
            if [ "x$SERIALNUMBER" = "AAAABBBB" ]; then
                NEWD="RS485_"${DEVPATH##*.}
                rm /dev/$NEWD
                ln -s /dev/$OLDD /dev/$NEWD
            fi

        done
    fi

14

Odp: przypisanie na stałe urządzeń ttyUSB

Skąd masz zmienną SERIALNUMBER? Bo nigdzie jej nie inicjujesz. Przychodzi w zmiennych środowiskowych?

Ponad to:
if [ "x$SERIALNUMBER" = "xAAAACCCC" ]; then
if [ "x$SERIALNUMBER" = "xAAAABBBB" ]; then

zamiast odpowiednio

if [ "x$SERIALNUMBER" = "AAAACCCC" ]; then
if [ "x$SERIALNUMBER" = "AAAABBBB" ]; then

Ten x jest zabezpieczeniem jak zmienna była by pusta to porównywanie wywaliło by tego ifa jako błąd. A tak przechodzi zawsze.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

15

Odp: przypisanie na stałe urządzeń ttyUSB

Zmienne mam stąd po wpisaniu cat /sys/kernel/debug/usb/devices

mam dla jednego z nich np:

T:  Bus=03 Lev=02 Prnt=02 Port=03 Cnt=03 Dev#=  8 Spd=12   MxCh= 0
D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
P:  Vendor=0403 ProdID=6001 Rev= 6.00
S:  Manufacturer=FTDI
S:  Product=FT232R USB UART
S:  SerialNumber=AAAACCCC
C:* #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr= 90mA
I:* If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=ftdi_sio
E:  Ad=81(I) Atr=02(Bulk) MxPS=  64 Ivl=0ms
E:  Ad=02(O) Atr=02(Bulk) MxPS=  64 Ivl=0ms

16

Odp: przypisanie na stałe urządzeń ttyUSB

Nie, to są dane w pliku /sys/kernel/debug/usb/devices. A w hotplugu skąd je masz? Są w ogóle w zmiennych środowiskowych czy nie? Bo nie jest powiedziane że nazwa produktu i inne takie przechodzą do zmiennych.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

17

Odp: przypisanie na stałe urządzeń ttyUSB

Nie wiem skąd je mam. Myślałem, ze jak zmodyfikuję Twój to zadziała big_smile a to widze większy proceder. Podpowiesz jak to zrobić po serial number i czy w ogóle się da...?

18

Odp: przypisanie na stałe urządzeń ttyUSB

Przychodzi w hotplugu nazwa interfejsu, np. ttyUSB0. Odszukaj tą nazwę w /sys/bus/usb, będzie gdzieś w podkatalogach. Przejdź do znalezionego katalogi, a potem kilka katalogów wyżej (pewnie ze dwa, trzy) to będą w nich pliki idVendor, idProduct i m.in serial. W nim jest serial tego urządzenia.

Podłącz sobie przejściówkę do routera i ręcznie poszukaj plików żebyś widział jak struktura katalogów z urządzenia USB wychodzi. Wtedy będziesz wiedział jak to poszukać w skrypcie.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

19 (edytowany przez smereka 2023-06-23 13:13:30)

Odp: przypisanie na stałe urządzeń ttyUSB

Zrobiłem tak:

#!/bin/sh
    echo "----" > /tmp/plik.txt
    env >> /tmp/plik.txt

Po wpięciu np rs232 mam:

----
DEVNAME=bus/usb/003/016
USER=root
ACTION=bind
SHLVL=1
HOME=/
SEQNUM=1312
BUSNUM=003
MAJOR=189
HOTPLUG_TYPE=usb
DEVPATH=/devices/platform/soc/60f8800.usb2/6000000.dwc3/xhci-hcd.1.auto/usb3/3-1/3-1.2
LOGNAME=root
DEVICENAME=3-1.2
TERM=linux
SUBSYSTEM=usb
PATH=/usr/sbin:/usr/bin:/sbin:/bin
MINOR=271
DRIVER=usb
TYPE=0/0/0
DEVNUM=016
PRODUCT=403/6001/600
PWD=/
DEVTYPE=usb_device

Zakładamy, że chcemy go łapać czyli po procie do hub usb do którego jest wpięty więc:

#!/bin/sh
    if [ "$DEVTYPE" = "usb_interface" ] && [ "$ACTION" = "add" ]; then
        for tty in /sys/$DEVPATH/ttyUSB*; do
            [ -d "$tty" ] || continue
            OLDD=${tty##*/}

            # to jest RS232
            if [ "x$DEVICENAME" = "3-1.2" ]; then
                NEWD="RS232_"${DEVPATH##*.}
                rm /dev/$NEWD
                ln -s /dev/$OLDD /dev/$NEWD
            fi
   
            # to jest RS485
            if [ "x$DEVICENAME" = "3-1.4" ]; then
                NEWD="RS485_"${DEVPATH##*.}
                rm /dev/$NEWD
                ln -s /dev/$OLDD /dev/$NEWD
            fi

        done
    fi

Drugi rs 485 przyjmuje 3-1.4. To to co wyżej ma szanse działać czy jednak coś źle robię?

20

Odp: przypisanie na stałe urządzeń ttyUSB

Te numery to numer portu USB do którego wpinasz. Jeżeli zawsze będziesz wpisał jeden i drugi do określonych portów to zadziała.

Tylko kod jest zły - bo devtype jest usb_device a nie usb_interface, action masz bind a nie add no i znów zapomniałeś o tym x przy porównywaniu. Pokazałeś nie to zdarzenie, bo masz wykrywać nie urządzenie usb (usd_device) tylko interfejs (usb_interface).

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

21 (edytowany przez smereka 2023-06-23 13:40:01)

Odp: przypisanie na stałe urządzeń ttyUSB

zmieniłem:

#!/bin/sh
    if [ "$DEVTYPE" = "usb_device" ] && [ "$ACTION" = "bind" ]; then
        for tty in /sys/$DEVPATH/ttyUSB*; do
            [ -d "$tty" ] || continue
            OLDD=${tty##*/}

            # to jest RS232
            if [ "x$DEVICENAME" = "x3-1.2" ]; then
                NEWD="RS232_"${DEVPATH##*.}
                rm /dev/$NEWD
                ln -s /dev/$OLDD /dev/$NEWD
            fi
   
            # to jest RS485
            if [ "x$DEVICENAME" = "x3-1.4" ]; then
                NEWD="RS485_"${DEVPATH##*.}
                rm /dev/$NEWD
                ln -s /dev/$OLDD /dev/$NEWD
            fi

        done
    fi

Ale nadal po wyjęciu i włożeniu do portu konwertera krzyczy, że nie ma nic pod /dev/RS232_0

22 (edytowany przez Cezary 2023-06-23 13:59:17)

Odp: przypisanie na stałe urządzeń ttyUSB

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.

23 (edytowany przez smereka 2023-06-23 14:21:56)

Odp: przypisanie na stałe urządzeń ttyUSB

Niby jasne zmieniłem tak jak napisałeś czyli:

#!/bin/sh

if [ "$DEVTYPE" = "usb_interface" ] && [ "$ACTION" = "add" ]; then
    for tty in /sys/$DEVPATH/ttyUSB*; do
        [ -d "$tty" ] || continue
        if [ "$PRODUCT" = "403/6001/600" ]; 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

           # Szukanie po serial number
# Do RS232


SERIALNUMEBR=$(cat /sys/$DEVPATH/../serial)
if [ "$SERIALNUMBER" = "AR0JV9NL" ]; then
  rm /dev/RS232
  ln -s /dev/$OLDD /dev/RS232
fi
   
# Do RS485

if [ "$SERIALNUMBER" = "AL00Q3MN" ]; then
  rm /dev/RS485
  ln -s /dev/$OLDD /dev/RS485
fi

       fi
    done
fi


w /tmp/log.txt mam

tty: /sys//devices/platform/soc/60f8800.usb2/6000000.dwc3/xhci-hcd.1.auto/usb3/3-1/3-1.2/3-1.2:1.0/ttyUSB1
ttyUSB1
serial: AL00Q3MN
tty: /sys//devices/platform/soc/60f8800.usb2/6000000.dwc3/xhci-hcd.1.auto/usb3/3-1/3-1.4/3-1.4:1.0/ttyUSB0
ttyUSB0
serial: AR0JV9NL


Testuję to mbusd którego konfiguracja wygląda następująco:

config mbusd
    option enabled 1
    option port 502
    option loglevel 2

    #option max_connections 32
    #option timeout 60

    option device '/dev/RS485'
    option speed 9600
    option databits 8
    option parity 'N'
    option stopbits 1
    option rts 0

    option rtu_retries 3
    #option rtu_wait 500
    option pause 10


i w logach mam:

Fri Jun 23 15:17:53 2023 daemon.err mbusd[15031]: 23 Jun 2023 15:17:53 mbusd-0.5.0 started...
Fri Jun 23 15:17:53 2023 daemon.err mbusd[15031]: 23 Jun 2023 15:17:53 tty: trying to open /dev/RS485 (speed 9600 mode 8N1)
Fri Jun 23 15:17:53 2023 daemon.err mbusd[15031]: 23 Jun 2023 15:17:53 conn_init(): can't open tty device /dev/RS485 (No such file or directory)
Fri Jun 23 15:17:53 2023 daemon.err mbusd[15031]: 23 Jun 2023 15:17:53 conn_init() failed, exiting...

24

Odp: przypisanie na stałe urządzeń ttyUSB

Zrób ls -al /dev/RS485 i zobacz czy on istnieje. Jak nie to zrób sobie prosty debug i wypisuj do pliku poszczególne zmienne (szczególnie PRODUCT czy odczytany SERIALNUMBER).

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

25

Odp: przypisanie na stałe urządzeń ttyUSB

root@OpenWrt:~# ls -al /dev/RS485
ls: /dev/RS485: No such file or directory
root@OpenWrt:~# ls -al /dev/RS232
ls: /dev/RS232: No such file or directory
root@OpenWrt:~#