Używam na jednym z hotspotów rozwiązanie z MMDVM na bazie Arduino DUE. Zauważyłem że od czasu do czasu gubiony jest link między komputerem a Arduino DUE. Początkowo myślałem że to problem jakości kabla ale wymiana kabli nie rozwiązała problemu. Wygląda że być może jakość wykonania klonu Arduino DUE złącza mikroUSB jest kiepskiej jakości ale podobny problem miałem z STM32F433. Gubienie linku na USB zdarzało się czasami raz w tygodniu albo raz na 3 tygodnie a objawy były takie że w logach systemowych pojawiała się komunikat:

 kernel: [353272.228539] usb usb6: USB disconnect, device number 1
 kernel: [353272.556015] usb 5-2: new full-speed USB device number 2 using uhci_hcd
 kernel: [353272.768617] usb 5-2: New USB device found, idVendor=2341, idProduct=003d
 kernel: [353272.768620] usb 5-2: New USB device strings: Mfr=1, Product=2, SerialNumber=220
 kernel: [353272.768622] usb 5-2: Product: Arduino Due Prog. Port
 kernel: [353272.768624] usb 5-2: Manufacturer: Arduino (www.arduino.cc)
 kernel: [353272.768626] usb 5-2: SerialNumber: 95632313334351A0C251
 kernel: [353272.771745] cdc_acm 5-2:1.0: ttyACM1: USB ACM device

w efekcie każde rozłącznie i ponowne podłączanie USB skutkowało zmianą przypisanej nazwy portu z ttyACM0 na ttyACM1 i odwrotnie. W konfiguracji MMDVMHost w pliku MMDVM.ini podajemy nazwę portu do którego jest podpięty modem:

[Modem]
Port=/dev/ttyACM0

Utrata komunikacji z portem USB skutkowała że proces MMDVMHost dostawał 100% CPU zajętości i doprowadzał że komputer CPU dostawał większej temperatury.

Rozwiązaniem było użycie skryptu do restartu mmdvmhost po utracie linku oraz zastąpienie nazwy portu w MMDVM.ini z ttyACM0 na mmdvm.

[Modem]
Port=/dev/mmdvm

Zakładamy plik /etc/udev/rules.d/mmdvm.rules

SUBSYSTEM=="tty", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="003d", SYMLINK+="mmdvm", RUN+="/lib/udev/restart-mmdvm" 

Używając komendy:

lsusb

pobieramy niezbędne informacje dla portu Arduino DUE które wpisujemy do pliku mmdvm.rules

Bus 005 Device 002: ID 2341:003d Arduino SA 

idVenodr=2341
idProduct=003d

zawartość skryptu "restart-mmdvm" który umieszczamy w katalogu /lib/udev wygląda tak:

#!/bin/sh
/bin/systemctl stop mmdvmhost.service
sleep 5
/bin/systemctl start mmdvmhost.service
#echo "Restart MMDVMHost" >/etc/mmdvm/scripts/check-mmdvmhost.txt

Ostatnia linia z komendą "echo" używałem do monitorowania kiedy nastąpiła taka sytuacja tzn wymagająca działania tego skryptu.

Poprzedni Post Następny Post

Cytowanie lub kopiowanie treści jest dozwolone w przypadku podania źródła pochodzenia tekstu i/lub autora.