392801 ランダム
 ホーム | 日記 | プロフィール 【フォローする】 【ログイン】

頑張れ!ポイド

頑張れ!ポイド

【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! --/--
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x

PR

カテゴリ

L-01D

(2)

P01D

(3)

SC-02B

(3)

ISW12HT

(1)

DIGNO

(10)

Linux

(1)

IS11LG

(22)

図書館

(1)

INFOBAR A02

(7)

L01E

(18)

MEMU

(0)

SC06D

(4)

LGL21

(14)

LGL22

(2)

SC03E

(20)

L01F

(4)

Android

(5)

github

(1)

Z500KL

(1)

SCL23

(2)

日記/記事の投稿

キーワードサーチ

▼キーワード検索

コメント新着

solarisintel@ Re[1]:L01E用のoreo(8.0, 8.1) カスタムROM(03/11) magicianさんへ 普通のwipe操作ではROMが…
magician@ Re:L01E用のoreo(8.0, 8.1) カスタムROM(03/11) 初めまして、お助けください。 SC-03Eに、…
magician@ Re:L01E用のoreo(8.0, 8.1) カスタムROM(03/11) 初めまして、お助けください。 SC-03Eに、…
ヴァジャイナ@ Re:SC03E用のAndroid 10, Optimized-LineageOS-17.1-20220106-sc03e.zip(01/06) こちらのandroid 10のロムですが、今年の…
goofy ahh@ Re[8]:L01Fでlineage-17.1 Android 10.0を動かしてみた(11/27) 間違えて2回しちゃいましたすいません
2017年02月14日
XML
カテゴリ:L01E
IS11LGで USBガジェットとして、ECM (ACM-CDC-Ethernet)ドライバをカーネルに実装して
逆テザリングで通信できるようになったので、同様にL-01Eでもルートなしで逆テザリングを
してみようという話です。この方法はLGのスマホなら大抵可能だと思います。




まず、USBの接続方法ですが、
設定⇒PC接続にある「LGソフトウェア」を改変し、選択することで行います。
「LGソフトウェア」の本来の機能は無視します。



「LGソフトウェア」の選択ですが、ルート直下のinit.lge.usb.rcに記述されている以下の記述がトリガーになり、その中に記載されている処理が動きます。

on property:sys.usb.config=pc_suite
    stop adbd
    write /sys/class/android_usb/android0/enable 0
    write /sys/class/android_usb/android0/idVendor 1004
    write /sys/class/android_usb/android0/idProduct 631B
    write /sys/class/android_usb/android0/bDeviceClass 239
    write /sys/class/android_usb/android0/bDeviceSubClass 2
    write /sys/class/android_usb/android0/bDeviceProtocol 1
    write /sys/class/android_usb/android0/f_acm/acm_transports hsic
    write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
    write /sys/class/android_usb/android0/functions acm,diag,mtp
    write /sys/class/android_usb/android0/enable 1
    setprop sys.usb.state ${sys.usb.config}

on property:sys.usb.config=pc_suite,adb
    write /sys/class/android_usb/android0/enable 0
    write /sys/class/android_usb/android0/idVendor 1004
    write /sys/class/android_usb/android0/idProduct 631B
    write /sys/class/android_usb/android0/bDeviceClass 239
    write /sys/class/android_usb/android0/bDeviceSubClass 2
    write /sys/class/android_usb/android0/bDeviceProtocol 1
    write /sys/class/android_usb/android0/f_acm/acm_transports hsic
    write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
    write /sys/class/android_usb/android0/functions acm,diag,mtp,adb
    write /sys/class/android_usb/android0/enable 1
    start adbd
    setprop sys.usb.state ${sys.usb.config}

つまりsetpropでsys.usb.configをpc_suiteにセットするとこの記述の箇所がイベントルーチンになって、カーネルの特定のファイルへ書き込んでスマホのUSB接続が切り替えるようになっています。

ちなみに、普通のスマホでは、以下のようにsys.usb.config の値とfunctionに書き込むパラメータが同じケースが多いんですが、sys.usb.stateの値とfunctionの値が違うケースもあります。

on property:sys.usb.config=mass_storage,adb
    ・・・
    write /sys/class/android_usb/android0/functions mass_storage,adb
    ・・・
    setprop sys.usb.state ${sys.usb.config}


また、USBテザリングの際には、プロパティsys.usb.config の値は、LGスマホの場合は、ecmになっています。

on property:sys.usb.config=ecm

LG以外のスマホだと

on property:sys.usb.config=rndis

と記述されていることが多いです。

ecmとは、CDC-ECM のことで、USB CDC ECM(Ethernet Networking Control Model)のことを指します。USBで擬似インサーネットを作るということです。rndisも同じです。


テザリングの時にも、USB擬似インサーネットの機能がカーネル側およびPC側のドライバも選択されてロードされるんですが、テザリングの際には、スマホ側でDHCPサーバが起動してIPアドレスを自動でリリースしたりしています。それだと逆テザリングにならないので、只のUSBインサーネットモードにして、PCのルーティングを使ってネットワークを共有してしまおうという考えです。

上記だけの修正では、インサーネットデバイス(この場合は、usb0)はネットワークとしてUPしていないし、IPアドレスも割り当ててられていないのでこのプロパティが呼ばれたら、ついでにシェルも実行してデバイスをUPしIPアドレスを割り当てます。

これが以下の記述です。

① init.lge.usb.rc を修正(on property:sys.usb.config=pc_suiteとpc_suite,adbを書き換え)

# ecm (usb-ethernet)
on property:sys.usb.config=pc_suite
    stop adbd
    write /sys/class/android_usb/android0/enable 0
    write /sys/class/android_usb/android0/idVendor 1004
    write /sys/class/android_usb/android0/idProduct 6312
    write /sys/class/android_usb/android0/bDeviceClass EF
    write /sys/class/android_usb/android0/bDeviceSubClass 02
    write /sys/class/android_usb/android0/bDeviceProtocol 01
    write /sys/class/android_usb/android0/functions ecm
    write /sys/class/android_usb/android0/enable 1
    setprop sys.usb.state ${sys.usb.config}
    setprop persist.usb.ethernet.enable 1

on property:sys.usb.config=pc_suite,adb
    write /sys/class/android_usb/android0/enable 0
    write /sys/class/android_usb/android0/idVendor 1004
    write /sys/class/android_usb/android0/idProduct 6312
    write /sys/class/android_usb/android0/bDeviceClass EF
    write /sys/class/android_usb/android0/bDeviceSubClass 02
    write /sys/class/android_usb/android0/bDeviceProtocol 01
    write /sys/class/android_usb/android0/functions ecm,adb
    write /sys/class/android_usb/android0/enable 1
    start adbd
    setprop sys.usb.state ${sys.usb.config}
    setprop persist.usb.ethernet.enable 1


② init.lge.usb.rc に追加(IPアドレスの割り当て)

# cdc ethernet (ethernet over usb)
service wakeup_eth0 /system/bin/sh /system/etc/wakeup_eth0.sh
    user root
    disabled
    oneshot

on property:persist.usb.ethernet.enable=1
    start wakeup_eth0

on property:persist.usb.ethernet.enable=0
    stop  wakeup_eth0



② /system/etc/wakeup_eth0.sh を作成

#!/system/bin/sh

# mobile data off
svc data disable

ip link set usb0 up
ip addr add 192.168.137.7/24 broadcast 192.168.137.255 dev usb0
ip route add 192.168.137.1 dev usb0
ip route add default via 192.168.137.1 dev usb0

setprop net.dns1 8.8.8.8


IPアドレスは、192.168.137.X に割り当てます(上記では192.168.137.7)。
これはWindows7のネットワーク共有機能を用いるためです。Windows7のネットワーク共有では、
Windows7側のIPアドレスが192.168.137.1に固定されるためそれと同一のネットワークセグメントのIPアドレスを割り当てます。

最後の行のDNS(net.dns1)の書き換えですが、DNSサーバとしてGoogleのDNSサーバ 8.8.8.8 を
指定します。なお、モバイル通信が生きている状態だとモバイル通信側のプロセスでこのDNS(net.dns1)をキャリアのDNSサーバへ上書きしてしまいます。そのため、最初にモバイル通信をOFFにして
(svc data disable)書き換えたDNSが他のプロセスで変更されないようにしています。

以上で修正は終わり。スマホへboot.imgの書き換えが済んだ後の使い方ですが、

①PC接続を「LGソフトウェア」に変更する
 モバイル通信がOFFになったことを確認する

②スマホをPCにUSB接続する。
デバイスマネージャでみるとこんな感じでLGEのネットワークドライバが生成されます。



③PC側の他のネットワークのプロパティでネットワークの共有設定を行う
  共有のホームネットワーク接続にUSBネットワークの「ローカルエリア接続XX」を選択。


こんな作業のやり方で通信が可能になります。

なお、解除は実装していないので使用後はPC接続設定を「充電のみ」などに切り替えて再起動してください。

注)アプリによっては「ネットワークが繋がっていません」というメッセージで動かないものがあります。これはアプリの中でConnectityManagerを呼んでおり接続中のネットワークがWIFIなのかMobile(3G/LTE)なのか判断しているのが原因です。
GooglePlayやYoutubeなどはConnectityManagerを呼んでいるのでこの方法だけでは使えません。

なお、こういうアプリも使えるようにするには、XposedInstallerを入れてFakeWifiConnectionなどのモジュールで回避する方法があります(要ルート)


参考1)
L01EのROMバージョンL01E20D00用に作ったCWMからのupdate.zipを作ってみたので参考にしてください。(L01Eは、boot.img書き換えにloki_flashツールを使います。ちょっと特殊なスマホです)


参考2)ramdiskのファイル修正後からupdate.zipを作るスクリプト

echo "repack ramdisk"
cd boot
repack_ramdisk ./ramdisk ./boot.img-ramdisk.cpio.gz

echo "repack boot.img"
mkbootimg \
 --kernel ./boot.img-kernel \
 --ramdisk ./boot.img-ramdisk.cpio.gz \
 --cmdline 'vmalloc=600M console=ttyHSL0,115200,n8 lpj=67677 user_debug=31 msm_rtb.filter=0x0 ehci-hcd.park=3 coresight-etm.boot_enable=0 androidboot.hardware=geehdc' \
 --base            0x80200000 \
 --ramdisk_offset  0x02000000 \
 --pagesize 2048 \
 -o ../boot.img

echo "repack update.zip"
cd ..
zip -r ../jb-boot-mod.zip META-INF boot.img system

echo "done"


boot.imgの再構築と書き換えが必要ですので、難しい方は、xda にある Android Reverse Tethering 3.19(要ルート)を使った方がいいかも





お気に入りの記事を「いいね!」で応援しよう

最終更新日  2017年02月15日 08時26分29秒
コメント(0) | コメントを書く
[L01E] カテゴリの最新記事



© Rakuten Group, Inc.