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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/rikeyone/article/details/84309147

使能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

猜你喜欢

转载自blog.csdn.net/rikeyone/article/details/84309147