1.rild.c结构:
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