Nexus 6P自定义内核开Function Tracer后读tracing文件报No such device求助
Nexus 6P 重编开启ftrace后读取available_filter_functions报错问题
问题背景
- 测试设备为Nexus 6P(angler),内核研究方向为虚拟内存管理逻辑
- 原厂默认AOSP内核未开启
CONFIG_FUNCTION_TRACER,无法通过function tracer追踪内存管理函数运行路径 - 已完成操作流程:下载对应版本Android内核源码,手动开启
CONFIG_FUNCTION_TRACER及关联依赖配置后重新编译内核,替换内核镜像重编boot镜像并刷入设备 - 刷入后设备可正常启动,所有基础功能无异常,但执行ftrace节点读取命令时返回错误
- 已完成初步排查:检查对应路径SELinux上下文标签,执行
setenforce 0切换SELinux为permissive宽容模式,问题未解决
复现命令与输出
C:\Users\dvdface>adb shell angler:/ # cd /sys/kernel/debug/tracing/ angler:/sys/kernel/debug/tracing # ls README dyn_ftrace_total_info per_cpu set_ftrace_pid tracing_cpumask available_events enabled_functions printk_formats set_graph_function tracing_on available_filter_functions events saved_cmdlines trace tracing_thresh available_tracers free_buffer saved_tgids trace_clock buffer_size_kb instances set_event trace_marker buffer_total_size_kb max_graph_depth set_ftrace_filter trace_options current_tracer options set_ftrace_notrace trace_pipe angler:/sys/kernel/debug/tracing # cat available_filter_functions cat: available_filter_functions: No such device
核心排查方向
- 校验编译内核的实际配置是否真的生效:不要只参考menuconfig的选中状态,要直接查看编译目录下生成的
.config文件,确认CONFIG_FUNCTION_TRACER=y、CONFIG_DYNAMIC_FTRACE=y、CONFIG_FUNCTION_PROFILER=y三个核心配置是否真的被编入内核——Nexus 6P对应的老版本arm64 EAS内核存在配置依赖硬编码,很可能出现手动选中配置后被Kconfig逻辑自动裁剪为未选中的情况 - 定位报错本质:
available_filter_functions节点能通过ls看到、但读取时返回"No such device"(对应内核返回值-ENODEV),大概率是老内核的ftrace节点注册逻辑问题——如果未开启CONFIG_DYNAMIC_FTRACE,即便开启了基础CONFIG_FUNCTION_TRACER,available_filter_functions节点也不会完成真正的初始化,节点inode只做目录占位,打开时直接返回无设备错误 - 检查内核启动日志的ftrace初始化记录:执行
dmesg | grep -i ftrace,如果看到ftrace符号表为空、动态追踪初始化失败的日志,基本可以确认是编译时漏开了必要的依赖配置 - 排除debugfs挂载异常:执行
mount | grep debugfs,确认debugfs是完整挂载到/sys/kernel/debug路径,不存在部分挂载、权限异常的情况
内容的提问来源于stack exchange,提问作者Kevin Ding
相关产品推荐
相关产品推荐

