解决android 4.4及5.1无法使用Systrace
Systrace的详细使用说明及介绍请参考:https://blog.****.net/LAMP_zy/article/details/53375521
最近接到客户反馈在android4.4版本的平台上适配新的apk出现了整个系统非常卡顿,UI刷新非常慢,从top -t -m 5和vmstat命令中无法分析出具体原因,咨询了公司的android系统方面的大神,需要使用SDK中的Systrace才能更好的分析问题的原因。于是在网上找到了相关博客了解并摸索抓trace进行分析,但是很不幸出现了打开节点的报错。
根据报错的信息来看,Systrace功能依赖/sys/kernel/debug/下面的traceing节点,但是打开失败。我用串口在cat /sys/kernel/debug/发现找不到traceing节点。一般来说traceing节点是android默认自带的,如果出现了有/sys/kernel/debug/,但是找不到traceing节点的问题就是在init.rc中执行了mount debugfs debugfs /sys/kernel/debug,但是中缺少某些config导致的。
请检查项目使用的deconfig文件,增加以下config:
CONFIG_TRACING=y
CONFIG_FTRACE=y
CONFIG_CONTEXT_SWITCH_TRACER=y
CONFIG_FUNCTION_TRACER=y
CONFIG_IRQSOFF_TRACER=y
CONFIG_SCHED_TRACER=y
CONFIG_STACK_TRACER=y
CONFIG_EVENT_TRACING=y
CONFIG_FTRACE_SYSCALLS=y
然后make clean,编译整机包升级验证。
如果升级起来出现kernel死掉,类似以下load_module ko出错
请在code中删除出错的闭源KO(客户项目中有一个idong200alg.ko,删掉该ko可以解决死机问题),然后重新编译
最后附上一张Systrace相关的资料,可能会有一些帮助:
在android5.1的客户项目中按照之前的步骤使用Systrace,执行到最后一步获取trace.html文件时,会一直提示以下错误
Unexpected error while collecting system trace.
Unable to find trace start marker 'TRACE:':
error opening /sys/kernel/debug/tracing/options/overwrite: Permission denied (13)
unable to start tr
最后在网上寻找到了解决办法,
先在adb中执行:adb root,然后再重新执行adb connect ip