0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AndroidスマートフォンをLinuxでUSB接続のWWANカードとして使う (root権限必須)

0
Posted at

はじめに

Androidスマートフォンを、QualcommのRmNetインターフェースを介し、LinuxでQMI制御のWWANデバイスとして認識させ、インターネット接続できるようにする方法を記載します。

AndroidのRILを切り離す方法を見つけるのにだいぶ苦労したので、誰かの役に立てばと思います。

RNDISでUSBテザリングするのが一番手っ取り早いですが

  • root権限を取得した環境で操作を誤ると、端末が文鎮化したり、モデムが故障するおそれがあります。
  • RILデーモンを停止している間は緊急通報を含む通話の発着信が不可能となるので、使用後に必ずRILデーモンを起動するか、端末を再起動してください

手順

環境

  • moto g53y 5G (XT2335-4) (root化済)
  • Debian 13 (ADB導入済み)

流れとしては、まずAndroid側でRILデーモンを停止します。するとモデムを外部から自由に操作できるようになるので、RmNetインターフェース経由でModemManagerを使用してインターネットに接続します。

1. USB接続モードを変更する

RmNetインターフェースを認識させるために、USB接続モードを変更します。

hoge@debian:~$ adb shell su -c 'setprop sys.usb.config diag,serial_cdev,rmnet,adb'

qmi_wwanモジュールが当たっているUSBデバイスと/dev/cdc-wdm0が存在していたらOKです。

hoge@debian:~$ lsusb 
...
Bus 003 Device 037: ID 05c6:9091 Qualcomm, Inc. Intex Aqua Fish & Jolla C
...
hoge@debian:~$ lsusb -t
...
/:  Bus 003.Port 001: Dev 001, Class=root_hub, Driver=xhci_hcd/12p, 480M
    |__ Port 001: Dev 037, If 0, Class=Vendor Specific Class, Driver=[none], 480M
    |__ Port 001: Dev 037, If 1, Class=Vendor Specific Class, Driver=[none], 480M
    |__ Port 001: Dev 037, If 2, Class=Vendor Specific Class, Driver=qmi_wwan, 480M
    |__ Port 001: Dev 037, If 3, Class=Vendor Specific Class, Driver=usbfs, 480M
...
hoge@debian:~$ ls -l /dev/cdc*
crw------- 1 root root 180, 0 Feb  9 22:31 /dev/cdc-wdm0
qmi_wwanモジュールが当たらない場合

qmi_wwanモジュールを読み込みます。

hoge@debian:~$ sudo modprobe qmi_wwan
hoge@debian:~$ lsmod | grep qmi
qmi_wwan               40960  0
cdc_wdm                32768  2 qmi_wwan
usbnet                 65536  3 rndis_host,qmi_wwan,cdc_ether
usbcore               409600  15 usbserial,xhci_hcd,usbnet,btmtk,rndis_host,cdc_wdm,usb_wwan,uvcvideo,qmi_wwan,btusb,xhci_pci,cdc_ether,option

2. RILデーモンの停止

モデムを自由に操作できるようにするために、AndroidのRILデーモンを停止します。

RILデーモンを停止すると、Android側でインターネット接続と緊急通報を含む通話の発着信ができなくなります。
再びRILデーモンを起動するにはadb shell su -c 'start [RILデーモンのプロセス名]'を実行します。

RILデーモンのプロセス名はベンダーによって異なる可能性があります。getprop | grep rilでRILデーモンのプロセス名を特定します。

hoge@debian:~$ adb shell su -c 'getprop | grep ril'
[gsm.version.ril-impl]: [Qualcomm RIL 1.0]
[init.svc.vendor.qcrild]: [running]
[init.svc.vendor.qcrild2]: [running]
...

自分の環境では、vendor.qcrildとvendor.qcrild2がRILデーモンとして動いていました。

RILデーモンを停止します。

hoge@debian:~$ adb shell su -c 'stop vendor.qcrild'
hoge@debian:~$ adb shell su -c 'stop vendor.qcrild2'
hoge@debian:~$ adb shell su -c 'getprop | grep ril'
[gsm.version.ril-impl]: [Qualcomm RIL 1.0]
[init.svc.vendor.qcrild]: [stopped]
[init.svc.vendor.qcrild2]: [stopped]

3. モデムに接続する

NetworkManagerを使うのが一番簡単だと思います。自動でIPアドレスも振ってくれます。

予め、インターフェース名を確認しておきます。

hoge@debian:~$ mmcli -L
    /org/freedesktop/ModemManager1/Modem/0 [QUALCOMM INCORPORATED] 0
hoge@debian:~$ mmcli -m 0 | grep ports
           |                   ports: cdc-wdm0 (qmi), wwp0s20f0u1i2 (net)

まず、APNプロファイルを追加します(povo2.0の例)。

hoge@debian:~$ nmcli connection add con-name "povo2.0" type gsm ifname "*" apn povo.jp
Connection 'povo2.0' (ff6fe0c1-dbc1-4694-a6c8-ff96e1ef15d8) successfully added.

次に、cdc-wdm0インターフェースをアクティブにします。

hoge@debian:~$ nmcli device up cdc-wdm0 
Device 'cdc-wdm0' successfully activated with 'ff6fe0c1-dbc1-4694-a6c8-ff96e1ef15d8'.

キャリア網からIPアドレスが振られ、インターネット通信ができるようになりました。

hoge@debian:~$ ip addr show wwp0s20f0u1i2 
23: wwp0s20f0u1i2: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1440 qdisc fq_codel state UNKNOWN group default qlen 1000
    link/none 
    inet 10.45.XXX.XX/30 brd 10.45.126.79 scope global noprefixroute wwp0s20f0u1i2
       valid_lft forever preferred_lft forever
    inet6 2001:268:98d0:7dce:XXXX:XXXX:XXXX:XXXX/64 scope global noprefixroute 
       valid_lft forever preferred_lft forever
hoge@debian:~$ curl v4.ident.me
106.146.XX.XX
hoge@debian:~$ curl v6.ident.me
2001:268:98d0:7dce:XXXX:XXXX:XXXX:XXXX

GUIからも確認できます。

おわりに

AndroidのRILデーモンを停止するのが肝です。RNDISと違って、RmNetはモデムを丸ごと制御できるので、セル情報など色々と検証しがいがありそうです。

今回はLinuxを使いましたが、ドライバーの問題が無ければ、Windowsでも使えそうです(未検証)。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?