回到原点——由调试gprs想到的

        我一直认为自己非常愚钝,在调试代码的时候,一次一次的印证了这一点。

        客户拿一个机器给我调试,语音业务电话很快就打通了,但是数据业务一直起不来。跟所有问题一样,碰到问题的时候,往往觉得无处下手,看起来满地都是线索,就是找不到头绪在哪里。这是,冷静下来思考是最重要的,所有的业务都有个流程,数据也是这样,首先要做的定位,把业务流程中所有的已经验证的问题切割,这样最后只剩下有迁移的流程,对,这有点像二分查找,但是查找之前,先要排序,而捋顺业务流程,相当于排序的过程。

       1、framework下发一个RIL_REQUEST_SETUP_DATA_CALL请求到ril层,带着几个gprs拨号需要的几个参数,那可能出现的问题是:

                 a、没有下发这个请求,那么就是应用层的问题,或者可能单纯的用户没有点击“已启用数据”选项。

                 b、检查该消息附带的参数,apn,usr,pwd,authtype是否符合要求。

      2、如果第1点已经满足,那么,数据业务相关的AT命令是否发的通,其中最重要的就是AT+CGDCONT, ATD*99#时候正确返回。

      3、如果第2条中的AT命令正确返回,接下来就应该开始调用pppd了,传给pppd的参数,pppd是需要一个设备结点来收发数据的,首先确认该结点是否正确挂载上,比如/dev/ttyUSB* /dev/mux* /dev/mtk* 

      4、pppd是在一个脚本中执行的,该脚本也是一个服务,那就是pppd_gprs,检查init.rc中时候有该service(也可能在其他init.*.rc文件中),检查拼写是否正确,像把pppd_gprs与pppd-gprs写反这种错误是很难发现的。

service pppd-gprs /system/xbin/pppd_gprs
    user root
    group root
    oneshot
    disabled

      5、如果pppd_gprs已经存在,而且在system/xbin/下确实有改文件,但是pppd还是没有起来,或者起来过又非正常退出了,这一点可以从log确定,如果log 中有pppd的存在,至少证明它曾经起来过,后来被扼杀了,如果压根就没起,那么可能是权限的问题,这一点非常难发现,我就是栽在这上面,浪费了我一天时间。service的权限是要现实添加的,如果你不知道为什么要添加,就算你曾经依葫芦画瓢添加过,也很容易遗忘,这就是我在这里把这些写下来的原因。而以往这些重要的步骤是很难发现的。在system/core/init/property_service.c中添加

struct {
    const char *service;
    unsigned int uid;
    unsigned int gid;
} control_perms[] = {
    { "dumpstate",AID_SHELL, AID_LOG },
    /*broncho add begin. by lufang*/
    {"gsmmux-daemon", AID_RADIO, 0},
    {"pppd_gprs", AID_RADIO, 0},
    /*broncho add end*/

     {NULL, 0, 0 }
};
     6、如果第5条还是通过了,再次检查你的代码,是否执行过以下调用,我就是在这上面范错误的,因为我把这条命令给注释掉了,而后又忘记恢复。

        property_set("ctl.start", "pppd-gprs");
     7、这也起这个题目的原因——回到原点。为了要验证一些可能出现的原因,我们会对源代码进行修改,但是需要切记的是对源代码进行恢复,回到原点,因为你的修改很有可能影响到接下来的验证!

     8、为了能对自己的代码有个追溯,最好有个note记录下你的修改,因为你的代码可能遍布不止一个目录,这样,验证完以后可用svn up的方式回退到以前。


最后一点,写了这么多,漏了最容易遗忘的一条,sim卡是不是欠费了,看,这又相当于回到原点。尽管它发生概率小,但是确实发生过,至少我碰到过。记录下这些的原因,就是为了告诫自己,工作效率是怎么提高的,为什么有的程序员恨不得工作25小时才能完成工作,而有些人效率高很多。养成一些良好的工作习惯,就可以让自己省下许多时间,去钻研真正的技术。






----patch 2012.4.20

其他可能的问题或应注意的事项。

1、检查frameworks/base/core/res/res/xml/apns.xml 与development/data/etc/apns-conf_sdk.xml的版本是否一致。

2、添加/修改apn可直接在development/data/etc/apns-conf_sdk.xml中修改。

3、检查ip-up ip-down等脚本是否正确,如果忘了设置某些属性也会导致上网有问题。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值