版权声明:本文为博主原创文章,未经博主允许不得转载。 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