android电话系统和ril分析(2)————rild详细分析

上一篇有提到rild,这里做我个人的理解来分析rild:
参考达人B的文章,链接:http://blog.csdn.net/qitaosong/article/details/5069823

1.rild.c结构:

android电话系统和ril分析(2)————rild详细分析

2.各个函数分析:

2.1>RIL_register
extern void RIL_register (const RIL_RadioFunctions *callbacks); 
该函数在ril.cpp里有实现,RIL_RadioFunctions 在ril.h里定义为:

  typedef struct { 
    int version; /* set to RIL_VERSION */ 
    RIL_RequestFunc onRequest; 
    RIL_RadioStateRequest onStateRequest; 
    RIL_Supports supports; 
    RIL_Cancel onCancel; 
    RIL_GetVersion getVersion; 
    } RIL_RadioFunctions; 
其中onRequest,指令请求会在reference-ril.c里实现:
static void onRequest (int request, void *data, size_t datalen, RIL_Token t){...}
接口里用switch分支判断请求号request,调用at_send_command等发送相应的at指令
RIL_register:启动名为 rild  的监听端口,等待 java  端通过 socket 进行连接

2.2>RIL_onRequestComplete
extern void RIL_onRequestComplete(RIL_Token t, RIL_Errno e,void *response, size_t responselen)、RIL_onUnsolicitedResponse、
RIL_requestTimedCallback和RIL_startEventLoop函数同上,都在ril.cpp里有实现。

2.3>main(守护进程)

编译之后是个rild可执行文件,在/init.rc里面打开rild服务,会随系统一起运行。
1>首先和phone.apk服务建立socket连接,句柄为fd:

 fd = socket_local_client(
                            QEMUD_SOCKET_NAME,
                            ANDROID_SOCKET_NAMESPACE_RESERVED,
                            SOCK_STREAM );

2>加载/system/lib/libreference-ril.so动
 dlHandle = dlopen(rilLibPath, RTLD_NOW);

3>启动eventLoop线程,开始执行RIL消息队列

不小心网上发现 有个完整的ril分析

http://blog.csdn.net/hare_lee/article/details/6903460


Android RIL结构分析与移植

http://blog.csdn.net/fengkehuan/article/details/6203076

(ril_commands.h)

http://blog.csdn.net/ace1985/article/details/7051522

http://blog.csdn.net/hare_lee/article/details/6903962

Android GSM驱动模块(rild)详细分析

http://blog.csdn.net/qitaosong/article/details/5069823

Android RIL 调试(二)

http://www.eoeandroid.com/thread-109142-1-1.html

Android电话系统之-rild


你可能感兴趣的:(GSM,RILD,ril分析,android电话系统)