Android 安卓RIL介绍
Android ril集成和常见问题分享
RK3568-ANDROID11-4G-EC20-(详细步骤)
什么是 Android RIL
Android RIL (Radio Interface Layer)即无线接口层,它是位于 Android 操作系统与移动设备的无线通信硬件之间的一个软件抽象层 。其主要目的是为 Android 系统提供一个统一的接口,以便与各种不同类型的无线通信芯片及模块进行交互和通信,从而实现诸如语音通话、短信收发、移动数据网络连接等无线通信功能。
从功能实现角度看,RIL 屏蔽了底层无线通信硬件的复杂性和差异性。不同的手机制造商可能会采用不同厂商的基带芯片等无线通信硬件,这些硬件在接口规范、功能实现细节等方面存在很大差别。RIL 通过定义一套标准的接口和通信协议,使得 Android 系统无需关心具体硬件的细节,只要按照 RIL 提供的接口进行调用,就能实现各种无线通信功能。例如,当应用程序需要发起一个语音通话时,它只需调用 Android 系统中与通话相关的 API,而这些 API 最终会通过 RIL 将通话请求传递给底层的无线通信硬件,由硬件来完成实际的通话建立和通信过程。 这样一来,大大降低了 Android 系统与无线通信硬件耦合度,提高了系统的可移植性和兼容性。
RIL结构
Android RIL 位于应用程序框架与内核之间,分成了两个部分,一个部分是 rild,它负责 socket 与应用程序框架进行通信。另外一个部分是 Vendor RIL,这个部分负责向下与 radio 进行通信。对于 RIL 的 java 框架部分,也被分成两个部分,一个是 RIL 模块,这个模块主要与下层的 rild 进行通信,另外一个是 phone 模块,这个模块直接暴露电话功能结构给应用开发用户,供他们调用以进行电话功能的实现。
IRadio配置相关问题
安卓11以上的IRadio一般配置在 /vendor/etc/vintf/manifest.xml 目录下,根据客户使用的不同版本IRadio,配置会有一点差异。
不同的安卓版本支持的最高IRadio版本也不同,配置不能超过当前安卓版本支持版本。移远实现的libril目前支持到1.5接口,使用移远RIL库时候manifest.xml最高不能配置超过1.5。
安卓8.x —最高支持IRadio 1.1
安卓9.x —最高支持IRadio 1.2
安卓10.x —最高支持IRadio 1.4
安卓11.x —最高支持IRadio 1.5
安卓12.x —最高支持IRadio 1.6
安卓11&12 2&3&4G模块使用1.1接口即可正常上报信息
安卓11&12 如适配的5G模块,在新归档的RIL版本中,针对5G信号上报做了调整,需要将IRadio接口切至1.5
IRadio服务未注册,会导致RIL库与上层通信失败。
此时就需要检查使用的IRadio版本和对应的manifest.xml的配置,如果使用了1.2以上的IRadio版本还需要确认是否有对应移远的libril.so。(原生libril.so仅支持IRadio1.1)
一般在radio log上过滤RILJ,只有一行打印:
RILJ ( 934): RIL: init preferredNetworkType=9 cdmaSubscription=0)[PHONEnull]
且不会上报:
RILJ ( 934): [UNSL]< UNSOL_RIL_CONNECTED [PHONE