Я добавил новую точку трассировки в построенный модуль ядра. Через несколько секунд после 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>
затем в одном из моих C исходных файлов, которые я только что назвал trace_dummy_trace
с байтовым параметром.