Odp: przypisanie na stałe urządzeń ttyUSB
Powstawiaj sobie logger co którąś linię i zobacz co właściwe idzie w zmiennych.
Nie jesteś zalogowany. Proszę się zalogować lub zarejestrować.
eko.one.pl → Oprogramowanie / Software → przypisanie na stałe urządzeń ttyUSB
Strony Poprzednia 1 2
Zaloguj się lub zarejestruj by napisać odpowiedź
Powstawiaj sobie logger co którąś linię i zobacz co właściwe idzie w zmiennych.
Wstawiłem logger tam gdzie skanuje serial number tutaj:
#!/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)
logger $(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
No i w logach przy wyjęciu i włozeniu poszczególnych konwerterów mam:
Mon Jun 26 08:28:26 2023 kern.info kernel: [234969.528287] usb 3-1.2: USB disconnect, device number 12
Mon Jun 26 08:28:26 2023 kern.info kernel: [234969.534925] ftdi_sio ttyUSB1: FTDI USB Serial Device converter now disconnected from ttyUSB1
Mon Jun 26 08:28:26 2023 kern.info kernel: [234969.537968] ftdi_sio 3-1.2:1.0: device disconnected
Mon Jun 26 08:28:27 2023 kern.info kernel: [234970.602990] usb 3-1.2: new full-speed USB device number 14 using xhci-hcd
Mon Jun 26 08:28:27 2023 kern.info kernel: [234970.752020] ftdi_sio 3-1.2:1.0: FTDI USB Serial Device converter detected
Mon Jun 26 08:28:27 2023 kern.info kernel: [234970.752347] usb 3-1.2: Detected FT232RL
Mon Jun 26 08:28:27 2023 kern.info kernel: [234970.759549] usb 3-1.2: FTDI USB Serial Device converter now attached to ttyUSB1
Mon Jun 26 08:28:27 2023 user.notice root: AL00Q3MN
Mon Jun 26 08:28:34 2023 kern.info kernel: [234977.976610] usb 3-1.4: USB disconnect, device number 13
Mon Jun 26 08:28:34 2023 kern.info kernel: [234977.984293] ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0
Mon Jun 26 08:28:34 2023 kern.info kernel: [234977.987405] ftdi_sio 3-1.4:1.0: device disconnected
Mon Jun 26 08:28:36 2023 kern.info kernel: [234979.572248] usb 3-1.4: new full-speed USB device number 15 using xhci-hcd
Mon Jun 26 08:28:36 2023 kern.info kernel: [234979.728715] ftdi_sio 3-1.4:1.0: FTDI USB Serial Device converter detected
Mon Jun 26 08:28:36 2023 kern.info kernel: [234979.729288] usb 3-1.4: Detected FT232RL
Mon Jun 26 08:28:36 2023 kern.info kernel: [234979.738289] usb 3-1.4: FTDI USB Serial Device converter now attached to ttyUSB0
Mon Jun 26 08:28:36 2023 user.notice root: AR0JV9NL
Czyli wyczaja te seriale tak?
Dodaj jeszcze logger $OLDD żeby zobaczyć czy interfejs znalazło. Jeżeli to to nie ma powodu żeby się nie robiło, Możesz do if'a dodać
if [ "$SERIALNUMBER" = "AL00Q3MN" ]; then
logger "Znalazłem RS485"
rm /dev/RS485
ln -s /dev/$OLDD /dev/RS485
fi
Dodałem i faktycznie po wyjęciu i włożeniu nie ma tego wpisu "Znalazłem RS485"
Może coś po minąłem zabrało jakiegoś znaku żeby to wyczajał?
Ehh, masz złe nazwy zmiennych
SERIALNUMEBR <> SERIALNUMBER
Czeski błąd, popraw literówkę.
Hurra teraz jest wpis
Sprawdzę mbusd czy zatrybi...
Tak czy siak ślepota ze mnie
Dziękuję Cezary
Cezary a jest sposób na to, żeby po ponownym włączeniu to działało bo teraz widzę, że te konwertery startują dość szybko po ponownym odpaleniu routera i przypuszczam, że hotplog wykonuje się prawie na końcu przez co mbusd komunikuje brak RS232 co jest w gruncie rzeczy zasadne. Można to jakoś obejść?
Wyłącz sobie mbusd z autostartu i uruchamiaj go w hotplugu jak pojawi się interfejs po zrobieniu linka do niego.
No tak ale tu chodzi o to, że te linki nie tworzą się po starcie routera. Dopiero jak on się uruchomi i ja wyjmę i włożę fizycznie konwertery do huba to się pojawiają. Bez wyjęcia są po prostu /dev/ttyUSB0 i /dev/ttyUSB1
Ok, chodzi o to że interfejsy tworzą się przez uruchomieniem hotpluga. To trzaśnij sobie podobny kod w /etc/rc.local który to zrobi poszukiwanie ttyUSB0 i ttyUSB1 w /sys, znajdziesz sobie jego serial i na jego podstawie zrobisz linka i odpalisz mbusd
Dobrze rozumiem, że wystarczy wywalić pierwszą linijke i fi na końcu czyli?
#!/bin/sh
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
SERIALNUMBER=$(cat /sys/$DEVPATH/../serial)
logger $(cat /sys/$DEVPATH/../serial)
if [ "$SERIALNUMBER" = "AL00Q3MN" ]; then
logger "Znalazlem RS232"
rm /dev/RS232
ln -s /dev/$OLDD /dev/RS232
fi
# Do RS485
if [ "$SERIALNUMBER" = "AR0JV9NL" ]; then
logger "Znalazlem RS485"
rm /dev/RS485
ln -s /dev/$OLDD /dev/RS485
fi
fi
done
Nie, w /etc/rc.local nie będziesz miał zmiennych $DEVPATH, ACTION i tyle. Zakładasz że /dev/ttyUSB0 i /dev/ttyUSB1 już istnieją i resztę masz sobie sam poszukać.
Shameless plug:
https://gist.github.com/Leo-PL/b5ee737e … c182707c8e
Popełniłem coś co daje podobne linki jak te generowane przez udev - na razie samo nie generuje eventów które mogłyby być konsumowane np przez netifd do sterowania interfejsami, ale zapewne można to dodać.
Przydałoby się wspomnieć, że skrypt zaprezentowany przez Leo-PL należy umieścić w katalogu /etc/hotplug.d/tty a nie w /etc/hotplug.d/usb. Skrypty w podkatalogu tty są wykonywane również w trybie coldplug czyli przy starcie systemu. Dodatkowo zamiast zmiennej DEVNAME jest zmienna DEVICENAME. Przynajmniej w wersji 22.05. Możliwe, że we wcześniejszych wersjach było inaczej.
W oparciu o ten skrypt stworzyłem własny który działa w wersji 22.05. Dodatkowo jest on konfigurowalny przez uci. Paczkę można pobrać i zainstalować ręcznie z GitHuba. Plik konfiguracyjny to /etc/config/persistent-tty. Po zainstalowaniu domyślnie skrypt nie jest aktywny. Trzeba go uaktywnić poleceniem:
uci set persistent-tty.general.enabled=yes
uci commitNastępnie podpinamy nasze urządzenie do USB i w logu powinny pojawić się odpowiednie wpisy:
Wed Jul 12 09:18:40 2023 user.notice tty: [DRY RUN] ttyUSB3 ===> serial/by-path/platform_soc_1c14000.usb_usb1_1-1_1-1.2_1-1.2:1.0
Wed Jul 12 09:18:40 2023 user.notice tty: [DRY RUN] ttyUSB3 ===> serial/by-id/usb-FTDI:FT232R_USB_UART-if00-port0
Wed Jul 12 09:18:40 2023 user.notice tty: [DRY RUN] ttyUSB3 ===> serial/by-id/usb-0403:6001-if00-port0
Wed Jul 12 09:18:40 2023 user.notice tty: [DRY RUN] ttyUSB3 ===> serial/by-id/usb-AH05WPW6-if00-port0Jak widać linki wciąż nie są tworzone bo skrypt działa w trybie dry run czyli tylko pokazuje co zrobi. Tryb dry run wyłączamy poleceniem
uci set persistent-tty.general.dry_run=off
uci commitTeraz po wyjęciu i ponownym wpięciu urządzenia powinny utworzyć się odpowiednie linki:
Wed Jul 12 09:36:39 2023 user.notice tty: ttyUSB3 ===> serial/by-path/platform_soc_1c14000.usb_usb1_1-1_1-1.2_1-1.2:1.0
Wed Jul 12 09:36:39 2023 user.notice tty: ttyUSB3 ===> serial/by-id/usb-FTDI:FT232R_USB_UART-if00-port0
Wed Jul 12 09:36:39 2023 user.notice tty: ttyUSB3 ===> serial/by-id/usb-0403:6001-if00-port0
Wed Jul 12 09:36:39 2023 user.notice tty: ttyUSB3 ===> serial/by-id/usb-AH05WPW6-if00-port0Możemy też dodać własne linki:
uci set persistent-tty.ftdi=by_id
uci set persistent-tty.ftdi.manufacturer='FTDI'
uci set persistent-tty.ftdi.product='FT232R USB UART'
uci set persistent-tty.ftdi.link='ftdi-${serial}'
uci commitalbo po ID:
uci set persistent-tty.ftdi=by_id
uci set persistent-tty.ftdi.manufacturerId='0403'
uci set persistent-tty.ftdi.productId='6001'
uci set persistent-tty.ftdi.link='ftdi-${serial}'
uci commitW każdej sekcji można też niezależnie ustawić opcje enabled oraz dry_run:
uci set persistent-tty.ftdi.dry_run=1
uci commitFaktycznie to było /etc/hotplug.d/tty. Ale nigdzie też nie napisałem, że trzeba wrzucić to do /etc/hotplug.d/usb. Nawet mam sprawdzenie na subsystem "tty" na początku skryptu.
Z tego co pamiętam, DEVNAME było mi łatwiej przerobić na ścieżkę, stąd taka a nie inna decyzja. Ideałem dla mnie byłyby linki tożsame z tymi generowanymi przez udev, nie tylko zbliżone, ale nie mam specjalnie czasu rozgrzebywać tego na nowo.
Cezary przypomnisz polecenie do konsoli wyświetlający wszystkie dostępne /dev/tyUSB?
ls -al /dev/ttyUSB*
?
Strony Poprzednia 1 2
Zaloguj się lub zarejestruj by napisać odpowiedź
eko.one.pl → Oprogramowanie / Software → przypisanie na stałe urządzeń ttyUSB
Forum oparte o PunBB, wspierane przez Informer Technologies, Inc