- 1、本文档共31页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Android Ril
Elvis hwangbelief@
灸漾侍玻降脸谆欠登论内菲农舱挡辈阻恼甭茎仟叁高镍呸娜瘦蔫干空啃盈Android RIL详细总结及流程图Android RIL详细总结及流程图
RIL简介
RIL (Radio Interface Layer)
RIL是Android 的无线接口层.负责提供电话服务.是上层应用和下层硬件modem之间的中间层。负责数据的可靠传输、AT命令的发送以及响应(response)的解析.
Android的RIL驱动模块,在hardware/ril目录下,一共分rild,libril.so以及librefrence_ril.so三个部分。
犯副希戈睬比安肤黔蓖授帕艰举蛛施杆悬吕缎铃痉醛停貉赘萌米恬尧授压Android RIL详细总结及流程图Android RIL详细总结及流程图
RIL执行流程
rild: main函数作为整个ril层的入口点,用dlopen打开libreference-ril.so库, RIL_startEventLoop();创建客户端事件监听线程。RIL_register()注册事件处理接口,并创建socket监听事件。
libril.so: 组成部分为ril.cpp,ril_event.cpp。主要完成同Framework层通信的工作,接受ril请求并传递给librefrence_ril.so, 同时把来自modem的response通过librefrence_ril.so的反馈回传给调用进程。
矽钢看练紫谤辜偷袄绞信入侄贺颅扬营绵颖丧虫畸坑缴催袄号旅既钱诊橡Android RIL详细总结及流程图Android RIL详细总结及流程图
librefrence_ril.so:
rild通过dlopen方式加载 librefrence_ril.so ,这是因为librefrence.so主要负责跟Modem硬件通信。这样做方便替换或修改以适配更多的Modem种类。它转换来自libril.so的请求为AT命令,同时监控Modem的反馈信息,并传递回libril.so。在初始化时,rild通过符号RIL_Init获取一组函数指针并以此与之建立联系。
瞬箔效斤思晶崔可语渺敌菩诗剿窍捶质淮贸去及庶迸哼北韩军瘫仍免腆翰Android RIL详细总结及流程图Android RIL详细总结及流程图
RIL_startEventLoop
RIL_startEventLoop在ril.cpp中实现,它的主要目的是通过pthread_create(s_tid_dispatch, attr, eventLoop, NULL)建立一个dispatch线程,入口点在eventLoop. 在eventLoop中,会调ril_event.cpp中的ril_event_loop()函数,建立起消息队列机制。
番尺勘这干命奄潞亦燎哈誉酮腮眺际蕴硝回火乖峪面健驳靴吗沾躬蘸恰缀Android RIL详细总结及流程图Android RIL详细总结及流程图
具体步骤
进入RIL_startEventLoop后首先创建一个eventloop线程。建立起消息队列机制。 ril_event_init完成后,通过ril_event_set来设置一个新ril_event,并通过ril_event_add加入队列之中,add会把队列里所有ril_event的fd,放入一个fd集合readFds中。然后进入ril_event_loop()执行select(),这样 ril_event_loop能通过一个多路复用I/O的机制(select)来等待这些fd,如果任何一个fd有数据写入,则进入分析流程processTimeouts(),processReadReadies(rfds, n),
firePending()。
搐才阎坠孔封锄宁呜蚁澈爪闹什盛憾期兴所沸拐鼠矢唇蛆谬迪凤薄夜噪让Android RIL详细总结及流程图Android RIL详细总结及流程图
在队列创建之前,利用pipe创建了一个无名管道,并且将管道的读端放入了select的队列中,将管道的写端放入了rilEventAddWakeup()中,rilEventAddWakeup()包含ril_event_add(ev);triggerEvLoop();两个函数, ril_event_add(ev)就是将事件加入到队列中,而triggerEvLoop()的作用就是将select函数唤醒,因为在这个函数中会向管道的写端写入数据,这样被select监听的管道读端就可读,那么select函数就会解阻。所以当有一个新的事件加入到队列中,那么就会用pipe的
您可能关注的文档
最近下载
- 核安全文化知识考试参考题库及答案.pdf
- 工程完工验收施工管理工作报告.doc VIP
- 企业征信报告.PDF
- 省级优秀课件第三单元课题一第1课时分子和原子-人教版九年级上册.pptx VIP
- 【山东卷】.山东省潍坊市2024-2025学年2025届高三上学期阶段性监测暨期中考试(11.25-11.27)政治试卷含答案及解析.pdf
- 河北省1:5万地质灾害风险调查评价技术要求.doc VIP
- 六年级【科学(教科版)】电能和磁能-5学习单.docx VIP
- 城市轨道交通一站两区间电话闭塞法.pptx VIP
- 川菜文化论文(精选范文6篇),文化论文.docx
- 平凡之路-钢琴谱 高清正版完整版五线谱.pdf
文档评论(0)