高通双卡方案RILD启动流程解析

需积分: 18 10 下载量 80 浏览量 更新于2024-09-07 1 收藏 115KB DOC 举报
"本文档详细解析了高通芯片在Android系统中的双卡RILD(Radio Interface Layer Daemon)的启动流程,特别关注RILD如何处理双卡功能,包括启动配置、客户端ID分配以及通信机制。" 在高通双卡方案中,RILD(Radio Interface Layer Daemon)是关键组件,负责与射频硬件交互并提供电话和数据服务。RILD的启动流程分为以下几个步骤: 1. **启动配置**: - 卡1:启动过程始于\system\core\rootdir\init.rc,这里启动了名为`serviceril-daemon`的服务,并执行`/system/bin/rild`。在启动时,命令行参数argv未包含`-c`开头的客户端ID,因此默认使用ID为0。 - 卡2:启动于`device\qcom\common\rootdir\etc\init.qcom.rc`,通过`serviceril-daemon1/system/bin/rild-c1`来启动,但在`init.class_main.sh`脚本中,只有客户端ID为1的RILD被激活。这是由于系统设置,可能在其他地方单独启动了`ril-daemon1`。 2. **匹配Socket和库加载**: - RILD会为每个卡匹配相应的Socket名称,确保它们能正确通信。同时,它会获取加载参考库`libril-qc-qmi-1.so`的路径,这是高通特定的RIL库,用于处理QMI(Qualcomm Message Interface)协议。 3. **客户端ID的传递**: - 客户端ID通过main函数的argc参数传递给`qcril.c`的`rilInit`函数。`RIL_Init`会将此ID设置到全局变量`qmi_ril_process_instance_id`中,这样在RIL请求处理时,可以根据这个ID来区分是处理卡1还是卡2的请求。 4. **请求处理**: - 两个RILD实例的`ril.cpp`都会调用`onRequest_rid`函数,但通过本地全局变量`qmi_ril_process_instance_id`来确定服务哪张SIM卡。这样,即使请求接口相同,也能正确地路由到对应卡片的硬件接口。 此外,文档还提到了Android系统中,native层与framework层通信的一种方法,即使用socket。通常JNI是两者间的桥梁,但仅支持framework调用native。通过socket通信,native层可以主动向framework层发送消息,实现双向通信。这种方式虽然比Android原生的Binder机制更为灵活,但实现相对复杂。 总结来说,高通双卡RILD的启动流程涉及启动配置、客户端ID的分配、库加载以及请求处理的逻辑,这些都确保了对多SIM卡功能的支持,并提供了与上层系统的有效通信机制。理解这个过程对于设备制造商和开发者优化网络功能、调试双卡问题至关重要。