没有合适的资源?快使用搜索试试~ 我知道了~
ril流程分析
需积分: 9 1 下载量 70 浏览量
2016-06-12
16:47:47
上传
评论
收藏 42KB DOCX 举报
温馨提示
试读
12页
ril模块RILC初始化,及其工作流程图,详细解释
资源推荐
资源详情
资源评论
ril 层工作流程
一、ril 层初始化
Android 的 RIL 驱 动 模 块 , 在 hardware/ril 目 录 下 , 一 共 分 rild , libril.so 以 及
librefrence_ril.so 三个部分,另有一 radioopons 可 供自动或 手 动调试使 用 。都依赖 于
include 目录中 ril.h 头文件。目前 cupcake 分支上带的是 gsm 的支持,另有一 cdma 分支,这
里分析的是 gsm 驱动。
GSM 模块,由于 Modem 的历史原因,AP 一直是通过基于串口的 AT 命令与 BB 交互。包括
到了目前的一些 edge 或 3g 模块,或像 omap 这类 ap,bp 集成的芯片,已经使用了 USB 或其
他等高速总线通信,但大多仍然使用模拟串口机制来使用 AT 命令。这里的 RIL(Radio
Interface Layer)层,主要也就是基于 AT 命令的操作,如发命令,response 解析等。
首先介绍一下 rild 与 libril.so 以及 librefrence_ril.so 的关系:
1. rild:
仅实现一 main 函数作为整个 ril 层的入口点,负责完成初始化。
2. libril.so:
与 rild 结合相当紧密,是其共享库,编译时就已经建立了这一关系。组成部分为
ril.cpp,ril_event.cpp。libril.so 驻留在 rild 这一守护进程中,主要完成同上层通信的工作,
接受 ril 请求并传递给 librefrence_ril.so, 同时把来自 librefrence_ril.so 的反馈回传给调用进
程。
3. librefrence_ril.so:
rild 通过手动的 dlopen 方式加载,结合稍微松散,这也是因为 librefrence.so 主要负责
跟 Modem 硬件通信的缘故。这样做更方便替换或修改以适配更多的 Modem 种类。它转换
来自 libril.so 的请求为 AT 命令,同时监控 Modem 的反馈信息,并传递回 libril.so。在初始化
时, rild 通过符号 RIL_Init 获取一组函数指针并以此与之建立联系。
4. radioopons:
radioopongs 通过获取启动参数, 利用 socket 与 rild 通信,可供调试时配置 Modem 参
数。
接下来分析初始化流程:
主入口是 rild.c 中的 main 函数,主要完成三个任务:
1. 开启 libril.so 中的 event 机制, 在 RIL_startEventLoop 中,是最核心的由多路 I/O 驱动
的消息循环。
2. 初始化 librefrence_ril.so,也就是跟硬件或模拟硬件 modem 通信的部分(后面统一
称硬件), 通过 RIL_Init 函数完成。
3. 通过 RIL_Init 获取一组函数指针 RIL_RadioFuncons, 并通过 RIL_register 完成注册,
并打开接受上层命令的 socket 通道。
第一个任务流程图:
rild.c main()中 的
RIL_startEventLoop()
ril.cpp在 中
libril.so event开 启 中 的 机 制
I/O是 最 核 心 的 由 多 路 驱 动 的 消 息 循 环
pthread_create(&s_tid_dispatch, &attr, eventLoop, NULL)
dispatch建 立 一 个 线 程 , 入 口 点 在
eventLoop ril.cpp( ) 在 中
ril_event_loop ril_event.cpp( ) , 中
(event)建 立 起 消 息 队 列 机 制
ril_event.cpp中 包 含 的 方 法
void ril_event_init();
void ril_event_set(struct ril_event * ev, int fd...);
void ril_event_add(struct ril_event * ev);
void ril_timer_add(struct ril_event * ev, struct timeval * tv);
void ril_event_del(struct ril_event * ev);
void ril_event_loop();
ril_event_init()
ril_event.cpp在 中
ril_event配 置 一 新
rilEventAddWakeup( )
ril_event_loop能 通 过 一 个 多 路
I/O select fd复 用 的 机 制 ( ) 来 等 待 这 些
fd如 果 任 何 一 个 有 数 据 写 入 , 则 进 入 分 析 流 程
processTimeouts() processReadReadies(&rfds, n), ,
firePending() 。 后 面 会 详 细 分 析 这 些 流 程
ril_event_add( )
ril_event.cpp在 中
ril_event将 新 加 入 队 列 之 中
add ril_event fd会 把 队 列 里 所 有 的 ,
fd readFds放 入 一 个 集 合 中
至 此 第 一 个 初 始 化 任 务 分 析 完 毕 ,
event这 样 便 建 立 起 了 基 于 队 列 的 消 息 循 环 ,
稍 后 便 可 以 接 受 上 层 发 来 的 的 请 求 了
event( 上 层 请 求 的 对 象 建 立 , 在 第 三 个 任 务 中 ) 。
图一(RIL_startEventLoop 消息循环初始化)
第二个任务流程图:
main(),ril.c中
ril为 层 的 入 口 点
RIL_Init .. reference_ril.c( ) 在 中
首 先 通 过 参 数 获 取 硬 件 接 口 的 设 备 文 件
socket. 或 模 拟 硬 件 接 口 的 接 下 来 便 新
开 一 个 线 程 继 续 初 始 化
at_open .. atchannel.c( ) 在 中
reader建 立 起 这 一 设 备 文 件 上 的 等 待 循 环 ,
这 也 是 通 过 新 建 一 个 线 程 完 成
ret = pthread_create(&s_tid_reader,
&attr, readerLoop, &attr),
mainLoop .. reference_ril.c即 ( ) 在 中
主 要 任 务 是 建 立 起 与 硬 件 的 通 信 , 然 后 通 过
read方 法 阻 塞 等 待 硬 件 的 主 动 上 报 或 响 应
RIL_requestTimedCallback(initializeCallback,
NULL, &TIMEVAL_0) initializeCallback, 跑 到 中 , 执 行
Modem AT一 些 的 初 始 化 命 令 , 主 要 都 是 命 令 的 方 式 。
readerLoop .. atchannel.c( ) 在 中
timeout,readerclose注 册 一 些 基 础 回 调 ( )
mainLoop后 , 首 先 打 开 硬 件 设 备 文 件 , 建 立 起
s_device_path s_port与 硬 件 的 通 信 , 和 是 前
面 获 取 的 设 备 路 径 参 数 , 将 其 打 开
processLine ..( )
handleFinalResponse ..( )
图二(RIL_Init 硬件 modem 通信部分初始化)
第三个任务流程图:
剩余11页未读,继续阅读
资源评论
qiang10086qiang
- 粉丝: 0
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- sony 索尼IMX334摄像头模组电路板AD版硬件PCB图(6层板).zip
- 基于flask和echarts融合交易策略的bitfinex可视化微服务.zip
- 包含了wvp-assist.tar wvp-talk.tar zlmediakit.tar .
- 3r4efgh53wgrf43tw
- 2024新版Java基础从入门到精通全套视频+资料下载
- Spring AI大模型视频教程+ChatGPT视频教程+OpenAI大模型视频教程(资料+视频教程)
- ABB工业机器人教程PDF版本
- 123321123323211
- yolov8实战第八天-pyqt5-yolov8实现车牌识别系统(论文(8700+字+数据集+完整部署代码+代码使用说明)
- 三相桥式全桥整流电路MATALB Simulink仿真文件
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功