在 MAKO 中初始化 ftrace 失败
Fail to initialize ftrace in MAKO
我正在尝试在 MAKO (Nexus 4) 中使用 ftrace
使用来自 msm.git 的 android-msm-mako-3.4-lollipop-release 分支,
我刚刚在 mako_defconfig
中添加了以下配置
CONFIG_TRACING=y
CONFIG_FUNCTION_TRACER=y
CONFIG_DYNAMIC_FTRACE=y
CONFIG_STACK_TRACER=y
CONFIG_FUNCTION_GRAPH_TRACER=y
但是ftrace_init开机失败
kmsg
中有一些失败的日志
<6>[ 0.002197] ftrace: allocating 32821 entries in 97 pages
<4>[ 0.033053] ------------[ cut here ]------------
<4>[ 0.033084] WARNING: at kernel/trace/ftrace.c:1590 ftrace_bug+0xec/0x174()
<4>[ 0.033114] [<c0015230>] (unwind_backtrace+0x0/0xec) from [<c08a7dc4>] (dump_stack+0x20/0x24)
<4>[ 0.033145] [<c08a7dc4>] (dump_stack+0x20/0x24) from [<c0075c98>] (warn_slowpath_common+0x58/0x70)
<4>[ 0.033175] [<c0075c98>] (warn_slowpath_common+0x58/0x70) from [<c0075da8>] (warn_slowpath_null+0x2c/0x34)
<4>[ 0.033206] [<c0075da8>] (warn_slowpath_null+0x2c/0x34) from [<c00e0558>] (ftrace_bug+0xec/0x174)
<4>[ 0.033236] [<c00e0558>] (ftrace_bug+0xec/0x174) from [<c0d14a50>] (ftrace_init+0x408/0x4bc)
<4>[ 0.033267] [<c0d14a50>] (ftrace_init+0x408/0x4bc) from [<c0d0095c>] (start_kernel+0x420/0x48c)
<4>[ 0.033297] [<c0d0095c>] (start_kernel+0x420/0x48c) from [<8020803c>] (0x8020803c)
<4>[ 0.033358] ---[ end trace d633338057b77c0d ]---
<6>[ 0.033358] ftrace faulted on writing [<c010203c>] perf_output_put_handle+0x10/0xec
我觉得写不过0xC010_0000,所以是kernel size的问题
但是,我只是用普通代码添加了那些跟踪配置,我该如何解决这个问题?
添加一些日志,
我屏蔽了 ftrace_bug 函数,它调用 ftrace_kill,它禁用了 ftrace。
相反,我记录了哪个函数出错了
<6>[ 0.002350] ftrace: allocating 32821 entries in 97 pages
<4>[ 0.032778] ftrace failed 2[<c010206c>] perf_output_put_handle+0x10/0xec
<4>[ 0.032809] ftrace failed 2[<c057fd00>] iw_get_linkspeed+0x14/0x13c
<4>[ 0.032839] ftrace failed 2[<c0886308>] wireless_spy_update+0x10/0xec
好像有些特定的功能被屏蔽了,写不出来;;
我找到了自己。
原因是内核代码区写保护
如果你想在 Nexus 中使用 ftrace,你必须在 defconfig 文件中禁用 CONFIG_STRICT_MEMORY_RWX 配置。
希望对您有所帮助。
我正在尝试在 MAKO (Nexus 4) 中使用 ftrace
使用来自 msm.git 的 android-msm-mako-3.4-lollipop-release 分支, 我刚刚在 mako_defconfig
中添加了以下配置CONFIG_TRACING=y
CONFIG_FUNCTION_TRACER=y
CONFIG_DYNAMIC_FTRACE=y
CONFIG_STACK_TRACER=y
CONFIG_FUNCTION_GRAPH_TRACER=y
但是ftrace_init开机失败 kmsg
中有一些失败的日志<6>[ 0.002197] ftrace: allocating 32821 entries in 97 pages
<4>[ 0.033053] ------------[ cut here ]------------
<4>[ 0.033084] WARNING: at kernel/trace/ftrace.c:1590 ftrace_bug+0xec/0x174()
<4>[ 0.033114] [<c0015230>] (unwind_backtrace+0x0/0xec) from [<c08a7dc4>] (dump_stack+0x20/0x24)
<4>[ 0.033145] [<c08a7dc4>] (dump_stack+0x20/0x24) from [<c0075c98>] (warn_slowpath_common+0x58/0x70)
<4>[ 0.033175] [<c0075c98>] (warn_slowpath_common+0x58/0x70) from [<c0075da8>] (warn_slowpath_null+0x2c/0x34)
<4>[ 0.033206] [<c0075da8>] (warn_slowpath_null+0x2c/0x34) from [<c00e0558>] (ftrace_bug+0xec/0x174)
<4>[ 0.033236] [<c00e0558>] (ftrace_bug+0xec/0x174) from [<c0d14a50>] (ftrace_init+0x408/0x4bc)
<4>[ 0.033267] [<c0d14a50>] (ftrace_init+0x408/0x4bc) from [<c0d0095c>] (start_kernel+0x420/0x48c)
<4>[ 0.033297] [<c0d0095c>] (start_kernel+0x420/0x48c) from [<8020803c>] (0x8020803c)
<4>[ 0.033358] ---[ end trace d633338057b77c0d ]---
<6>[ 0.033358] ftrace faulted on writing [<c010203c>] perf_output_put_handle+0x10/0xec
我觉得写不过0xC010_0000,所以是kernel size的问题 但是,我只是用普通代码添加了那些跟踪配置,我该如何解决这个问题?
添加一些日志, 我屏蔽了 ftrace_bug 函数,它调用 ftrace_kill,它禁用了 ftrace。 相反,我记录了哪个函数出错了
<6>[ 0.002350] ftrace: allocating 32821 entries in 97 pages
<4>[ 0.032778] ftrace failed 2[<c010206c>] perf_output_put_handle+0x10/0xec
<4>[ 0.032809] ftrace failed 2[<c057fd00>] iw_get_linkspeed+0x14/0x13c
<4>[ 0.032839] ftrace failed 2[<c0886308>] wireless_spy_update+0x10/0xec
好像有些特定的功能被屏蔽了,写不出来;;
我找到了自己。
原因是内核代码区写保护
如果你想在 Nexus 中使用 ftrace,你必须在 defconfig 文件中禁用 CONFIG_STRICT_MEMORY_RWX 配置。
希望对您有所帮助。