/ / Modem USB wielokrotnej zmiany ttyACMx po ponownym połączeniu - linux, pppd

Modem USB wielokrotna zmiana ttyACMx po ponownym połączeniu - linux, pppd

Łączę modem Gemalto (Cinterion) przez USB z moim Embedded Linux (2.6.31), z BusyBox i mdev.

Modem tworzy ttyACM [0-6], gdzie używane jest "0"dla pppd. Dostaję dis i ponowne połączenia co jakiś czas (1 godzina, 1 dzień ...). Cały system jest bardziej złożony - inne wbudowane urządzenie jest podłączone do modemu na interfejsie RS232, bla-bla-bla.

Mój problem:

Kiedy nastąpi rozłączenie i ponowne połączenie, pppd nie jest wystarczająco szybki by umrzeć i uwolnić ttyACM0, więc tworzone są ttyACM [1-7]. Następnym razem może to być [0, 2-7] lub [3-8], nie konkretny algorytm do niego.

próbowałem aktualizacja simlink (do / dev / ttyMyModem), ale ten sam problem "brak konkretnego algorytmu" ... wszystkie interfejsy są takie same - CDC-ACM (czy nie są?).

Moje obecne podejście:

Skrypt bash, zawijający pppd, z nieskończonymloop, czekając na wyjście pppd (który pozostaje na pierwszym planie, "nodetach" w moim pliku opcji). Po zgaśnięciu pppd wyjmuje sterownik (modprobe -r cdc_acm), kasuje wszystkie węzły (rm / dev / ttyACM *), ponownie instaluje sterownik (modprobe cdc_acm) i uruchamia pppd. Zadawałem 1-2-sekundowe opóźnienia między tym, co było potrzebne.

To rozwiązanie wymaga 2-4 iteracji, aby ponownie się połączyć (nie wiesz, dlaczego nie działa na pierwszym), ale wydaje się stabilne.

Moje pytanie:

  • Czy wymyślam koło?
  • Czy to rozwiązanie jest stabilne? Dobry do produkcji?
  • Czy w wyszukiwaniu w Google brakuje mi "słowa buzz"?

Nie bądź dla mnie ostra ...

Odpowiedzi:

0 dla odpowiedzi № 1

Nie mam wystarczająco dużo przedstawiciela, aby zapytać w komentarzachsekcja, więc muszę o to tutaj zapytać. Kiedy mówisz, że aktualizujesz dowiązanie symboliczne, mówisz o regułach udev? Mam taki sam problem z drukarkami, skanerami itp. W moim programie używam "udevadm info --export-db", aby odczytać poprawną devpath dla moich urządzeń po otrzymaniu błędu zapisu / odczytu. Zamykam deskryptor pliku i ponownie otwiera go na nowym urządzeniu. Czy próbowałeś zatrzymać rozłączenie? Nie byłem w stanie zrobić tego samemu, ale można spróbować wyłączyć autosusowanie. użyj opcji usbcore.autosuspend = -1 i:

for i in /sys/bus/usb/devices/usb*/power/control; do echo "on" > $i; done

Nadzieja, która pomaga. IMHO Twoje rozwiązanie jest wystarczająco stabilne. Jestem przyzwyczajony do tego rodzaju dziwnych "rozwiązań" pracujących w systemach automatyki.