android 手机芯片reference-ril层技术小结一

android 手机芯片reference-ril层技术总结一

                                                                                                                  收集整理。。2014-12-20  小小郭

最近在对某款芯片做gprs业务支持,把所有了解到知识做一个归纳,整理,欢迎朋友们指正,也便于知识的传播。

想要了解android手机在实现短信,电话,数据等业务的时候,业务的具体代码实现,必须先了解整个业务流程;

目前主流智能手机的硬件架构中有两个处理器,一个称为Application Processor(AP),主要用于运行操作系统,执行应用程序;一个称为Baseband Processor(BP),专门负责手机中和射频无线通信相关的功能。AP和BP芯片间通信基于串口,通信协议是广泛使用的AT指令。其实业务就是通过AP发送业务请求到BP执行,或者bp主动上报信息给ap;

ap和bp之间的数据分为2种:一是Solicited Response(经过请求的回复),应用的场景是AP主动向BP发送一个AT指令,请求BP进行相应处理并在处理结束时回复一个AT指令通知AP执行的结果。源码中对应的文件是ril_commands.h。

    一是Unsolicited Response(未经请求的回复),应用场景是BP主动向AP发送AT指令,用于通知AP当前系统发生的与Telephony相关的事件,例如网络信号变化,有电话呼入等。源码中对应的文件是ril_unsol_commands.h

整个过程机制叫RIL机制

在这篇文章中有非常详细的描述,大家可以参考

http://blog.csdn.net/jscese/article/details/40046493

上面的文章可能让我们有点萌!!囧,某些细节不是很通俗易懂,但是我们却对整个RIL机制的运作方式有一个整体的了解,下面推荐大家看一篇更通俗的文章

http://www.open-open.com/doc/view/6fc8a8649072426390bba79acf072186

在对RIL机制整体了解到基础上,再看这篇文章说的非常浅显,易懂,新手对进行手机芯片移植对大量代码茫然不知所措的时候,文章中告诉我们的突破口:RIL移植需要考虑到问题有2个:一是设备使用的不同端口,二是Onrequest的不同处理。(明白了吧?? 其实基本就只是修改这2处即可,而现在的at指令基本通用,不是太特殊的功能指令,代码基本不用动)

该文章对BP和AP的事件信息交互有更浅显的说明,同时文章对我们需要修改的onUnsolicited和Onrequest函数有总结性的阐述。

另外推荐另外一篇文章,只是描述有点混乱,可以作为一个阅读参考文章

http://wenku.baidu.com/link?url=g5E2A7N4eI-2DTS8VE15ed-1RwxNp8NbjI-OOe73U_xKBVTDbAu4Dh2xZCx4EFPN-ZuCzSeu3gmJsFiz3dY-D1jS579X65B8U_k34w3gVmC

 

 

要想了解ril层承上启下的原理机制,可以查看该代码,注释比较详细

http://www.cnblogs.com/android-html5/archive/2011/12/09/2533964.html

 

拨打电话java代码层到底层的简单描述

http://blog.csdn.net/maxleng/article/details/5593780

 

对手机芯片支持功能的增添  宏  描述请参考

http://www.linuxidc.com/Linux/2011-12/48954.htm

里面描述了厂商支持的功能,Onrequest函数需要的处理宏

宏对应的字符串列表可以查看

http://www.cnblogs.com/android-html5/archive/2011/12/09/2533963.html

该文档描述了大部分手机支持的命令宏

 

 

对bp层的描述,请查阅

http://developer.51cto.com/art/201002/183488.htm

只是大致阐述了一下bp线程对上层的事件处理,和实际对modem的at控制

 

下面我们就来谈谈,怎么对手机芯片建立数据通道(GPRS,EVDO,EDGE......)

首先直接找到请求数据链接宏

在Onrequest中添加

        //请求数据链接, 启动pppd拨号
        case RIL_REQUEST_SETUP_DATA_CALL:

         requestSetupDataCall(data, datalen, t); //attach pdp AT拨号

然后配置pppd拨号脚本

在配置之前,你需要对网络接入点,pppd拨号基本概念有一个了解

推荐阅读

http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=27024249&id=3338741

该文章详细描述利用pppd拨号 配置脚本环境。

如果还不能建立数据通道可以参考别人的经验

http://blog.csdn.net/yinlijun2004/article/details/7460418 

个人感觉上面文章描述一般,可做参考。

(在整个配置过程中,你需要有耐心,每个配置,每个机制的启动,调试环境的建立都缺一不可)

不同的网络接入点是不一样的,

http://www.linuxidc.com/Linux/2011-03/33430p2.htm

这篇文章有接入点脚本的模板,其实你可以自己手动pppd调试

 

对数据通道建立一个整体性的描述,可以参考

http://daimajishu.iteye.com/blog/1556735

就是这么简单。。

 

http://wenku.baidu.com/link?url=dkinTwHJoS4GjGT5vIEisNoHEIrGoOk-Ta7gyQYjVl4FYt9AR9MviWUPGGG0B2N47EVtPBE6m5q_lXw-eG0NyK9n6m-SUY9SA7GJewG30pC

该篇文章是芯片厂商支持文档,详细说明厂商支持的芯片的整个配置调试过程

 

pppd代码过程的详细介绍请参考

http://blog.chinaunix.net/uid-20678786-id-111505.html