Linux 4.x Aarch64内核ftrace_set_filter_ip返回EINVAL求助
关于Linux 4.x旧内核Aarch64架构下ftrace函数挂钩的问题
问题背景
此前咨询过Linux内核函数挂钩相关问题,目前正在学习ftrace技术。编写的示例程序在Linux 5.x、6.x 64位系统及树莓派4的Aarch64平台运行正常,但在Qemu中运行的Aarch64架构Linux 4.x旧内核测试时,ftrace_set_filter()和ftrace_set_filter_ip()始终返回EINVAL错误。
该代码参考xcellerator的示例修改而来,代码问题大概率出自我的修改,与原作者无关。
复现细节
- 以root用户执行
make编译后,使用insmod加载模块时提示“Invalid parameters” - dmesg显示函数地址解析正确,但
ftrace_set_filter_ip()返回-22(EINVAL) - 已验证函数地址与
/proc/kallsyms一致,尝试替换为ftrace_set_filter也得到相同错误 - 内核已开启相关ftrace配置
相关代码
相关代码、Makefile如下:
[头文件代码块]
[内核模块代码块]
[Makefile代码块]
疑问
- 我的代码是否存在遗漏?这是我首个ftrace相关代码,经验不足。
- 是否在Aarch64的4.x及更旧内核上使用过ftrace?针对旧内核需要注意或定制哪些内容?
- Linux 5.x/6.x与4.x及更旧内核的ftrace存在哪些限制或差异?
内容的提问来源于stack exchange,提问作者Jelal
相关产品推荐
相关产品推荐

