Android通信机制及QCRIL原理介绍2020/7/24Android软件栈架构Page2Android应用运行环境每个Android应用依赖于/system/framework文件夹下的一些核心库,这些核心库用是java编写的。这些应用还依赖于/system/lib文件夹下的动态链接库,这些动态链接库是C/C++编写的。这些库就是Android应用的环境,还有一些共享库和类库,是运行时动态加载的类库和本地调用(JNIInvoke)。传统JAVA应用,所有的JAVA应用都运行在同一个JVM中(默认是这样的)。而在Android上,每个应用都运行在自己专有的dalvik虚拟机实例里,这和传统JAVA应用有区别。Android使用Linux作为HAL(hardwareabstractionlayer)Page3AndroidRILArchitecturePage4AndroidRILDalvikVM(shared)::JavautilityforRILmessage/mands(messages)––UtilitylibraryforRILmessage/–,,–QCremoteAPIlibs(QC)mands(请求消息)是由上层应用,例如DiIAL、mands是由底层modem侧发起的,向上层报告状态的变化、新的消息等,例如CALL_STATE_CHANGED、SIM_STATE_CHANGED、NEW_SMS。mandsPage7通信机制RILD和Modem侧的通讯是通过RPC和QMI实现的RPC用于多CPU之间的通讯,一侧的CPU应用在ONCRPC栈中通过XDR将消息编码成字节流,通过RPCrouter、共享内存对应传到另一侧CPU的RPCrouter、ONCRPC栈中,XDR解码后,得到数据。XDR即是用于在同平台间实现数据连续表示的编解码机制。QMI是高通自定义的一种数据接口,用于终端设备的操作系统应用和底层模块的数据通信。数据业务基本通过QCRIL、QMI与底层交互。Page8通信机制Application是Android应用,.,类似于windows的Service,运行于单独的进程,给其他应用提供服务。所有的Service都可以通过IServiceManager接口访问。例如一次呼叫调用发生,情景大概是如下几步:;Telephony的类根据状态,mands,通过IPC,调用PhoneService的接口;PhoneService通过sockets和RILD这个daemon通信;rild将来自PhoneService的命令通过RPC、共享内存,发送给Modem,并接收Modem的返回,打包返回给PhoneService;PhoneService也将返回打包给Application;呼叫调用完毕。Page9Application和PhoneService的通信Application和PhoneService之间通过OpenBinder机制通信。但是我们并不需要懂得OpenBinder的原理,因为Android软件栈中的ApplicationFramework层已经提供便捷的接口去调用。,封装、抽象得很好,一个打电话的调用只需要三行代码,IServiceManagersm=();IPhonephoneService=(("phone"));(phoneNumber);Page10
Android通信机制及QCRIL原理介绍-华为 来自淘豆网m.daumloan.com转载请标明出处.