小能豆

Android11 RK3568 rild报错,这个RIL_register: RIL_RadioFunctions * null为什么为空

javascript

12-12 02:45:02.882 410 410 D RILD : RIL Daemon Started
12-12 02:45:02.882 410 410 D RILD : RILd param count=3
12-12 02:45:02.895 410 410 W RILD : RIL_SAP_Init not defined or exported in /vendor/lib64/libhwa-ril.so: undefined symbol: RIL_SAP_Init
12-12 02:45:02.895 410 410 D RILD : RIL_Init argc = 3 clientId = 0
12-12 02:45:02.895 410 410 I REF-RIL : Client id received 0
12-12 02:45:02.895 410 410 D RILD : RIL_Init rilInit completed3
12-12 02:45:02.895 410 410 I RILC : SIM_COUNT: 1
12-12 02:45:02.895 410 410 E RILC : RIL_register: RIL_RadioFunctions * null


阅读 41

收藏
2024-06-20

共1个答案

小能豆

在 Android 11 RK3568 上遇到 RIL_register: RIL_RadioFunctions * null 错误通常表示你的 RIL (Radio Interface Layer) 实现中,RIL_Init 返回的 RIL_RadioFunctions 指针为空。这个问题通常源于以下几个方面:

  1. 库文件问题
  2. 动态链接库:从日志 RIL_SAP_Init not defined or exported in /vendor/lib64/libhwa-ril.so: undefined symbol: RIL_SAP_Init 可以看出,你的库文件 /vendor/lib64/libhwa-ril.so 缺少 RIL_SAP_Init 符号。确保你使用的 RIL 库版本正确,并且库文件包含所有需要的符号。

  3. ABI 和架构不匹配:确保库文件的 ABI(应用二进制接口)和架构与设备的架构匹配。如果你在 64 位系统上运行 32 位库,或者相反,这可能导致类似的问题。

  4. RIL 初始化逻辑

  5. RIL_Init 实现:检查 RIL_Init 函数的实现,确保其返回一个有效的 RIL_RadioFunctions 指针。你需要确保 RIL_Init 函数正确初始化了 RIL_RadioFunctions 结构并返回其指针。

  6. RIL_SAP_Init 实现:尽管 RIL_SAP_Init 是可选的,有些实现中它被用于初始化 SAP(SIM Access Profile)功能。如果你的 RIL 实现依赖于 RIL_SAP_Init,需要确保它正确实现并导出。

  7. 配置和环境问题

  8. 配置文件:检查 RIL 的配置文件,通常位于 /vendor/etc//system/etc/ 下,确保配置文件正确指向 libhwa-ril.so,并且配置参数正确。

详细排查步骤

  1. 检查库文件
  2. 使用 nmreadelf 工具检查 libhwa-ril.so 是否包含 RIL_SAP_Init 符号:
    sh nm -D /vendor/lib64/libhwa-ril.so | grep RIL_SAP_Init

  3. 查看 RIL_Init 实现

  4. 确保 RIL_Init 函数返回的 RIL_RadioFunctions 结构已正确分配和初始化。例如:
    c RIL_RadioFunctions* RIL_Init(const struct RIL_Env *env, int argc, char **argv) { static RIL_RadioFunctions s_callbacks = { // 初始化你的回调函数 }; return &s_callbacks; }

  5. 检查 RIL_SAP_Init

  6. 如果 RIL_SAP_Init 是可选的,但在你的实现中被调用,确保其实现存在并导出:
    c RIL_RadioFunctions* RIL_SAP_Init(const struct RIL_Env *env, int argc, char **argv) { // 初始化 SAP 功能 static RIL_RadioFunctions s_sap_callbacks = { // 初始化你的 SAP 回调函数 }; return &s_sap_callbacks; }

  7. 验证配置文件

  8. 检查并确保 RIL 配置文件指向正确的库路径,并且参数设置正确。例如:
    ini # /vendor/etc/librefril.so /vendor/lib64/libhwa-ril.so

  9. 日志和调试

  10. 添加更多的日志信息,帮助追踪 RIL_InitRIL_SAP_Init 的执行情况。确保这些函数在调用时没有异常退出。

通过这些步骤,你应该能够更好地定位并解决 RIL_register: RIL_RadioFunctions * null 错误。

2024-06-20