0

我向我构建的内核模块添加了一个新的跟踪点。在 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 源文件中。

4

0 回答 0