以前没有调试过RIL的东西, 从零开始, 花了两周时间,终于拨号成功,这里发表出来与大家共享经验,少走弯路.

    上一篇文章是一个成功拨号的Android RIL log, 这里主要结合上一篇log进行分析, 分享一些注意事项, 由于时间有限,尽量言简意概, 主要要自己尝试去实践才会有所收获。

 

(本文所指的log行号,是指上一篇文章所标记的行号)

 

1. 所要了解的一些源码及脚本文件:

android/hardware/ril/reference_ril/   (reference_ril.c)

android/hardware/ril/rild

android/extern/ppp/pppd

android/extern/ppp/chat

android/data/etc/apn-conf-sdk.xml

android/system/core/rootdir/etc/ppp/init.gprs-pppd

android/system/core/rootdir/etc/ppp/peers/cmnet

android/system/core/rootdir/etc/ppp/chat/cmtc-isp

android/vendor/xxxxx/xxxx/system.prop

 

reference_ril.c: RIL的一些AT命令操作,通过一些onRequest接口操作,对不同的硬件,需作一些修改调整。

apn-conf-sdk.xml: 以下是一个例子,有些不支持的APN,需要自己加上去,否则在log 中会出现类似:No APN found for carrier: 46xxx, 的错误。一般移动的TD USIM是46007, 

 

有些是46000.

    

        mcc="310"

        mnc="995"

        apn="internet"

        user="*"

        server="*"

        password="*"

        mmsc="null"

    />

    

        mcc="310"

        mnc="260"

        apn="internet"

        user="*"

        server="*"

        password="*"

        mmsc="null"

    />

    

        mcc="460"

        mnc="00"

        apn="cmnet"

        user="*"

        server="*"

        password="*"

        mmsc="null"

    />

        

                mcc="460"

                mnc="07"

                apn="cmnet"

                user="*"

                server="*"

                password="*"

                mmsc="null"

        />

init.gprs-pppd: 调用pppd GPRS拨号的初始化脚本。

PPPD_PID=

 

/system/bin/setprop "net.gprs.ppp-exit" ""

 

/system/bin/log -t pppd "Starting pppd"

 

/system/xbin/pppd call cmnet $*

 

PPPD_EXIT=$?

PPPD_PID=$!

 

/system/bin/log -t pppd "pppd exited with $PPPD_EXIT"

 

/system/bin/setprop "net.gprs.ppp-exit" "$PPPD_EXIT"

 

cmnet:pppd拨号option脚本:

/dev/ttyACM2

921600

nocrtscts

nocdtrcts

local

usepeerdns

defaultroute

noipdefault

ipcp-accept-local

ipcp-accept-remote

user cmnet

password cmnet

lock

nodetach

connect "/system/xbin/chat -v -t 50 -f /system/etc/ppp/chat/cmtc-isp"

 

cmtc-isp:

ABORT 'BUSY'

ABORT 'NO CARRIER'

ABORT 'ERROR'

ABORT '+CME ERROR: 100'

""    AT

OK    AT+CGDCONT=1,"IP","CMNET"

OK    AT+CGEQREQ=1,2,128,384,0,0,0,0,"0E0","0E0",,0,0

OK    AT

OK    AT

OK    ATS0=0

OK    AT

OK    AT

OK    ATDT*98*1#

CONNECT

 

system.prop

rild.libpath=/system/lib/libreference-ril.so

rild.libargs=-d /dev/ttyACM0

 

2. 所要具备的调试工具:

microcom:  可在linux下通过发送AT命令调试硬件模块,在较新版本busybox中可以找到此模块。如命令:

#./microcom -t 12000 /dev/ttyACM0

注: -t 12000 为延迟退出ms时间,不宜太长时间,时间太长,会感觉 像死机,时间太短,经常会命令没输完就退出了。

 

ppp(pppd, chat):可手拨号连接GPRS,如命令:

# pppd call cmnet &

 

3. 设备文件

1)/dev/ttyACM0, /dev/ttyACM1, /dev/ttyACM2

    这是usb transceiver 模拟串口的设备文件,如果是直接串口连接,可能是/dev/ttyS0, /dev/mux0等。

2) #ifconfig ppp0

    GPRS连接上后,会出现ppp0的网络接口,用如上命令可以查看ppp0网络接口属性。

 

4. 常用AT命令,具体可以查《中国移动宽带随e 行客户端软件A T命令接口规范》

AT+CFUN

AT+CREG

AT+CGREG

AT

AT+COPS

AT+CPIN

AT+CIMI

AT^SYSCONFIG

ATD

AT+CGDCONT

AT+CGEQREQ

AT+CSQ

 

5. RIL启动过程分析

如果硬件模块驱动配置成功,在/dev目录下会出现类似于ttyACM0,ttyS0等的设备文件 。

1-36行: 初始化过程,设备文件由system.prop属性文件决定,

40行:   D/RILJ    (  110): [0000]> SCREEN_STATE   这里开始了第一个onRequest,

然后会开始一系列的onRequest:

40     D/RILJ    (  110): [0000]> SCREEN_STATE

49   D/RILJ    (  110): [0001]> RADIO_POWER

62   D/RILJ    (  110): [0002]> BASEBAND_VERSION

63   D/RILJ    (  110): [0003]> GET_IMEI

64   D/RILJ    (  110): [0004]> GET_IMEISV

65   D/RILJ    (  110): [0005]> REQUEST_GET_ACCESS_MODE

83   D/RILJ    (  110): [0006]> OPERATOR

84   D/RILJ    (  110): [0007]> GPRS_REGISTRATION_STATE

85   D/RILJ    (  110): [0008]> REGISTRATION_STATE

86   D/RILJ    (  110): [0009]> QUERY_NETWORK_SELECTION_MODE

87   D/RILJ    (  110): [0010]> GET_CURRENT_CALLS

88   D/RILJ    (  110): [0011]> OPERATOR

91   D/RILJ    (  110): [0012]> GPRS_REGISTRATION_STATE

96   D/RILJ    (  110): [0013]> REGISTRATION_STATE

97   D/RILJ    (  110): [0014]> QUERY_NETWORK_SELECTION_MODE

100   D/RILJ    (  110): [0015]> OPERATOR

101   D/RILJ    (  110): [0016]> GPRS_REGISTRATION_STATE

102   D/RILJ    (  110): [0017]> REGISTRATION_STATE

103   D/RILJ    (  110): [0018]> QUERY_NETWORK_SELECTION_MODE

104   D/RILJ    (  110): [0019]> SET_NETWORK_SELECTION_AUTOMATIC

105   D/RILJ    (  110): [0020]> OPERATOR

106   D/RILJ    (  110): [0021]> GPRS_REGISTRATION_STATE

107   D/RILJ    (  110): [0022]> REGISTRATION_STATE

108   D/RILJ    (  110): [0023]> QUERY_NETWORK_SELECTION_MODE

116   D/RILJ    (  110): [0024]> getIMSI:RIL_REQUEST_GET_IMSI 11 GET_IMSI

117   D/RILJ    (  110): [0025]> GET_SIM_STATUS

118   D/RILJ    (  110): [0026]> QUERY_FACILITY_LOCK

119   D/RILJ    (  110): [0027]> QUERY_FACILITY_LOCK

239   D/RILJ    (  110): [0028]> OPERATOR

240   D/RILJ    (  110): [0029]> GPRS_REGISTRATION_STATE

241   D/RILJ    (  110): [0030]> REGISTRATION_STATE

242   D/RILJ    (  110): [0031]> QUERY_NETWORK_SELECTION_MODE

248   D/RILJ    (  110): [0032]> OPERATOR

249   D/RILJ    (  110): [0033]> GPRS_REGISTRATION_STATE

250   D/RILJ    (  110): [0034]> REGISTRATION_STATE

251   D/RILJ    (  110): [0035]> QUERY_NETWORK_SELECTION_MODE

以上onRequest不一定都是必须的,如果GPRS_REGISTRATION_STATE,REGISTRATION_STATE出现的注册状态为:

AT< +CGREG: 1,1

AT< +CREG: 2,1,"a834","5692"

那么你的恭喜你网络注册成功了,如果出现

AT< +CGREG: 1,0

AT< +CREG: 2,0

那么要查一下为什么注册不成功,检查一下SIM插好没,我发现AT+CFUN=4命令有可能会影响到后来的网络注册。

如果网络没有注册,不会出现以下连接信息

295   D/GSM     (  110): [DataConnectionTracker] ***trySetupData due to gprsAttached

如果出现此条信息,那么恭喜你又进了一步,要开始下一步ppp拨号上网了,

通过 #logcat &命令,会看到

I/pppd    (  140): Starting pppd 

如果拨号成功,会出现如下信息:

Serial connection established.

更多相关文章

  1. GitHub 标星 2.5K+!教你通过玩游戏的方式学习 VIM!
  2. 如何在后台运行Linux命令?
  3. 一款常用的 Squid 日志分析工具
  4. No.11 使用firewall配置的防火墙策略的生效模式
  5. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  6. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  7. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  8. Android资源文件及文件夹介绍
  9. Android(安卓)方法数 65k 问题

随机推荐

  1. Android Studio 检测内存泄漏与解决方法
  2. ReactNative学习笔记——调用原生组件(And
  3. 基于Small及Weex的定制化APP方案
  4. Android之进程间通信(IPC)-Messenger
  5. 【Android Studio】解决adb not respondi
  6. Android初级第一讲---Android开发环境的
  7. 如何创建一个四位数的密码Android布局
  8. 微信小程序开发环境搭建
  9. 七牛---Android SDK断点续传与暂停上传De
  10. 编译Android4.3内核源代码