一 usb 識別和 mode 轉換
1: 識別usb-otg
根據 pid vid 識別設備
2: switcmode
通過pid 從 android 資源目錄下assets 的 config 文件包找到對應的文件獲取裏面的信息,通過串口通信寫入設備,寫入成功後重新掃描獲取設備;
Opening port type SERIAL
二 AT 指令撥號
AT指令通信是通過usb串口通信實現的;不能使用腳本
/dev/ttyUSB0
115200
nocrtscts
modem
debug
nodetach
usepeerdns
defaultroute
user "3gnet"
#connect '/usr/sbin/chat -s -v -t 15 "" "ABORT BUSY" "" "ABORT ERROR" "" "ABORT NO CARRIER" "" AT "" "OK AT+CGDCONT=1,IP,3GNET" "" "OK ATDT*99#" "" CONNECT "" '
原因:插入3gmoden 手機沒有識別出 ttyUSB ( 188)設備,通過命令查看cat /proc/devices 不支持ttyUSB
腳本說明:
PPP連接關係密切的有兩個腳本是chat和options兩個腳本。其中,chat腳本是用來進行AT呼叫和控制的腳本,而options腳本就影響PPP連接的
nsitd_config:爲 options , nsitd_config_chat: 爲chat;
執行腳本:pppd nsitd_configs
1: usb modeswitch 轉換完成後發送的命令,確保SIM卡是否正常;
>
ATE0
<
ATE0
OK
>
AT+CGSN
<
867142015776539
OK
--> device S/N: 867142015776539
>
AT+CPIN?
<
+CPIN: READY
OK
AT+CPIN?
命令解釋:檢查登入移動設備(ME)的密碼.
命令格式:AT+CPIN?
命令返回:+CPIN: 狀態
其中狀態值可能是:
READY(表示 SIM卡正常,同時不需要登入密碼),
SIM PIN (表示 ME等待提供 SIM卡的 PIN 碼)
SIM PUK (表示 ME等待提供 SIM卡的 PUK碼)
SIM PIN2 (表示 ME等待提供 SIM 卡的 PIN2 碼)
SIM PUK2 (表示 ME等待提供 SIM卡的 PUK2 碼)
PH-SIM PIN (表示設備被鎖 SIM卡,ME等待提供從手機到 SIM卡的密碼)
PH-NET PIN (表示設備被鎖網絡,ME等待提供提供網絡個性化密碼)
ERROR (表示 SIM卡失敗或沒有插入 SIM卡)
測試結果:AT+CPIN?
+CPIN: READY
表示SIM卡正常,同時不需要登入密碼。
>
AT+CIMI
<
460011025049611
OK
--> SIM S/N: 460011025049611
SIM is ready to use
2 : SIM卡準備好,點擊 connect 進行連接,發送AT 指令
>
AT+CPIN?
<
+CPIN: READY
OK
>
AT+CFUN?
<
+CFUN: 1
OK
(
AT+CFUN= 0,
modem不可以打電話,發短信,但是可以有其他操作,比如讀 sim卡之類的。
AT+CFUN= 1,
modem可以打電話,發短信...所以叫做full functionality)
>
AT+CGDCONT=1,"IP","3gnet"
<
OK
>
ATD*99# (填寫內容參考下圖 “三大運營商撥號設置” )
Dialling complete
AT撥號完成
GPRS模塊 首先通過AT命令撥號如中國移動的“*99***1#”,如果 CONNECT OK的話,那麼就說明物理層已經連通了。
那麼接着要做的工作就是連通數據鏈路層,那麼就是PPP協議了。PPP協議包括 LCP(鏈路控制協議),NCP(網路控制協議),也就是說物理層連通之後,首先就要通過LCP協議來配置串口線路的各項數據格式,和雙方的傳送數據的約定(詳見RFC),之後就是NCP協議了,NCP 主要是獲得IP地址,以及以後在PPP封裝中的IP報文的一些具體約定。
對於會話管理層消息流程來說,PDP上下文激活和ATD*99#是完全一樣地效果。但是ATD*99#除了激活PDP上下文,MODEM內部一些狀態也會發生改變,不會再保持AT命令狀態,轉而進入分組數據收發模式,這樣纔可以進行PPP協商。
三 PPP 交互
參考
ppp 協議,ppp協議爲用於建立網絡鏈路工作在
數據鏈路層
Now start PPP negotiation ...
>
ff03c021010000140206000000000506f7adb02907020802a565
<
ff03c021010000190206000000000305c2230505060106aaaa0702080218d8
>
ff03c021030000080304c023f7d7
<
ff03c021020000140206000000000506f7adb029070208024e0c
<
ff03c021010100180206000000000304c02305060106aaaa070208020aed
>
ff03c021020100180206000000000304c02305060106aaaa07020802c600
>
c023010100100564756d6d790564756d6d79f4d3
<
ff03c0210b0200080106aaaad2c0
<
c0230201000500fd30
>
802101000016030600000000810600000000830600000000627c
<
80210300001c81060a0b0c0d83060a0b0c0e82060a0b0c0d84060a0b0c0e0951
<
80210100000467c3
>
802102000004aae6
<
80210300001603060ad2fcd781067b7b7b7b83067b7b7b7c851a
>
80210101001603060ad2fcd781067b7b7b7b83067b7b7b7c4277
<
80210201001603060ad2fcd781067b7b7b7b83067b7b7b7cb484
Local IP: 10.210.252.215/32
Peer IP: 10.64.64.64
DNS1: 123.123.123.123
DNS2: 123.123.123.124
Send initial IP packet ...
First IP packet received - we are online
PPP negotiation finished
四 創建VPN
修改route 表,並啓動自定義的
VpnServicePpp設置vpn,開始上網
下面爲修改route表
setprop ctl.start ril-daemon
(patch 掉系統的一些服務,例如 installd, rild 之類,殺掉原來的進程,然後重新啓動新進程。系統的服務最好用 setprop 來停止和啓動
setprop ctl.stop ril-daemon
setprop ctl.start ril-daemon
patch 掉原來的服務了,整個過程不需要重新啓動手機
)
export LD_LIBRARY_PATH=/vendor/lib:/system/lib
export CLASSPATH=12d1/jc.jar
su -cn r:u:system_app:s0 -c "./start ./ com.android.commands.jc.Jc connected 19_460011025049611 TypeError: 10.37.24.92 10.64.64.64 123.123.123.123 123.123.123.124 </dev/null" &
ip route add default dev tun0 2>/dev/null
ip route add default dev tun0 2>/dev/null
ip route add default dev tun0 2>/dev/null
ip route add default dev tun0 2>/dev/null
ip route add default dev tun0 2>/dev/null
exit