web-dev-qa-db-ja.com

LinuxでHuawei3Gモデムから「NOCARRIER」をランダムに取得

Linuxでhuawei3Gモデムを使用しています。 NetworkManagerをしばらく使用した後、wvdialを使用してモデムと通信し、pppdを起動します。udevルールを追加して、usbデバイスが接続されたときにwvdialが自動的に起動するようにしました。

  1. 良いケース:モデムを接続すると、モデムの登録中にwvdialが数回失敗し、その後成功します。
  2. 悪いケース:同じですが、wvdialは「NOCARRIER」で永遠に失敗し続けます。

2)が発生した場合にのみ行うこと:デバイスのプラグを抜き、再度プラグを差し込んで、今回は良いケースに陥ることを願っています...

Gprs/umtsを切り替える、手動でオペレーターを切り替えて強制的に再登録するなど、多くのことを試しました...運がありません。それが機能しない場合、それはそのままです。

数日前、umtsが常に失敗するケースに出くわしましたが、gprsはかなりうまく成功しています。興味深いのは、Windows umtsがすぐに機能することです。したがって、これは間違いなくLinuxの問題です。

モデムはhuaweiE1762です。
NetworkManager/modem-managerにも同じ問題があります。
ubuntulucidの実行

1
lemonsqueeze

さて、何が起こっているのかと思うと、wvdialが登録を完了する前にモデムとの通信を開始すると、モデムが混乱します。

->デバイスを接続してから2秒の遅延を追加し、wvdialを実行する前に、デバイスが登録されるまでスクリプトを待機させます。その後、それは常に動作します!

#!/bin/bash
while [ -e /dev/ttyUSB0 ] ; do
  # wait to be registered
  if ./operator | grep -q ','; then
    wvdial provider >> wvdial.log 2>&1
  fi
  sleep 1
done

オペレータースクリプト:

#!/bin/bash
# boy, is this ugly ...
chat -t 1 -e "" '\pAT' OK AT+COPS? +COPS '\pAT' OK >> /dev/ttyUSB1 < /dev/ttyUSB1 2>/tmp/foo
grep -m 1 '^+COPS' /tmp/foo
3
lemonsqueeze