RIL 机制---rild守护进程

RILC是一个由init进程启动的守护进程,负责通过Socket与RILJ通信,并通过AT命令与Modem交互。它包含EventLoop和ReaderLoop两部分,EventLoop处理RILJ到RILC的数据,ReaderLoop处理RILC到Modem的通信。RIL_register用于注册回调,使RIL与reference-ril之间可以互相调用方法。消息流程涉及RIL、reference-ril、Modem和RILJ,上报消息直接从Modem到RILJ,回应消息则经过更多步骤。通信方式包括socket和串口。
摘要由CSDN通过智能技术生成

3 守护进程

ril与上层的RILJ沟通方式是通过Socket传输数据与命令,而reference-ril与底层Modem的信号传输是通过串口用AT命令来实现。

 RILC是一个守护进程,由init进程启动,init.rc文件配置如下,

service ril-daemon /system/bin/rild
    class main
    socket rild stream 660 root radio
    socket rild-debug stream 660 radio system
    user root
    group radio cache inet misc audio log qcom_diag

由配置文件可知,

1,如果该守护进程异常退出,android系统会进行重新加载。

2,会建立2个socket,端口号为rild负责和RILJ进行通信。

 

该守护进程的入口为rild.c的main方法,main方法比较长,主要逻辑如下,

 1、开启EventLoop循环,完成RILC与RILJ层数据交互(通过Socket)

 2、打开动态库reference并构建ReaderLoop循环,完成RIL与Modem层数据交互(通过AT)

 3、注册reference的回调函数。

根据通信方法,将该守护进程分为2部分:

1,Event:利用socket完成RILC与RILJ层数据交互。

2, reference-ril:利用AT指令完成RILC与Modem层数据交互。

3.1,EventLoop

ril.cpp的RIL_startEventLoop方法如下,

extern "C" void RIL_startEventLoop(void) {
    /* spin up eventLoop thread and wait for it to get started */
    s_started = 0;
    pthread_mutex_lock(&s_startupMutex);

    pthread_attr_t attr;
    pthread_attr_init(&attr);
    pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
    //打开Event线程,并调用eventLoop进入循环
    int result = pthread_create(&s_tid_dispatch, &attr, eventLoop, NULL);
    if (result != 0) {
        RLOGE("Failed to create dispatch thread: %s", strerror(result));
        goto done;
    }

    while (s_started == 0) {
        pthread_cond_wait(&s_startupCond, &s_startupMutex);
    }

done:
    pthread_mutex_unlo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值