利用strace调试关机充电服务程序

使能strace

external/strace/Android.mk 补丁如下:

--- a/Android.mk
+++ b/Android.mk
@@ -232,7 +232,7 @@ LOCAL_C_INCLUDES_x86_64 := $(LOCAL_PATH)/linux/x86_64 $(LOCAL_PATH)/linux
 LOCAL_MODULE := strace
-LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES)
+LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT_SBIN)
 LOCAL_MODULE_TAGS := debug

strace默认会编译到TARGET_OUT_OPTIONAL_EXECUTABLES,其实是在system分区里,为了简化我们的编译过程,我们这里把它修改到TARGET_ROOT_OUT_SBIN,这样我们不用耗时重新编译system分区,只需要编译bootimage分区即可。strace默认是userdebug才会编译,所以如果不是userdebug版本,我们还需要修改上面的LOCAL_MODULE_TAGS。

重构charger service

进入到system/core目录,加入如下patch:

diff --git a/rootdir/init.rc b/rootdir/init.rc
index 2c26afe..be4e572 100644
--- a/rootdir/init.rc
+++ b/rootdir/init.rc

@@ -711,6 +711,11 @@ on property:security.perf_harden=1
 # In device's init.rc, this trigger can be used to do device-specific actions
 # before shutdown. e.g disable watchdog and mask error handling

+service charger /sbin/strace -o /data/charger.strace /charger
+       class charger
+       group system graphics
+       seclabel u:r:healthd:s0
+
 ## Daemon processes to be run by init.
 ##
 service ueventd /sbin/ueventd

这里主要修改init.rc原因和上面一样,是为了方便编译,因为init.rc是保存在boot分区根目录下的,所以最终我们只需要编译更新boot分区即可。
关键的步骤是重构charger service为:

/sbin/strace -o /data/charger.strace /charger

这样就可以用strace记录charger运行的相关log到/data/charger.strace文件中。

配置SElinux

需要配置selinux为permissive,放开strace的运行权限。
BoardConfig.mk:

BOARD_KERNEL_CMDLINE:=(省略......)androidboot.selinux=permissive
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值