一 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 "" '
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# (填写内容参考下图 “三大运营商拨号设置” )
<
CONNECT
OK
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表
>
pwd
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