Android RIL代码详细分析

本文深入分析Android RIL代码,从rild.c的main()函数开始,探讨RIL_startEventLoop如何建立事件监听机制,RIL_Init如何与硬件基带交互,以及RIL_register的角色。重点讲解RIL消息队列的运作和主动、被动请求的处理流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

RIL代码分析

代码位于:android/hardware/ril

1 rild.c中的main()函数提供了rild的入口

首先,通过main函数的传参,cmdline,内核选项等方式获取rild.libpathrild.libargs

我们这里主要是:/system/lib/libreference-ril.so

2 RIL_startEventLoop():建立消息队列的机制,开始事件的监听

函数RIL_startEventLoop()开启了一标识符为s_tid_dispatch的线程,线程的入口函数为eventLoop()

ril_event_init()进行消息队列的初始化,主要是初始化读文件描述符集readfds,time_list,pending_listwatch_table;后面三个都是ril_event的结构体变量

由定义可以看出它是一个双向链表。(重要的数据结构,后面会反复使用)

通过pipe()创建一个无名管道,对这个管道的读写描述符分别为:

 

创建一个s_wakeupfd_eventril_event,消息的fds_fdWakeupRead,消息的处理函数为processWakeupCallback();这个处理函数主要是读取管道内的消息。

s_wakeupfd_event加入消息队列并触发消息队列:

ril_event_add(ev):将ev加入watch_table[i];将ev->fd加入读文件描述符集readFds

triggerEvLoop():如果s_tid_dispatch 线程结束,通过s_fdWakeupWrite写一个变量触发消息队列。<

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值