You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AOSP 6.0 init进程添加调用栈打印遇链接错误求助

解决AOSP 6.0 init进程添加CallStack的链接错误与无限重启问题

问题根源分析

  1. 链接错误原因:init是Android系统最早启动的进程之一,采用静态编译构建。你依赖的libbacktrace默认是共享库(.so),静态链接器处理静态库libutils的依赖时,无法解析共享库libbacktrace中的Backtrace::Create符号——静态链接仅处理静态库符号,不会自动关联共享库符号。
  2. 无限重启原因:手动添加libbacktrace.so路径编译成功后,刷入设备时init启动阶段尚未完成/system分区挂载,无法加载位于/system/lib下的libbacktrace.so,动态链接失败导致进程崩溃,触发系统无限重启。

解决方案

步骤1:修改libbacktrace编译配置,生成静态库

编辑system/core/libbacktrace/Android.mk,确保生成静态库版本:

LOCAL_MODULE := libbacktrace
LOCAL_MODULE_TAGS := optional

# 保留原有源码、头文件等配置,新增静态库编译规则
include $(BUILD_STATIC_LIBRARY)
# 若需要同时保留共享库版本,可追加:
# include $(BUILD_SHARED_LIBRARY)

步骤2:调整init的Android.mk,静态链接依赖库

编辑system/core/init/Android.mk,将依赖改为静态库:

# 替换原有依赖配置,确保静态链接libbacktrace与libutils
LOCAL_STATIC_LIBRARIES := libbase libbacktrace libutils

步骤3:重新编译并验证

  1. 执行编译命令:
make init -j$(nproc)
  1. 刷入编译后的init镜像,验证系统启动是否正常,可通过adb logcat | grep TomYeo查看CallStack的打印内容。

额外说明

AOSP 6.0的init进程必须完全静态链接所有依赖,因为启动阶段还未初始化动态链接器(ld.so),无法加载任何共享库。

内容的提问来源于stack exchange,提问作者Tom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 13:48:13