mori22554
2020年12月1日 16時29分
お世話になっております。森と申します。
Armadillo iot g3lを使用しており、起動時にサービスからスクリプトを呼んでAPN設定を行っていますが、不明点があります。
スクリプトの内容としてはModemManagerを使用して回線情報を読み出し、設定ファイルと異なっていればAPN設定を更新するものです。
(一番下に概要を記載しておきます。)
この起動時のLTE設定のスクリプトで、モデム情報を吸い出せない現象が起こっています。
また起動時にスクリプトを呼ばないように変更しても、前のAPN設定で勝手にLTE接続されてしまうなど、不明な動きがあります。
下記★の内容についてご確認いただきたく、よろしくお願いいたします。
■確認したい内容
①モデム情報取得失敗について
モデムの情報とbearer情報取得が、起動タイミングで成功しません。
(mmcli -m 0 | grep Bearers → error: couldn't find modem at '/org/freedesktop/ModemManager1/Modem/0' )
Sleepで数十秒待つ処理を入れると、取得できました。
起動時すぐは読み出せないものなのでしょうか?どのタイミングで読み出せばよいとかあればご教授いただきたいです。 ★
そもそもですがベアラ情報について、いまひとつ概念やモデム、SIMとの関係性を理解できていません。
SIMを入れないと取得できないようですが、 論理的な通信回線みたいな感じでしょうか? ★
②モデム設定(APN)について
起動時にAPN設定のスクリプトを呼ばないようにして再起動を行っても、起動後LTE接続状態になります。
前回のAPN設定がModemManager?とかに残っているのでしょうか? ★
その場合、起動時にAPNの設定を未設定の状態で立ち上げることはできないでしょうか? ★
connection-recover.serviceを無効にすれば未設定で立ち上がるかもと思いdisableにしてみましたが、結果は同じでした。
<補足>
・APN設定していないのに、起動後に自動でttyACM0ができる
~$ nmcli d
DEVICE TYPE STATE CONNECTION
eth0 ethernet connected Wired connection 1
ttyACM0 gsm connected gsm-ttyACM0 ← できている
・APN設定していないのに、Syslogを見ると前回のAPN設定が出力されていた。一部内容はマスキングしておきます。
Nov 30 11:29:01 armadillo ModemManager[1490]: APN: ●●●
Nov 30 11:29:01 armadillo ModemManager[1490]: IP family: ●●●
Nov 30 11:29:01 armadillo ModemManager[1490]: Allowed authentication: ●●●
Nov 30 11:29:01 armadillo ModemManager[1490]: User: ●●●
Nov 30 11:29:01 armadillo ModemManager[1490]: Password: '●●●'
■LTE設定スクリプトの概要
① 回線情報を取得
#モデムの情報、bearer情報取得
bearer=$(mmcli -m 0 | grep Bearers)
no="${bearer##*/}"
no="${no//\'/}"
#回線情報取得
mmcli -b "$no"
でAPN,user,passwordを取得
② ①で取得した設定と、ユーザーファイルのAPN設定と見比べて、異なっていれば設定を更新
nmcli connection modify gsm-ttyACM0 gsm.apn $apn gsm.user $user gsm.password $password
コメント
mori22554
mori22554
お世話になっております。森です。
アドバイスいただいたように、ポーリングでモデム情報を取得するまで待つよう実装しましたが、
Overlayでの実装について、認識と異なる点があります。追加で確認させてください。
もともとA社のSIMを使用しA社のAPN設定で接続できた状態でルートファイルシステムを固めています。
B社のSIMに差し替え、B社のAPN設定してLTE接続できた場合、再起動してもmmcliでモデム情報を取得するとB社のAPN設定を取得できると思っていたのですが、A社の情報が取れてしまいます。
ROMとLTEモジュールは独立していて、モデム情報はLTEモジュールから取得すると思ってましたが、EMMC上の情報を取得しているのでしょうか?
(ここでいうAPN設定とは、apn, user, passwordのことです)
【確認手順】
①A社のSIMを挿入して起動 → 接続できることを確認
②電源OFF
③B社のSIMに差し替え
④電源ON
⑤B社のAPN設定を実施 → 接続になることを確認
⑥再起動
⑦mmcliでモデム情報を取得 → A社のAPN設定が取得される ★B社のAPN設定を取得できると思っていた
※モデム情報取得手順
1)bearer=$(mmcli -m 0 | grep Bearers)
no="${bearer##*/}"
no="${no//\'/}"
2)mmcli -b [①のno]
でモデム情報を読み出す
→ A社のAPN設定が取得された。
at_koseki
古関です。
> ROMとLTEモジュールは独立していて、モデム情報はLTEモジュールから取得すると思ってましたが、EMMC上の情報を取得しているのでしょうか?
> (ここでいうAPN設定とは、apn, user, passwordのことです)
はい。
# nmcli connection add type gsm ifname [con-name] apn [apn] user [user] password [password]
上記コマンドを実行し、LTE接続を行った場合、
APN設定(apn, user, password)はeMMCルートファイルシステム上の以下設定ファイルに保存されます。
/etc/NetworkManager/system-connections/gsm-[con-name]
システム起動時に設定ファイルが保存されていれば
設定ファイルを読み出し自動接続を行う仕組みになっております。
> ⑤B社のAPN設定を実施 → 接続になることを確認
> ⑥再起動
もし、overlayFSによるeMMCの保護機能を有効にしている場合、
⑤で実施したAPN設定はeMMC内の設定ファイルには保存されず、
⑥の再起動後はA社のAPNの設定ファイルが残っている状況になるはずです。
よろしくお願いします。
at_mitsuhiro.yoshida
2020年12月1日 18時13分
吉田です。
> また起動時にスクリプトを呼ばないように変更しても、前のAPN設定で勝手にLTE接続されてしまうなど、不明な動きがあります。
製品マニュアルにも記載しておりますが、一度 LTE の設定を行うと、次回起動時にもその設定で接続を試みます。
https://manual.atmark-techno.com/armadillo-iot-g3l/armadillo-iotg-g3l_p…
> 起動時すぐは読み出せないものなのでしょうか?どのタイミングで読み出せばよいとかあればご教授いただきたいです。
モデムの情報を取得するには SIM が挿入されている必要があります。
https://manual.atmark-techno.com/armadillo-iot-g3l/armadillo-iotg-g3l_p…
また、起動直後はモデムや ModemManager の起動などが完了していない為、mmcli -m 0 が取得できないタイミングがあります。
確実に何秒経過すると取得出来るというタイミングはありませんので、
ポーリングして頂くのがいいかと思います。
参考としてですが、設定している apn /username であれば、
以下の手段でも取得出来ます。
nmcli connection show gsm-ttyACM0 | grep gsm.apn
nmcli connection show gsm-ttyACM0 | grep gsm.username
> そもそもですがベアラ情報について、いまひとつ概念やモデム、SIMとの関係性を理解できていません。
> SIMを入れないと取得できないようですが、 論理的な通信回線みたいな感じでしょうか?
大体そのようなものです。論理的な伝送路です。
3G/LTE の概要の話になりますので、概要を説明しているサイトなどを参考にしてください。
> その場合、起動時にAPNの設定を未設定の状態で立ち上げることはできないでしょうか?
終了時に nmcli connection delete コマンドを設定すると設定情報が消去されます。
または、
nmcli connection add 時もしくは nmcli connectio modify で
connection.autoconnect no オプションを付与すると自動的に接続しなくなります。
詳細は nmcli コマンドのヘルプなどを参照ください。
よろしくお願いします。