Android 11如何生成coredump

本文介绍了如何在Android5.4内核中启用coredump功能,包括修改kernelconfig、关闭linker信号拦截、取消debuggerdhandler注册、配置init.rc和selinux权限,以及测试方法。
摘要由CSDN通过智能技术生成

一,使能 kernel config

可以是 kernel/msm-5.4/arch/arm64/configs/defconfig

或者:kernel/configs/r/android-5.4/android-base.config

添加一行

CONFIG_COREDUMP=y


二,关闭linker的信号拦截

关闭linker的信号拦截之后,kernel 默认会处理信号。
bionic/linker/linker_main.cpp::linker_main() 函数里面注释掉如下函数:

  //linker_debuggerd_init();  enable_coredump


三, 关闭debuggerd的handler注册

关闭debuggerd的handler注册,是为了避免因为dump或者intercept产生了过多的coredump.

system/core/debuggerd/handler/debuggerd_handler.cpp
void debuggerd_init(debuggerd_callbacks_t* callbacks) 函数里面,注释掉:

  //debuggerd_register_handlers(&action); enable_coredump


四,修改init.rc

任意能否编译到的init.rc即可。比如init.target.rc

由于要使用/data分区,所以这个阶段要在/data分区解密完成以后。

on post-fs-data
# enable_coredump
    setrlimit 4 -1 -1
    setrlimit core -1 -1
    #ulimit -c unlimited
    write /proc/sys/fs/suid_dumpable 1
    write /proc/sys/kernel/core_uses_pid 1
    mkdir /data/coredump 0777 system system
    write /proc/sys/kernel/core_pattern /data/coredump/core.%e.%p

五,修改selinux权限

临时提升成permissive.

system/core/init/selinux.cpp

index 0ba5c4ae3..748c15b32 100644
--- a/init/selinux.cpp
+++ b/init/selinux.cpp
@@ -76,7 +76,7 @@ selabel_handle* sehandle = nullptr;
enum EnforcingStatus { SELINUX_PERMISSIVE, SELINUX_ENFORCING };
EnforcingStatus StatusFromCmdline() {
- EnforcingStatus status = SELINUX_ENFORCING;
+ EnforcingStatus status = SELINUX_PERMISSIVE;


六,测试

1|android:/ # kill -6 `pidof surfaceflinger`

  查看 /data/coredump 文件夹下面是否生成该进程的coredump 

android:/ # ls /data/coredump |grep surfaceflinger
core.surfaceflinger.731

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值