3, Qcril初始化流程
rild守护进程的rild.c文件中main方法有关加载动态库代码如下,
dlHandle = dlopen(rilLibPath, RTLD_NOW);//加载库
•••
funcs = rilInit(&s_rilEnv, argc, rilArgv);//初始化 实际调用的是RIL_Init方法
s_rilEnv结构体定义如下,也就是qcril.c可以回调ril的方法
static struct RIL_Env s_rilEnv = {
RIL_onRequestComplete,
RIL_onUnsolicitedResponse,
RIL_requestTimedCallback
};
Android平台不同厂商的AP侧可以相同,但是Modem侧肯定会有很大的差异,RIL层要解决一个问题
就是适配不同厂商的Modem,为了达到兼容性要求,android在AP与Modem之间搭建了RILC的框架,
由不同的Modem厂商将自己的协议连接到AP侧。对于高通平台来说,RILC就是QCRIL。
qcril.c的RIL_Init方法主要步骤如下,
//设置线程的名字
qmi_ril_set_thread_name( pthread_self() , QMI_RIL_QMI_RILD_THREAD_NAME);
//初始化接收Modem消息的EventLoop
qcril_event_init();
// 初始化QCRIL各个模块
qcril_init(c_argc, c_argv);
// 启动线程
qcril_event_start();
//其他初始化
qmi_ril_initiate_bo