Android Ril层浅析

本文深入探讨了Android RIL的工作原理,包括RIL中的消息队列机制,初始化流程,请求和响应流程。重点介绍了RIL如何通过event loop实现多路输入,并通过RIL_startEventLoop()启动消息队列。此外,文章还详细分析了RIL的初始化,从rild的main函数开始,到Vendor RIL的初始化,以及request和response的处理流程。
摘要由CSDN通过智能技术生成
      
                                                                 Android Ril层浅析

          ril为Radio interface layer 的缩写, 翻译为协议转换层, 应用层通过ril层向串口发送命令,  串口之上为ril层, 串口之下为modem, ril层由rild进程负责, ril层代码目录为/hardware/ril
        
一, ril层向串口发送命令:  
        相关文件有: ril_event.cpp(ril_event_loop对ril事件进行循环检测), 
                           ril.cpp(processCommandBuffer对ril事件的解析), 
                           refence_ril.cpp(onrequest对at命令的调用), 
                           Atchannel.c(at_send_command发送命令, at_send_command最终调用write_line()实现 )
 在事件循环中, 由listenCallback监听ril事件(即上层发送代表at命令的ril事件),  listenCallback注册processCommandsCallback回调函数,  processCommandsCallback->processCommandBuffer对事件解析, s_commands设置了事件与事件处理函数的对应关系, 
processCommandBuffer由s_commands找到该事件的处理函数, 并调用之. 该处理函数调用reference_ril.cpp->onrequest()->at_send_command->writeline向串口发送at命令. 
二, 串口向ril层返回对命令的处理结果过程: 
相关文件: Atchannel.c(readline()读取串口发来的对at命令的处理结果)
readerLoop()调用readline()获取结果, 根据是是否为urc做不同处理, urc为远程进程对modem发送的at命令的处理结果.
在reference-ril.cpp 中由at_open()注册的onUnsolicited函数完成对串口发来的at结果的处理, onUnsolited->RIL_onUnsolicitedResponse(实现在ril.cpp中)由s_unsolResponses数组获取对结果的处理函数, s_unsolResponses为处理ril结果的数组(即接收),s_commands为处理ril命令的数组(即发送). solicited表示等待对请求处理的一种等待状态。
三 Ril体系结构

术语:

fd                        unix文件描述符

pipe                      unix管道

cond                      一般是condition variable的缩写

tty                       通常使用tty来简称各种类型的终端设备

unsolicited response      被动请求命令来自baseband

event loop                android的消息队列机制,由unix的系统调用select()实现

init.rc                   init守护进程启动后被执行的启动脚本。

HAL                       硬件抽象层(Hardware Abstraction LayerHAL


            

androidril位于应用程序框架与内核之间,分成了两个部分,一个部分是rild,它负责socket与应用程序框架进行通信。另外一个部分是Vendor RIL,这个部分负责向下是通过两种方式与radio进行通信,它们是直接与radio通信的AT指令通道和用于传输包数据的通道,数据通道用于手机的上网功能。 

对于RILjava框架部分,也被分成了两个部分,一个是RIL模块,这个模块主要用于与下层的rild进行通信,另外一个是Phone模块,这个模块直接暴露电话功能接口给应用开发用户,供他们调用以进行电话功能的实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值