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
在 Android 11 RK3568 上遇到 RIL_register: RIL_RadioFunctions * null 错误通常表示你的 RIL (Radio Interface Layer) 实现中,RIL_Init 返回的 RIL_RadioFunctions 指针为空。这个问题通常源于以下几个方面:
RIL_register: RIL_RadioFunctions * null
RIL_Init
RIL_RadioFunctions
动态链接库:从日志 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 库版本正确,并且库文件包含所有需要的符号。
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
ABI 和架构不匹配:确保库文件的 ABI(应用二进制接口)和架构与设备的架构匹配。如果你在 64 位系统上运行 32 位库,或者相反,这可能导致类似的问题。
RIL 初始化逻辑:
RIL_Init 实现:检查 RIL_Init 函数的实现,确保其返回一个有效的 RIL_RadioFunctions 指针。你需要确保 RIL_Init 函数正确初始化了 RIL_RadioFunctions 结构并返回其指针。
RIL_SAP_Init 实现:尽管 RIL_SAP_Init 是可选的,有些实现中它被用于初始化 SAP(SIM Access Profile)功能。如果你的 RIL 实现依赖于 RIL_SAP_Init,需要确保它正确实现并导出。
配置和环境问题:
/vendor/etc/
/system/etc/
libhwa-ril.so
使用 nm 或 readelf 工具检查 libhwa-ril.so 是否包含 RIL_SAP_Init 符号: sh nm -D /vendor/lib64/libhwa-ril.so | grep RIL_SAP_Init
nm
readelf
sh nm -D /vendor/lib64/libhwa-ril.so | grep RIL_SAP_Init
查看 RIL_Init 实现:
确保 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; }
c RIL_RadioFunctions* RIL_Init(const struct RIL_Env *env, int argc, char **argv) { static RIL_RadioFunctions s_callbacks = { // 初始化你的回调函数 }; return &s_callbacks; }
检查 RIL_SAP_Init:
如果 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; }
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; }
验证配置文件:
检查并确保 RIL 配置文件指向正确的库路径,并且参数设置正确。例如: ini # /vendor/etc/librefril.so /vendor/lib64/libhwa-ril.so
ini # /vendor/etc/librefril.so /vendor/lib64/libhwa-ril.so
日志和调试:
通过这些步骤,你应该能够更好地定位并解决 RIL_register: RIL_RadioFunctions * null 错误。