Qemu中使用libbpf-bootstrap报错找不到‘/sys/kernel/tracing‘路径

一、报错背景

libbpf: failed to open '/sys/kernel/tracing/events/syscalls/sys_enter_write/id': No such file or directory

libbpf: failed to determine tracepoint 'syscalls/sys_enter_write' perf event ID: No such file or directory

libbpf: prog 'handle_tp': failed to create tracepoint 'syscalls/sys_enter_write' perf event: No such file or directory

libbpf: prog 'handle_tp': failed to auto-attach: -2

Failed to attach BPF skeleton

二、分析思路

由于系统找不到/sys/kernel/tracing 和 /sys/kernel/debug路径,检查了qemu模拟的aarch确实没有看到该debug文件系统的存在,一开始以为是内核编译的时候模块配置的问题,仔细认真检查,尝试开启DEBUG_FS相关的各种模块配置之后,还是同样的报错。

所以尝试直接手动挂载debug_fs文件系统,正确的路径确实是:

bash 复制代码
mount -t debugfs none /sys/kernel/debug

完成路径挂载之后,看到/sys/kernel/debug目录下出现了文件,但是执行命令仍然报错。

仔细检查路径之后,看到报错的其实是在/sys/kernel/tracing/路径之下,所以就尝试将debugfs挂载到了上一级目录,执行竟然成功了。但是真相肯定不是止步于此。

bash 复制代码
mount -t debugfs none /sys/kernel

为了搞清楚在libbfp里为什么是挂载到/sys/kernel路径,而不是/sys/kernel/debug路径,单步调试libbpf源码,找到如下内容:

系统会根据faccessat去检查debugfs路径是否存在,起初以为手动挂载上debugfs之后应该就会正常,设置启动自动挂载,重启系统,检查/sys/kernel/debug文件路径是否存在,发现就算启动之后就存在,执行仍然失败。

bash 复制代码
echo "none /sys/kernel/debug debugfs defaults 0 0" | te
e -a /etc/fstab

在源码中增加打印,查找执行失败的原因,报错Function not implemented。

cpp 复制代码
static bool use_debugfs(void)
{
	static int has_debugfs = -1;

	if (has_debugfs < 0) {
	   has_debugfs = faccessat(AT_FDCWD, DEBUGFS, F_OK, AT_EACCESS) == 0;
       perror("faccessat");
    }
	return has_debugfs == 1;
}

对于这个报错AI提供了两个方向:

内核本文使用的是5.4.123,不存在是内核的原因;其次是检查系统的glibc版本,确实只是2.38。尝试使用buildroot更换更新的libc版本,但是发现这个已经比较新,也没有能手动指定glibc版本的地方。

是否是QEMU环境的问题也无从得知,如果有大佬清楚,麻烦留言帮忙解答。

三、解决方案

既然faccessat限制使用,那就换用类似的替代函数。access函数来判定文件目录是否存在,编译之后,执行成功。

相关推荐
予枫的编程笔记3 天前
【Redis核心原理篇4】Redis 哨兵模式:自动故障转移的实现原理
数据库·redis·bootstrap
叫我:松哥4 天前
spark+flask的新能源车数据分析与智能推荐系统,融合大数据分析、机器学习和人工智能技术
人工智能·机器学习·信息可视化·数据分析·spark·flask·bootstrap
结衣结衣.6 天前
Redis中的List列表
redis·bootstrap·list
XT46257 天前
交易、订单轮询策略(能用数据库轮询解决的不用Redis,能用Redis解决的不用消息队列)
数据库·redis·bootstrap
叫我:松哥8 天前
基于YOLO的图像识别系统,结合Flask、Bootstrap和SQLite,提供图像检测、数据管理和用户交互功能,可以检测80个类别
人工智能·python·yolo·信息可视化·sqlite·flask·bootstrap
seabirdssss9 天前
《bootstrap is not defined 导致“获取配置详情失败”?一次前端踩坑实录》
前端·bootstrap·html
WordPress学习笔记9 天前
解决Bootstrap下拉菜单一级链接无法点击的问题
前端·bootstrap·html
超级种码9 天前
Redis:Redis键值淘汰策略
redis·spring·bootstrap
结衣结衣.9 天前
Redis的基本全局命令以及数据类型和内部编码
数据库·redis·bootstrap
叫我:松哥11 天前
基于神经网络算法的多模态内容分析系统,采用Flask + Bootstrap + ECharts + LSTM-CNN + 注意力机制
前端·神经网络·算法·机器学习·flask·bootstrap·echarts