1.rild.c结构:

ccd4008429475cf5d4b8fc238a308437.png

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分析

Android RIL结构分析与移植

(ril_commands.h)

Android电话系统之-rild

来源:oschina

链接:https://my.oschina.net/u/587911/blog/85103

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐