Не поднимается сетевой интерфейс usb0 после отключения питания

Добрый день! Имею Wirenboard 6.8.1 c WBC-4G модемом. Настроил работу модема в режиме сетевой карты по инструкции в minicom

AAAAAAAAAT
OK
AT+DIALMODE=0
OK
AT+CGDCONT=1,"IP","xxx"
OK
AT+CGCONTRDP
OK

После этого добавил секцию в /etc/network/interfaces
auto usb0
iface usb0 inet dhcp
pre-up wb-gsm restart_if_broken
pre-up sleep 10

И сделал
ifup usb0

Модем заработал, при перезагрузке всё также автоматически поднялось. А вот после отключения питания и загрузки контроллера интерфейс не поднимается, в выводе lsusb модем отсутствует. Если сделать вручную wb-gsm restart_if_broken, то модем подключится по usb и интерфейс можно будет поднять вручную, но мне необходимо настроить модем так, чтобы он сам всегда поднимался при холодном старте контроллера. Попробовал настроить модем по инструкции от предыдущих версий, через ppp, но новый модем не создаёт устройства /dev/ttyACM0 .
Можете подсказать правильную последовательность действий, чтобы добиться автоматического поднятия 4g сети при включении контроллера?

Добрый день. Рекомендую такое решение:

Судя по https://github.com/wirenboard/wb-utils/compare/v2.3...v2.3.1 достаточно просто обновить пакет wb-utils до актуальной версии (в моём случае 2.3 → 2.3.1), но передёрнуть питание смогу только завтра.

И ещё один вопрос: мне нужно автоматизированно раскатывать определённую конфигурацию на закупаемые контроллеры, для этого я использую ansible. Со старым модемом конфигурирование нового вайрена в части настройки 4G сводилось к подкладыванию чат-скрипта и ppp-конфига для моего сотового оператора, и добавлению секции ppp в /etc/network/interfaces. С новым модемом инструкция в вики предлагает мне вручную запускать minicom и настраивать модем через AT-команды. Есть ли способ прописать эти команды в какой-либо конфиг, чтобы они выполнялись сами и не требовали вручную выполнять их на каждом новом устройстве? Заскриптовать выполнение сценария minicom в ansible, конечно, можно, но на первый взгляд это делается с лютейшими костылями, а хочется нормального решения с конфигом.

Значит собрался уже новй, ОК, значит я неправ - не проверил.

Проще выполнить chat с нужными командами как по мне.
То есть вот кусок из накиданного быстро скрипта:

PORT=/dev/ttyGSM
REPORT_FILE=/root/report_dial.txt

/usr/sbin/chat -s TIMEOUT 20 ABORT "ERROR" ECHO ON "" "AT" OK "AT+CMGF=1" OK "AT+DIALMODE=0" OK "AT+CGDCONT=1,\"IP\",\"beeline\"" OK "AT" OK "AT+CGCONTRDP" "OK"  > $PORT < $PORT 2>$REPORT_FILE

выводит в файл (ну или перенаправите куда угодно для анализа) такое:

AT
OK
AT+CMGF=1
OK
AT+DIALMODE=0
OK
AT+CGDCONT=1,"IP","beeline"
OK
AT
OK
AT+CGCONTRDP
+CGCONTRDP: 1,5,"beeline.MNC099.MCC250.GPRS","10.202.115.108","","10.10.30.206","10.10.30.202","","",0,0

OK

Как по мне проще даже несколько раз вызвать chat, получя от него вменяемый выхлоп, чем пытаться заскриптовать mnicom (хотя тоже можно, не спорю).

Дописал, кстати, в вики:
https://wirenboard.com/wiki/GSM/GPRS#.D0.9D.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B9.D0.BA.D0.B0_.D0.BC.D0.BE.D0.B4.D0.B5.D0.BC.D0.B0_.D0.BA.D0.B0.D0.BA_.D1.81.D0.B5.D1.82.D0.B5.D0.B2.D0.BE.D0.B9_.D0.BA.D0.B0.D1.80.D1.82.D1.8B

1 лайк

Спасибо за пример скрипта. После обновления пакета проблема устранилась.

1 лайк

Я сделал вот так:

echo "source-directory /etc/network/interfaces.d" >> /etc/network/interfaces
cat <<'EOF' > /etc/network/interfaces.d/usb0
# 4G/LTE MODEM:
auto usb0
allow-hotplug usb0
iface usb0 inet dhcp
  # for beeline:
  #apn internet.beeline.ru
  # for megafon:
  #apn internet
  # for mts:
  #apn internet.mts.ru
  pre-up wb-gsm restart_if_broken
  pre-up /usr/sbin/chat -s TIMEOUT 20 ABORT "ERROR" ECHO ON "" "AAAAAAAAAAAAAT" OK "AT+CPIN?" OK "AT+CMGF=1" OK "AT+DIALMODE=0" OK "AT+CGDCONT=1,\"IP\",\"${IF_APN:-internet}\"" OK  "AT+CGCONTRDP" "OK"  > /dev/ttyGSM < /dev/ttyGSM
  pre-up sleep 10
EOF

Опция allow-hotplug очень важна, она инструктирует вызывать ifup для этого интерфейса, когда USB устройство отваливается и появляется вновь, у меня это случается часто.
Скрипт инициализации модема запихал сюда же. Директива apn позволяет вынести этот параметр из недр длинной командной строки.

1 лайк

Да, вполне хорошее решение. Но большого смысла вызывать chat если не было изменений APN нету, эти параметры задаются один раз и хранятся во флеш-памяти модема.
А “отваливается” - как часто? С какими симптомами в dmesg?

Особой статистики пока нет, модуль 4G мы с удивлением обнаружили в новой партии контроллеров вчера и пришлось экстренно учиться с ним жить. На тестовом устройстве ситуация повторялась сегодня с момента включения примерно в полдень в

  • 13:13
  • 14:06
  • 15:29
  • и вчера по крайней мере дважды.
окт 14 13:18:26 wiren ntpd[1661]: Listen normally on 14 usb0 [fe80::b403:3eff:fe0d:2b1e%10]:123
окт 14 14:06:03 wiren kernel: usb 2-1.3: USB disconnect, device number 9
окт 14 14:06:03 wiren kernel: rndis_host 2-1.3:1.0 usb0: unregister 'rndis_host' usb-ci_hdrc.1-1.3, RNDIS device
окт 14 14:06:03 wiren dhclient[12595]: receive_packet failed on usb0: Network is down
окт 14 14:06:03 wiren kernel: option1 ttyUSB0: GSM modem (1-port) converter now disconnected from ttyUSB0
окт 14 14:06:03 wiren kernel: option1 ttyUSB1: GSM modem (1-port) converter now disconnected from ttyUSB1
окт 14 14:06:03 wiren systemd[1]: Stopping ifup for usb0...
окт 14 14:06:03 wiren kernel: option1 ttyUSB2: GSM modem (1-port) converter now disconnected from ttyUSB2
окт 14 14:06:05 wiren ifdown[15109]: Cannot find device "usb0"
окт 14 14:06:05 wiren systemd[1]: Stopped ifup for usb0.
окт 14 14:06:05 wiren ntpd[1661]: Deleting interface #13 usb0, 192.168.0.100#123, interface stats: received=0, sent=0, dropped=0, active_time=2859 secs
окт 14 14:06:05 wiren ntpd[1661]: Deleting interface #14 usb0, fe80::b403:3eff:fe0d:2b1e%10#123, interface stats: received=0, sent=0, dropped=0, active_time=2859 secs
окт 14 14:06:08 wiren kernel: usb 2-1.3: new high-speed USB device number 10 using ci_hdrc
окт 14 14:06:08 wiren kernel: usb 2-1.3: New USB device found, idVendor=1286, idProduct=812a
окт 14 14:06:08 wiren kernel: usb 2-1.3: New USB device strings: Mfr=3, Product=2, SerialNumber=0
окт 14 14:06:08 wiren kernel: usb 2-1.3: Product: WUKONG
окт 14 14:06:08 wiren kernel: usb 2-1.3: Manufacturer: MARVELL
окт 14 14:06:08 wiren kernel: usb 2-1.3: USB disconnect, device number 10
окт 14 14:06:15 wiren kernel: usb 2-1.3: new high-speed USB device number 11 using ci_hdrc
окт 14 14:06:15 wiren kernel: usb 2-1.3: device descriptor read/all, error -71
окт 14 14:06:16 wiren kernel: usb 2-1.3: new high-speed USB device number 13 using ci_hdrc
окт 14 14:06:16 wiren kernel: usb 2-1.3: config 1 has an invalid interface number: 5 but max is 4
окт 14 14:06:16 wiren kernel: usb 2-1.3: config 1 has no interface number 3
окт 14 14:06:16 wiren kernel: usb 2-1.3: New USB device found, idVendor=1e0e, idProduct=9011
окт 14 14:06:16 wiren kernel: usb 2-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
окт 14 14:06:16 wiren kernel: usb 2-1.3: Product: Mobile Composite Device Bus
окт 14 14:06:16 wiren kernel: usb 2-1.3: Manufacturer: Marvell
окт 14 14:06:16 wiren kernel: usb 2-1.3: SerialNumber: 200806006809080000
окт 14 14:06:16 wiren kernel: rndis_host 2-1.3:1.0 usb0: register 'rndis_host' at usb-ci_hdrc.1-1.3, RNDIS device, da:01:6b:fa:2b:0b
окт 14 14:06:16 wiren kernel: usb 2-1.3: GSM modem (1-port) converter now attached to ttyUSB0
окт 14 14:06:16 wiren kernel: usb 2-1.3: GSM modem (1-port) converter now attached to ttyUSB1
окт 14 14:06:16 wiren kernel: usb 2-1.3: GSM modem (1-port) converter now attached to ttyUSB2
окт 14 14:06:16 wiren systemd[1]: Started ifup for usb0.

chat в стартовом скрипте - чтобы не нужно было делать дополнительных телодвижений при конфигурировании устройства и чтобы при смене оператора, если это потребуется, было проще прописать нужный apn (не уверен что это вообще требуется, но заложить функционал было не сложно; по ppp некоторые операторы требуют свой правильный apn, “internet” их не устраивает)

У меня похожая проблема. Первый раз все поднялось, но не было интернета. Скорее всего из-за конфликта IP. на одном из интерфейсов был такой же айпишник. Все отключив и перенастроив другие интерфейсы столкнулся с такой же проблемой, не видит usb0.

Вывод chat:

AAAAAAAAAAAAAT
OK
AT+CMGF=1
OK
AT+DIALMODE=0
OK
AT+CGDCONT=1,"IP","internet.yota"
OK
AT+CGCONTRDP
+CGCONTRDP: 1,5,"internet.yota.MNC011.MCC250.GPRS","10.110.8.141","","10.205.171.77","10.205.171.68","","",0,0

OK

dmesg:

[ 3219.184339] usb 2-1.3: USB disconnect, device number 5
[ 3236.116648] usb 2-1.3: new high-speed USB device number 6 using ci_hdrc
[ 3236.281850] usb 2-1.3: New USB device found, idVendor=1286, idProduct=812a
[ 3236.288976] usb 2-1.3: New USB device strings: Mfr=3, Product=2, SerialNumber=0
[ 3236.296454] usb 2-1.3: Product: WUKONG
[ 3236.300228] usb 2-1.3: Manufacturer: MARVELL
[ 3236.321018] usb 2-1.3: can't set config #1, error -71
[ 3236.336159] usb 2-1.3: USB disconnect, device number 6
[ 3242.776417] usb 2-1.3: new high-speed USB device number 7 using ci_hdrc
[ 3242.927228] usb 2-1.3: config 1 has an invalid interface number: 5 but max is 4
[ 3242.934671] usb 2-1.3: config 1 has no interface number 3
[ 3242.946575] usb 2-1.3: New USB device found, idVendor=1e0e, idProduct=9011
[ 3242.953590] usb 2-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 3242.961196] usb 2-1.3: Product: Mobile Composite Device Bus
[ 3242.966907] usb 2-1.3: Manufacturer: Marvell
[ 3242.971319] usb 2-1.3: SerialNumber: 200806006809080000

Куда можно копать?

Что происходит при получении адреса для интерфейса?