我向我构建的内核模块添加了一个新的跟踪点。在 insmod 后几秒钟,我的驱动程序 refcnt 保持在 1,从这一点开始我无法卸载我的模块。
我已按照https://lwn.net/Articles/383362/上的说明进行操作。
在 Ubuntu 18.04.4 - 内核 4.15.0-rc4 上运行。
我启用了跟踪以检查正在使用我的模块的内容,并且看起来跟踪点代码 ( perf_trace_init
) 正在“持有”我的模块。
知道我做错了什么吗?
代码片段:
#undef TRACE_SYSTEM
#define TRACE_SYSTEM dummy
#if !defined(_DUMMY_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
#define _DUMMY_TRACE_H
#include <linux/tracepoint.h>
TRACE_EVENT(dummy_trace,
TP_PROTO(int bytes),
TP_ARGS(bytes),
TP_STRUCT__entry(
__field(int, bytes)
),
TP_fast_assign(
__entry->bytes = bytes;
),
TP_printk("bytes = %d", __entry->bytes)
);
#endif /* _DUMMY_TRACE_H */
/* This part must be outside protection */
#undef TRACE_INCLUDE_PATH
#define TRACE_INCLUDE_PATH /home/user/dummy/
#define TRACE_INCLUDE_FILE dummy_trace
#include <trace/define_trace.h>
然后在我刚刚trace_dummy_trace
使用 bytes 参数调用的一个 C 源文件中。